Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
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
99 mapTypes.prepend(QGeoMapType(QGeoMapType::CustomMap, *it,
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
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:224
void setMinimumZoomLevel(double minimumZoomLevel)
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.
T value(const Key &key, const T &defaultValue=T()) const
Definition qmap.h:357
bool contains(const Key &key) const
Definition qmap.h:341
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
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:731
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:128
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]