From 92f973556242691e9908ed813ac51a9b1951da16 Mon Sep 17 00:00:00 2001 From: Shatyuka <958182453@qq.com> Date: Sat, 22 Aug 2020 15:46:35 +0800 Subject: [PATCH] Add support for custom Mapbox style --- src/QtLocationPlugin/MapboxMapProvider.cpp | 6 ++++ src/QtLocationPlugin/MapboxMapProvider.h | 9 +++++ src/QtLocationPlugin/QGCMapUrlEngine.cpp | 1 + .../QMLControl/OfflineMap.qml | 36 +++++++++++++++++++ src/Settings/App.SettingsGroup.json | 14 ++++++++ src/Settings/AppSettings.cc | 2 ++ src/Settings/AppSettings.h | 2 ++ 7 files changed, 70 insertions(+) diff --git a/src/QtLocationPlugin/MapboxMapProvider.cpp b/src/QtLocationPlugin/MapboxMapProvider.cpp index 214bd8bec..15c2117a1 100644 --- a/src/QtLocationPlugin/MapboxMapProvider.cpp +++ b/src/QtLocationPlugin/MapboxMapProvider.cpp @@ -4,6 +4,7 @@ #include "SettingsManager.h" static const QString MapBoxUrl = QStringLiteral("https://api.mapbox.com/v4/%1/%2/%3/%4.jpg80?access_token=%5"); +static const QString MapBoxUrlCustom = QStringLiteral("https://api.mapbox.com/styles/v1/%1/%2/tiles/256/%3/%4/%5?access_token=%6"); MapboxMapProvider::MapboxMapProvider(const QString &mapName, const quint32 averageSize, const QGeoMapType::MapStyle mapType, QObject* parent) : MapProvider(QStringLiteral("https://www.mapbox.com/"), QStringLiteral("jpg"), averageSize, mapType, parent) @@ -15,6 +16,11 @@ QString MapboxMapProvider::_getURL(const int x, const int y, const int zoom, QNe Q_UNUSED(networkManager) const QString mapBoxToken = qgcApp()->toolbox()->settingsManager()->appSettings()->mapboxToken()->rawValue().toString(); if (!mapBoxToken.isEmpty()) { + if (_mapboxName == QString("mapbox.custom")) { + const QString mapBoxAccount = qgcApp()->toolbox()->settingsManager()->appSettings()->mapboxAccount()->rawValue().toString(); + const QString mapBoxStyle = qgcApp()->toolbox()->settingsManager()->appSettings()->mapboxStyle()->rawValue().toString(); + return MapBoxUrlCustom.arg(mapBoxAccount).arg(mapBoxStyle).arg(zoom).arg(x).arg(y).arg(mapBoxToken); + } return MapBoxUrl.arg(_mapboxName).arg(zoom).arg(x).arg(y).arg(mapBoxToken); } return QString(); diff --git a/src/QtLocationPlugin/MapboxMapProvider.h b/src/QtLocationPlugin/MapboxMapProvider.h index 239e4f4e4..5d59903ca 100644 --- a/src/QtLocationPlugin/MapboxMapProvider.h +++ b/src/QtLocationPlugin/MapboxMapProvider.h @@ -151,3 +151,12 @@ public: : MapboxMapProvider(QStringLiteral("mapbox.high-contrast"), AVERAGE_TILE_SIZE, QGeoMapType::CustomMap, parent) {} }; + +class MapboxCustomMapProvider : public MapboxMapProvider { + Q_OBJECT + +public: + MapboxCustomMapProvider(QObject* parent = nullptr) + : MapboxMapProvider(QStringLiteral("mapbox.custom"), AVERAGE_TILE_SIZE, + QGeoMapType::CustomMap, parent) {} +}; diff --git a/src/QtLocationPlugin/QGCMapUrlEngine.cpp b/src/QtLocationPlugin/QGCMapUrlEngine.cpp index 31513f329..2d26b8ab2 100644 --- a/src/QtLocationPlugin/QGCMapUrlEngine.cpp +++ b/src/QtLocationPlugin/QGCMapUrlEngine.cpp @@ -67,6 +67,7 @@ UrlFactory::UrlFactory() : _timeout(5 * 1000) { _providersTable["Mapbox Outdoors"] = new MapboxOutdoorsMapProvider(this); _providersTable["Mapbox RunBikeHike"] = new MapboxRunBikeHikeMapProvider(this); _providersTable["Mapbox HighContrast"] = new MapboxHighContrastMapProvider(this); + _providersTable["Mapbox Custom"] = new MapboxCustomMapProvider(this); //_providersTable["MapQuest Map"] = new MapQuestMapMapProvider(this); //_providersTable["MapQuest Sat"] = new MapQuestSatMapProvider(this); diff --git a/src/QtLocationPlugin/QMLControl/OfflineMap.qml b/src/QtLocationPlugin/QMLControl/OfflineMap.qml index 76462016a..51e1164df 100644 --- a/src/QtLocationPlugin/QMLControl/OfflineMap.qml +++ b/src/QtLocationPlugin/QMLControl/OfflineMap.qml @@ -36,6 +36,8 @@ Item { property var _settings: _settingsManager ? _settingsManager.offlineMapsSettings : null property var _fmSettings: _settingsManager ? _settingsManager.flightMapSettings : null property Fact _mapboxFact: _settingsManager ? _settingsManager.appSettings.mapboxToken : null + property Fact _mapboxAccountFact: _settingsManager ? _settingsManager.appSettings.mapboxAccount : null + property Fact _mapboxStyleFact: _settingsManager ? _settingsManager.appSettings.mapboxStyle : null property Fact _esriFact: _settingsManager ? _settingsManager.appSettings.esriToken : null property string mapType: _fmSettings ? (_fmSettings.mapProvider.value + " " + _fmSettings.mapType.value) : "" @@ -317,6 +319,40 @@ Item { font.pointSize: _adjustableFontPointSize } + Item { width: 1; height: 1; visible: _mapboxAccountFact ? _mapboxAccountFact.visible : false } + QGCLabel { text: qsTr("Mapbox User Name"); visible: _mapboxAccountFact ? _mapboxAccountFact.visible : false } + FactTextField { + fact: _mapboxAccountFact + visible: _mapboxAccountFact ? _mapboxAccountFact.visible : false + maximumLength: 256 + width: ScreenTools.defaultFontPixelWidth * 30 + } + QGCLabel { + anchors.left: parent.left + anchors.right: parent.right + wrapMode: Text.WordWrap + text: qsTr("To enable custom Mapbox styles, enter your account name.") + visible: _mapboxAccountFact ? _mapboxAccountFact.visible : false + font.pointSize: _adjustableFontPointSize + } + + Item { width: 1; height: 1; visible: _mapboxStyleFact ? _mapboxStyleFact.visible : false } + QGCLabel { text: qsTr("Mapbox Style ID"); visible: _mapboxStyleFact ? _mapboxStyleFact.visible : false } + FactTextField { + fact: _mapboxStyleFact + visible: _mapboxStyleFact ? _mapboxStyleFact.visible : false + maximumLength: 256 + width: ScreenTools.defaultFontPixelWidth * 30 + } + QGCLabel { + anchors.left: parent.left + anchors.right: parent.right + wrapMode: Text.WordWrap + text: qsTr("To enable custom Mapbox styles, enter your style ID.") + visible: _mapboxStyleFact ? _mapboxStyleFact.visible : false + font.pointSize: _adjustableFontPointSize + } + Item { width: 1; height: 1; visible: _esriFact ? _esriFact.visible : false } QGCLabel { text: qsTr("Esri Access Token"); visible: _esriFact ? _esriFact.visible : false } FactTextField { diff --git a/src/Settings/App.SettingsGroup.json b/src/Settings/App.SettingsGroup.json index 9ee4051e8..21731d5ba 100644 --- a/src/Settings/App.SettingsGroup.json +++ b/src/Settings/App.SettingsGroup.json @@ -196,6 +196,20 @@ "type": "string", "default": "" }, +{ + "name": "mapboxAccount", + "shortDesc": "Account name for Mapbox maps", + "longDesc": "Your personal account name for Mapbox maps", + "type": "string", + "default": "" +}, +{ + "name": "mapboxStyle", + "shortDesc": "Map style ID", + "longDesc": "Map design style ID for Mapbox maps", + "type": "string", + "default": "" +}, { "name": "esriToken", "shortDesc": "Access token to Esri maps", diff --git a/src/Settings/AppSettings.cc b/src/Settings/AppSettings.cc index f889f9959..3ad8f74aa 100644 --- a/src/Settings/AppSettings.cc +++ b/src/Settings/AppSettings.cc @@ -119,6 +119,8 @@ DECLARE_SETTINGSFACT(AppSettings, savePath) DECLARE_SETTINGSFACT(AppSettings, useChecklist) DECLARE_SETTINGSFACT(AppSettings, enforceChecklist) DECLARE_SETTINGSFACT(AppSettings, mapboxToken) +DECLARE_SETTINGSFACT(AppSettings, mapboxAccount) +DECLARE_SETTINGSFACT(AppSettings, mapboxStyle) DECLARE_SETTINGSFACT(AppSettings, esriToken) DECLARE_SETTINGSFACT(AppSettings, defaultFirmwareType) DECLARE_SETTINGSFACT(AppSettings, gstDebugLevel) diff --git a/src/Settings/AppSettings.h b/src/Settings/AppSettings.h index 20a676d87..7c98b2f63 100644 --- a/src/Settings/AppSettings.h +++ b/src/Settings/AppSettings.h @@ -47,6 +47,8 @@ public: DEFINE_SETTINGFACT(useChecklist) DEFINE_SETTINGFACT(enforceChecklist) DEFINE_SETTINGFACT(mapboxToken) + DEFINE_SETTINGFACT(mapboxAccount) + DEFINE_SETTINGFACT(mapboxStyle) DEFINE_SETTINGFACT(esriToken) DEFINE_SETTINGFACT(defaultFirmwareType) DEFINE_SETTINGFACT(gstDebugLevel) -- 2.22.0