Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qgeomappingmanagerenginemapboxgl.cpp
Go to the documentation of this file.
1// Copyright (C) 2017 The Qt Company Ltd.
2// Copyright (C) 2017 Mapbox, Inc.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4
6#include "qgeomapmapboxgl.h"
7
8#include <QtCore/qstandardpaths.h>
9#include <QtLocation/private/qabstractgeotilecache_p.h>
10#include <QtLocation/private/qgeocameracapabilities_p.h>
11#include <QtLocation/private/qgeomaptype_p.h>
12
13#include <QDir>
14
16
19{
21 errorString->clear();
22
23 QGeoCameraCapabilities cameraCaps;
24 cameraCaps.setMinimumZoomLevel(0.0);
25 cameraCaps.setMaximumZoomLevel(20.0);
26 cameraCaps.setTileSize(512);
27 cameraCaps.setSupportsBearing(true);
28 cameraCaps.setSupportsTilting(true);
29 cameraCaps.setMinimumTilt(0);
30 cameraCaps.setMaximumTilt(60);
31 cameraCaps.setMinimumFieldOfView(36.87);
32 cameraCaps.setMaximumFieldOfView(36.87);
33 setCameraCapabilities(cameraCaps);
34
35 QList<QGeoMapType> mapTypes;
36 int mapId = 0;
37 const QByteArray pluginName = "mapboxgl";
38
39 if (parameters.contains(QStringLiteral("mapboxgl.china"))) {
40 m_useChinaEndpoint = parameters.value(QStringLiteral("mapboxgl.china")).toBool();
41 }
42
43 if (parameters.contains(QStringLiteral("mapboxgl.api_base_url"))) {
44 const QString apiBaseUrl = parameters.value(QStringLiteral("mapboxgl.api_base_url")).toString();
45 m_settings.setApiBaseUrl(apiBaseUrl);
46 }
47
48 QVariantMap metadata;
49 metadata["isHTTPS"] = true;
50
51 if (m_useChinaEndpoint) {
52 m_settings.setApiBaseUrl(QStringLiteral("https://api.mapbox.cn"));
53
54 mapTypes << QGeoMapType(QGeoMapType::StreetMap, QStringLiteral("mapbox://styles/mapbox/streets-zh-v1"),
55 tr("China Streets"), false, false, ++mapId, pluginName, cameraCaps, metadata);
56 mapTypes << QGeoMapType(QGeoMapType::GrayStreetMap, QStringLiteral("mapbox://styles/mapbox/light-zh-v1"),
57 tr("China Light"), false, false, ++mapId, pluginName, cameraCaps, metadata);
58 mapTypes << QGeoMapType(QGeoMapType::GrayStreetMap, QStringLiteral("mapbox://styles/mapbox/dark-zh-v1"),
59 tr("China Dark"), false, false, ++mapId, pluginName, cameraCaps, metadata);
60 } else {
61 mapTypes << QGeoMapType(QGeoMapType::StreetMap, QStringLiteral("mapbox://styles/mapbox/streets-v10"),
62 tr("Streets"), false, false, ++mapId, pluginName, cameraCaps, metadata);
63 mapTypes << QGeoMapType(QGeoMapType::StreetMap, QStringLiteral("mapbox://styles/mapbox/basic-v9"),
64 tr("Basic"), false, false, ++mapId, pluginName, cameraCaps, metadata);
65 mapTypes << QGeoMapType(QGeoMapType::StreetMap, QStringLiteral("mapbox://styles/mapbox/bright-v9"),
66 tr("Bright"), false, false, ++mapId, pluginName, cameraCaps, metadata);
67 mapTypes << QGeoMapType(QGeoMapType::TerrainMap, QStringLiteral("mapbox://styles/mapbox/outdoors-v10"),
68 tr("Outdoors"), false, false, ++mapId, pluginName, cameraCaps, metadata);
69 mapTypes << QGeoMapType(QGeoMapType::SatelliteMapDay, QStringLiteral("mapbox://styles/mapbox/satellite-v9"),
70 tr("Satellite"), false, false, ++mapId, pluginName, cameraCaps, metadata);
71 mapTypes << QGeoMapType(QGeoMapType::HybridMap, QStringLiteral("mapbox://styles/mapbox/satellite-streets-v10"),
72 tr("Satellite Streets"), false, false, ++mapId, pluginName, cameraCaps, metadata);
73 mapTypes << QGeoMapType(QGeoMapType::GrayStreetMap, QStringLiteral("mapbox://styles/mapbox/light-v9"),
74 tr("Light"), false, false, ++mapId, pluginName, cameraCaps, metadata);
75 mapTypes << QGeoMapType(QGeoMapType::GrayStreetMap, QStringLiteral("mapbox://styles/mapbox/dark-v9"),
76 tr("Dark"), false, false, ++mapId, pluginName, cameraCaps, metadata);
77 mapTypes << QGeoMapType(QGeoMapType::TransitMap, QStringLiteral("mapbox://styles/mapbox/navigation-preview-day-v2"),
78 tr("Navigation Preview Day"), false, false, ++mapId, pluginName, cameraCaps, metadata);
79 mapTypes << QGeoMapType(QGeoMapType::TransitMap, QStringLiteral("mapbox://styles/mapbox/navigation-preview-night-v2"),
80 tr("Navigation Preview Night"), false, true, ++mapId, pluginName, cameraCaps, metadata);
81 mapTypes << QGeoMapType(QGeoMapType::CarNavigationMap, QStringLiteral("mapbox://styles/mapbox/navigation-guidance-day-v2"),
82 tr("Navigation Guidance Day"), false, false, ++mapId, pluginName, cameraCaps, metadata);
83 mapTypes << QGeoMapType(QGeoMapType::CarNavigationMap, QStringLiteral("mapbox://styles/mapbox/navigation-guidance-night-v2"),
84 tr("Navigation Guidance Night"), false, true, ++mapId, pluginName, cameraCaps, metadata);
85 }
86
87 if (parameters.contains(QStringLiteral("mapboxgl.mapping.additional_style_urls"))) {
88 const QString ids = parameters.value(QStringLiteral("mapboxgl.mapping.additional_style_urls")).toString();
89 const QStringList idList = ids.split(',', Qt::SkipEmptyParts);
90
91 for (auto it = idList.crbegin(), end = idList.crend(); it != end; ++it) {
92 if ((*it).isEmpty())
93 continue;
94 if ((*it).startsWith(QStringLiteral("http:")))
95 metadata["isHTTPS"] = false;
96 else
97 metadata["isHTTPS"] = true;
98
100 tr("User provided style"), false, false, ++mapId, pluginName, cameraCaps, metadata));
101 }
102 }
103
104 setSupportedMapTypes(mapTypes);
105
106 if (parameters.contains(QStringLiteral("mapboxgl.access_token"))) {
107 m_settings.setAccessToken(parameters.value(QStringLiteral("mapboxgl.access_token")).toString());
108 }
109
110 bool memoryCache = false;
111 if (parameters.contains(QStringLiteral("mapboxgl.mapping.cache.memory"))) {
112 memoryCache = parameters.value(QStringLiteral("mapboxgl.mapping.cache.memory")).toBool();
113 m_settings.setCacheDatabasePath(QStringLiteral(":memory:"));
114 }
115
116 QString cacheDirectory;
117 if (parameters.contains(QStringLiteral("mapboxgl.mapping.cache.directory"))) {
118 cacheDirectory = parameters.value(QStringLiteral("mapboxgl.mapping.cache.directory")).toString();
119 } else {
121 }
122
123 if (!memoryCache && QDir::root().mkpath(cacheDirectory)) {
124 m_settings.setCacheDatabasePath(cacheDirectory + "/mapboxgl.db");
125 }
126
127 if (parameters.contains(QStringLiteral("mapboxgl.mapping.cache.size"))) {
128 bool ok = false;
129 int cacheSize = parameters.value(QStringLiteral("mapboxgl.mapping.cache.size")).toString().toInt(&ok);
130
131 if (ok)
132 m_settings.setCacheDatabaseMaximumSize(cacheSize);
133 }
134
135 if (parameters.contains(QStringLiteral("mapboxgl.mapping.use_fbo"))) {
136 m_useFBO = parameters.value(QStringLiteral("mapboxgl.mapping.use_fbo")).toBool();
137 }
138
139 if (parameters.contains(QStringLiteral("mapboxgl.mapping.items.insert_before"))) {
140 m_mapItemsBefore = parameters.value(QStringLiteral("mapboxgl.mapping.items.insert_before")).toString();
141 }
142
144}
145
147{
148}
149
151{
152 QGeoMapMapboxGL* map = new QGeoMapMapboxGL(this, 0);
153 map->setMapboxGLSettings(m_settings, m_useChinaEndpoint);
154 map->setUseFBO(m_useFBO);
155 map->setMapItemsBefore(m_mapItemsBefore);
156
157 return map;
158}
159
static QString baseLocationCacheDirectory()
\inmodule QtCore
Definition qbytearray.h:57
static QDir root()
Returns the root directory.
Definition qdir.h:221
void setSupportsBearing(bool supportsBearing)
Sets whether the associated plugin can render a map when the camera has an arbitrary bearing to suppo...
void setMaximumZoomLevel(double maximumZoomLevel)
void setMaximumTilt(double maximumTilt)
void setMaximumFieldOfView(double maximumFieldOfView)
void setMinimumFieldOfView(double minimumFieldOfView)
void setMinimumTilt(double minimumTilt)
void setMinimumZoomLevel(double minimumZoomLevel)
void setSupportsTilting(bool supportsTilting)
Sets whether the associated plugin can render a map when the camera is tilted to supportsTilting.
QGeoMappingManagerEngineMapboxGL(const QVariantMap &parameters, QGeoServiceProvider::Error *error, QString *errorString)
void setCameraCapabilities(const QGeoCameraCapabilities &capabilities)
void engineInitialized()
Marks the engine as initialized.
void setSupportedMapTypes(const QList< QGeoMapType > &supportedMapTypes)
Sets the list of map types supported by this engine to mapTypes.
QVariantMap parameters() const
Error
Describes an error related to the loading and setup of a service provider plugin.
Definition qlist.h:74
void prepend(rvalue_ref t)
Definition qlist.h:456
T value(const Key &key, const T &defaultValue=T()) const
Definition qmap.h:356
bool contains(const Key &key) const
Definition qmap.h:340
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
int toInt(bool *ok=nullptr, int base=10) const
Returns the string converted to an int using base base, which is 10 by default and must be between 2 ...
Definition qstring.h:660
void clear()
Clears the contents of the string and makes it null.
Definition qstring.h:1107
QString toString() const
Returns the variant as a QString if the variant has a userType() including, but not limited to:
bool toBool() const
Returns the variant as a bool if the variant has userType() Bool.
QMap< QString, QString > map
[6]
QSet< QString >::iterator it
Combined button and popup list for selecting options.
@ SkipEmptyParts
Definition qnamespace.h:127
DBusConnection const char DBusError * error
GLuint GLuint end
GLenum GLenum GLsizei const GLuint * ids
static quint64 cacheSize()
#define QStringLiteral(str)
#define tr(X)
char * toString(const MyType &t)
[31]