Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
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
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
15QT_BEGIN_NAMESPACE
16
17QGeoMappingManagerEngineMapboxGL::QGeoMappingManagerEngineMapboxGL(const QVariantMap &parameters, QGeoServiceProvider::Error *error, QString *errorString)
18: QGeoMappingManagerEngine()
19{
20 *error = QGeoServiceProvider::NoError;
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 {
120 cacheDirectory = QAbstractGeoTileCache::baseLocationCacheDirectory() + QStringLiteral("mapboxgl/");
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
143 engineInitialized();
144}
145
146QGeoMappingManagerEngineMapboxGL::~QGeoMappingManagerEngineMapboxGL()
147{
148}
149
150QGeoMap *QGeoMappingManagerEngineMapboxGL::createMap()
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
160QT_END_NAMESPACE