diff --git a/src/QtLocationPlugin/GenericMapProvider.cpp b/src/QtLocationPlugin/GenericMapProvider.cpp index 6dfbdc5e67dddcedb5153dd2634cf3cc8c315701..abfe3487684c11be4297e177e14721a0132a10cb 100644 --- a/src/QtLocationPlugin/GenericMapProvider.cpp +++ b/src/QtLocationPlugin/GenericMapProvider.cpp @@ -1,5 +1,5 @@ -#include "QGCMapEngine.h" #include "GenericMapProvider.h" +#include "QGCMapEngine.h" QString StatkartMapProvider::_getURL(int x, int y, int zoom, QNetworkAccessManager* networkManager) { diff --git a/src/QtLocationPlugin/MapboxMapProvider.cpp b/src/QtLocationPlugin/MapboxMapProvider.cpp new file mode 100644 index 0000000000000000000000000000000000000000..555a52fa0461e0730beba7ff660090dfa3a74781 --- /dev/null +++ b/src/QtLocationPlugin/MapboxMapProvider.cpp @@ -0,0 +1,35 @@ +#include "MapboxMapProvider.h" +#include "QGCApplication.h" +#include "QGCMapEngine.h" +#include "SettingsManager.h" + +MapboxMapProvider::MapboxMapProvider(QString mapName, quint32 averageSize, + QGeoMapType::MapStyle mapType, + QObject* parent) + : MapProvider(QString("https://www.mapbox.com/"), QString("jpg"), + averageSize, mapType, parent), mapboxName(mapName) { +} + +QString +MapboxMapProvider::_getURL(int x, int y, int zoom, + QNetworkAccessManager* networkManager) { + Q_UNUSED(networkManager); + QString mapBoxToken = qgcApp() + ->toolbox() + ->settingsManager() + ->appSettings() + ->mapboxToken() + ->rawValue() + .toString(); + if (!mapBoxToken.isEmpty()) { + QString server = "https://api.mapbox.com/v4/"; + server += mapboxName; + server += QString("/%1/%2/%3.jpg80?access_token=%4") + .arg(zoom) + .arg(x) + .arg(y) + .arg(mapBoxToken); + return server; + } + return QString(""); +} diff --git a/src/QtLocationPlugin/MapboxMapProvider.h b/src/QtLocationPlugin/MapboxMapProvider.h new file mode 100644 index 0000000000000000000000000000000000000000..403774354fa0c9cf849c922ab8ec3671baa7a517 --- /dev/null +++ b/src/QtLocationPlugin/MapboxMapProvider.h @@ -0,0 +1,133 @@ +#pragma once + +#include "MapProvider.h" + +#include +#include +#include +#include +#include +#include + +class MapboxMapProvider : public MapProvider { + Q_OBJECT + public: + MapboxMapProvider(QString mapName, quint32 averageSize, + QGeoMapType::MapStyle mapType, QObject* parent); + QString _getURL(int x, int y, int zoom, + QNetworkAccessManager* networkManager); + protected: + QString mapboxName; +}; + +class MapboxStreetMapProvider : public MapboxMapProvider { + Q_OBJECT + public: + MapboxStreetMapProvider(QObject* parent) + : MapboxMapProvider("mapbox.streets", AVERAGE_MAPBOX_STREET_MAP, + QGeoMapType::StreetMap, parent) {} +}; + +class MapboxLightMapProvider : public MapboxMapProvider { + Q_OBJECT + public: + MapboxLightMapProvider(QObject* parent) + : MapboxMapProvider("mapbox.light", AVERAGE_TILE_SIZE, + QGeoMapType::CustomMap, parent) {} +}; + +class MapboxDarkMapProvider : public MapboxMapProvider { + Q_OBJECT + public: + MapboxDarkMapProvider(QObject* parent) + : MapboxMapProvider("mapbox.dark", AVERAGE_TILE_SIZE, + QGeoMapType::CustomMap, parent) {} +}; + +class MapboxSatelliteMapProvider : public MapboxMapProvider { + Q_OBJECT + public: + MapboxSatelliteMapProvider(QObject* parent) + : MapboxMapProvider("mapbox.satellite", AVERAGE_MAPBOX_SAT_MAP, + QGeoMapType::SatelliteMapDay, parent) {} +}; + +class MapboxHybridMapProvider : public MapboxMapProvider { + Q_OBJECT + public: + MapboxHybridMapProvider(QObject* parent) + : MapboxMapProvider("mapbox.hybrid", AVERAGE_MAPBOX_SAT_MAP, + QGeoMapType::HybridMap, parent) {} +}; + +class MapboxWheatPasteMapProvider : public MapboxMapProvider { + Q_OBJECT + public: + MapboxWheatPasteMapProvider(QObject* parent) + : MapboxMapProvider("mapbox.wheatpaste", AVERAGE_TILE_SIZE, + QGeoMapType::CustomMap, parent) {} +}; + +class MapboxStreetsBasicMapProvider : public MapboxMapProvider { + Q_OBJECT + public: + MapboxStreetsBasicMapProvider(QObject* parent) + : MapboxMapProvider("mapbox.streets-basic", AVERAGE_TILE_SIZE, + QGeoMapType::StreetMap, parent) {} +}; + +class MapboxComicMapProvider : public MapboxMapProvider { + Q_OBJECT + public: + MapboxComicMapProvider(QObject* parent) + : MapboxMapProvider("mapbox.comic", AVERAGE_TILE_SIZE, + QGeoMapType::CustomMap, parent) {} +}; + +class MapboxOutdoorsMapProvider : public MapboxMapProvider { + Q_OBJECT + public: + MapboxOutdoorsMapProvider(QObject* parent) + : MapboxMapProvider("mapbox.outdoors", AVERAGE_TILE_SIZE, + QGeoMapType::CustomMap, parent) {} +}; + +class MapboxRunBikeHikeMapProvider : public MapboxMapProvider { + Q_OBJECT + public: + MapboxRunBikeHikeMapProvider(QObject* parent) + : MapboxMapProvider("mapbox.run-bike-hike", AVERAGE_MAPBOX_STREET_MAP, + QGeoMapType::CycleMap, parent) {} +}; + +class MapboxPencilMapProvider : public MapboxMapProvider { + Q_OBJECT + public: + MapboxPencilMapProvider(QObject* parent) + : MapboxMapProvider("mapbox.pencil", AVERAGE_TILE_SIZE, + QGeoMapType::CustomMap, parent) {} +}; + +class MapboxPiratesMapProvider : public MapboxMapProvider { + Q_OBJECT + public: + MapboxPiratesMapProvider(QObject* parent) + : MapboxMapProvider("mapbox.pirates", AVERAGE_TILE_SIZE, + QGeoMapType::CustomMap, parent) {} +}; + +class MapboxEmeraldMapProvider : public MapboxMapProvider { + Q_OBJECT + public: + MapboxEmeraldMapProvider(QObject* parent) + : MapboxMapProvider("mapbox.emerald", AVERAGE_TILE_SIZE, + QGeoMapType::CustomMap, parent) {} +}; + +class MapboxHighContrastMapProvider : public MapboxMapProvider { + Q_OBJECT + public: + MapboxHighContrastMapProvider(QObject* parent) + : MapboxMapProvider("mapbox.high-contrast", AVERAGE_TILE_SIZE, + QGeoMapType::CustomMap, parent) {} +}; diff --git a/src/QtLocationPlugin/QGCLocationPlugin.pri b/src/QtLocationPlugin/QGCLocationPlugin.pri index b72b5a32eb3e4676d7488d76c2cb58144715ad38..dc7f33e016eb1ccb4a27045cfa0c4fd60415b3bd 100644 --- a/src/QtLocationPlugin/QGCLocationPlugin.pri +++ b/src/QtLocationPlugin/QGCLocationPlugin.pri @@ -27,6 +27,7 @@ HEADERS += \ $$PWD/BingMapProvider.h \ $$PWD/GenericMapProvider.h \ $$PWD/EsriMapProvider.h \ + $$PWD/MapboxMapProvider.h \ SOURCES += \ $$PWD/QGCMapEngine.cpp \ @@ -44,6 +45,7 @@ SOURCES += \ $$PWD/BingMapProvider.cpp \ $$PWD/GenericMapProvider.cpp \ $$PWD/EsriMapProvider.cpp \ + $$PWD/MapboxMapProvider.cpp \ OTHER_FILES += \ $$PWD/qgc_maps_plugin.json diff --git a/src/QtLocationPlugin/QGCMapUrlEngine.cpp b/src/QtLocationPlugin/QGCMapUrlEngine.cpp index 64bff2e64e9e715786fd7a924569daabf45311cb..ab2a845b8202170886d347359d5ac5ca8ee3335e 100644 --- a/src/QtLocationPlugin/QGCMapUrlEngine.cpp +++ b/src/QtLocationPlugin/QGCMapUrlEngine.cpp @@ -24,6 +24,7 @@ QGC_LOGGING_CATEGORY(QGCMapUrlEngineLog, "QGCMapUrlEngineLog") #include "QGCMapEngine.h" #include "SettingsManager.h" + #include #include #include @@ -58,6 +59,16 @@ UrlFactory::UrlFactory() : _timeout(5 * 1000) { //_providersTable["Esri World Street"] = new EsriWorldStreetMapProvider(this); //_providersTable["Esri World Satellite"] = new EsriWorldSatelliteMapProvider(this); //_providersTable["Esri Terrain"] = new EsriTerrainMapProvider(this); + + _providersTable["Mapbox Streets"] = new MapboxStreetMapProvider(this); + _providersTable["Mapbox Light"] = new MapboxLightMapProvider(this); + _providersTable["Mapbox Dark"] = new MapboxDarkMapProvider(this); + _providersTable["Mapbox Satellite"] = new MapboxSatelliteMapProvider(this); + _providersTable["Mapbox Hybrid"] = new MapboxHybridMapProvider(this); + _providersTable["Mapbox StreetsBasic"] = new MapboxStreetsBasicMapProvider(this); + _providersTable["Mapbox Outdoors"] = new MapboxOutdoorsMapProvider(this); + _providersTable["Mapbox RunBikeHike"] = new MapboxRunBikeHikeMapProvider(this); + _providersTable["Mapbox HighContrast"] = new MapboxHighContrastMapProvider(this); } void UrlFactory::registerProvider(QString name, MapProvider* provider) { @@ -219,7 +230,7 @@ QString UrlFactory::_getURL(QString type, int x, int y, int zoom, QNetworkAccessManager* networkManager) { switch (type) { - Q_UNUSED(networkManager); + (networkManager); case StatkartTopo: { return QString("http://opencache.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=topo4&zoom=%1&x=%2&y=%3").arg(zoom).arg(x).arg(y); diff --git a/src/QtLocationPlugin/QGCMapUrlEngine.h b/src/QtLocationPlugin/QGCMapUrlEngine.h index 858e833413cf39a7bd6464ed5877315a680608cd..a4522af54d5e9a2e8744a830fc2160d09d3cb4d3 100644 --- a/src/QtLocationPlugin/QGCMapUrlEngine.h +++ b/src/QtLocationPlugin/QGCMapUrlEngine.h @@ -16,10 +16,12 @@ #ifndef QGC_MAP_URL_ENGINE_H #define QGC_MAP_URL_ENGINE_H + #include "GoogleMapProvider.h" #include "BingMapProvider.h" #include "GenericMapProvider.h" #include "EsriMapProvider.h" +#include "MapboxMapProvider.h" #define MAX_MAP_ZOOM (20.0) @@ -27,28 +29,6 @@ class UrlFactory : public QObject { Q_OBJECT public: // -// enum QString -// { -// Invalid = -1, -// -// GoogleMap = 1, -// GoogleSatellite = 4, -// GoogleLabels = 8, -// GoogleTerrain = 16, -// GoogleHybrid = 20, -// -// OpenStreetMap = 32, -// OpenStreetOsm = 33, -// OpenStreetMapSurfer = 34, -// OpenStreetMapSurferTerrain=35, -// -// StatkartTopo = 100, -// EniroTopo = 110, -// -// BingMap = 444, -// BingSatellite = 555, -// BingHybrid = 666, -// // /* // MapQuestMap = 700, // MapQuestSat = 701, @@ -73,9 +53,6 @@ public: // MapboxEmerald = 6012, // MapboxHighContrast = 6013, // -// EsriWorldStreet = 7000, -// EsriWorldSatellite = 7001, -// EsriTerrain = 7002, // // AirmapElevation = 8001 // }; diff --git a/src/QtLocationPlugin/QGeoTiledMappingManagerEngineQGC.cpp b/src/QtLocationPlugin/QGeoTiledMappingManagerEngineQGC.cpp index e208e3d9e87e8cf14649c2f751ec3954c0c617ca..5b04b1645bad1caa61323f290213848403739541 100644 --- a/src/QtLocationPlugin/QGeoTiledMappingManagerEngineQGC.cpp +++ b/src/QtLocationPlugin/QGeoTiledMappingManagerEngineQGC.cpp @@ -102,7 +102,6 @@ QGeoTiledMappingManagerEngineQGC::QGeoTiledMappingManagerEngineQGC(const QVarian QList mapList; QHashIterator i(getQGCMapEngine()->urlFactory()->getProviderTable()); - int id = 0; while(i.hasNext()){ i.next(); @@ -113,38 +112,6 @@ QGeoTiledMappingManagerEngineQGC::QGeoTiledMappingManagerEngineQGC(const QVarian setSupportedMapTypes(mapList); qDebug() << "End Adding Provider"; - //-- IMPORTANT - // Changes here must reflect those in QGCMapEngine.cpp - -// setSupportedMapTypes({ -//#ifndef QGC_NO_GOOGLE_MAPS -// QGCGEOMAPTYPE(QGeoMapType::StreetMap, "Google Street Map", "Google street map", false, false, UrlFactory::GoogleMap), -// QGCGEOMAPTYPE(QGeoMapType::SatelliteMapDay, "Google Satellite Map", "Google satellite map", false, false, UrlFactory::GoogleSatellite), -// QGCGEOMAPTYPE(QGeoMapType::TerrainMap, "Google Terrain Map", "Google terrain map", false, false, UrlFactory::GoogleTerrain), -//#endif -// -// /* TODO: -// * Proper google hybrid maps requires collecting two separate bitmaps and overlaying them. -// * -// * mapTypes << QGCGEOMAPTYPE(QGeoMapType::HybridMap, "Google Hybrid Map", "Google hybrid map", false, false, UrlFactory::GoogleHybrid), -// * -// */ -// -// // Bing -// QGCGEOMAPTYPE(QGeoMapType::StreetMap, "Bing Street Map", "Bing street map", false, false, UrlFactory::BingMap), -// QGCGEOMAPTYPE(QGeoMapType::SatelliteMapDay, "Bing Satellite Map", "Bing satellite map", false, false, UrlFactory::BingSatellite), -// QGCGEOMAPTYPE(QGeoMapType::HybridMap, "Bing Hybrid Map", "Bing hybrid map", false, false, UrlFactory::BingHybrid), -// -// // Statkart -// QGCGEOMAPTYPE(QGeoMapType::TerrainMap, "Statkart Terrain Map", "Statkart Terrain Map", false, false, UrlFactory::StatkartTopo), -// // Eniro -// QGCGEOMAPTYPE(QGeoMapType::TerrainMap, "Eniro Terrain Map", "Eniro Terrain Map", false, false, UrlFactory::EniroTopo), -// -// // Esri -// QGCGEOMAPTYPE(QGeoMapType::StreetMap, "Esri Street Map", "ArcGIS Online World Street Map", true, false, UrlFactory::EsriWorldStreet), -// QGCGEOMAPTYPE(QGeoMapType::SatelliteMapDay, "Esri Satellite Map", "ArcGIS Online World Imagery", true, false, UrlFactory::EsriWorldSatellite), -// QGCGEOMAPTYPE(QGeoMapType::TerrainMap, "Esri Terrain Map", "World Terrain Base", false, false, UrlFactory::EsriTerrain), -// // // VWorld // QGCGEOMAPTYPE(QGeoMapType::SatelliteMapDay, "VWorld Satellite Map", "VWorld Satellite Map", false, false, UrlFactory::VWorldSatellite), // QGCGEOMAPTYPE(QGeoMapType::StreetMap, "VWorld Street Map", "VWorld Street Map", false, false, UrlFactory::VWorldStreet),