17QGeoMappingManagerEngineMapboxGL::QGeoMappingManagerEngineMapboxGL(
const QVariantMap ¶meters, QGeoServiceProvider::Error *error, QString *errorString)
18: QGeoMappingManagerEngine()
20 *error = QGeoServiceProvider::NoError;
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);
35 QList<QGeoMapType> mapTypes;
37 const QByteArray pluginName =
"mapboxgl";
39 if (parameters.contains(QStringLiteral(
"mapboxgl.china"))) {
40 m_useChinaEndpoint = parameters.value(QStringLiteral(
"mapboxgl.china")).toBool();
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);
49 metadata[
"isHTTPS"] =
true;
51 if (m_useChinaEndpoint) {
52 m_settings.setApiBaseUrl(QStringLiteral(
"https://api.mapbox.cn"));
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);
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);
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);
91 for (
auto it = idList.crbegin(), end = idList.crend(); it != end; ++it) {
94 if ((*it).startsWith(QStringLiteral(
"http:")))
95 metadata[
"isHTTPS"] =
false;
97 metadata[
"isHTTPS"] =
true;
99 mapTypes.prepend(QGeoMapType(QGeoMapType::CustomMap, *it,
100 tr(
"User provided style"),
false,
false, ++mapId, pluginName, cameraCaps, metadata));
104 setSupportedMapTypes(mapTypes);
106 if (parameters.contains(QStringLiteral(
"mapboxgl.access_token"))) {
107 m_settings.setAccessToken(parameters.value(QStringLiteral(
"mapboxgl.access_token")).toString());
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:"));
116 QString cacheDirectory;
117 if (parameters.contains(QStringLiteral(
"mapboxgl.mapping.cache.directory"))) {
118 cacheDirectory = parameters.value(QStringLiteral(
"mapboxgl.mapping.cache.directory")).toString();
120 cacheDirectory = QAbstractGeoTileCache::baseLocationCacheDirectory() + QStringLiteral(
"mapboxgl/");
123 if (!memoryCache && QDir::root().mkpath(cacheDirectory)) {
124 m_settings.setCacheDatabasePath(cacheDirectory +
"/mapboxgl.db");
127 if (parameters.contains(QStringLiteral(
"mapboxgl.mapping.cache.size"))) {
129 int cacheSize = parameters.value(QStringLiteral(
"mapboxgl.mapping.cache.size")).toString().toInt(&ok);
132 m_settings.setCacheDatabaseMaximumSize(cacheSize);
135 if (parameters.contains(QStringLiteral(
"mapboxgl.mapping.use_fbo"))) {
136 m_useFBO = parameters.value(QStringLiteral(
"mapboxgl.mapping.use_fbo")).toBool();
139 if (parameters.contains(QStringLiteral(
"mapboxgl.mapping.items.insert_before"))) {
140 m_mapItemsBefore = parameters.value(QStringLiteral(
"mapboxgl.mapping.items.insert_before")).toString();