diff --git a/src/QtLocationPlugin/MapProvider.h b/src/QtLocationPlugin/MapProvider.h index 4da03be..b92ab6d 100644 --- a/src/QtLocationPlugin/MapProvider.h +++ b/src/QtLocationPlugin/MapProvider.h @@ -11,8 +11,6 @@ static const unsigned char pngSignature[] = {0x89, 0x50, 0x4E, 0x47, 0x0D, static const unsigned char jpegSignature[] = {0xFF, 0xD8, 0xFF, 0x00}; static const unsigned char gifSignature[] = {0x47, 0x49, 0x46, 0x38, 0x00}; -const quint32 AVERAGE_BING_STREET_MAP = 1297; -const quint32 AVERAGE_BING_SAT_MAP = 19597; const quint32 AVERAGE_MAPBOX_SAT_MAP = 15739; const quint32 AVERAGE_MAPBOX_STREET_MAP = 5648; const quint32 AVERAGE_TILE_SIZE = 13652; diff --git a/src/QtLocationPlugin/QGCLocationPlugin.pri b/src/QtLocationPlugin/QGCLocationPlugin.pri index 4df3b05..21a359c 100644 --- a/src/QtLocationPlugin/QGCLocationPlugin.pri +++ b/src/QtLocationPlugin/QGCLocationPlugin.pri @@ -24,6 +24,7 @@ HEADERS += \ $$PWD/QGeoTiledMappingManagerEngineQGC.h \ $$PWD/MapProvider.h \ $$PWD/GoogleMapProvider.h \ + $$PWD/BingMapProvider.h \ SOURCES += \ $$PWD/QGCMapEngine.cpp \ @@ -38,6 +39,7 @@ SOURCES += \ $$PWD/QGeoTiledMappingManagerEngineQGC.cpp \ $$PWD/MapProvider.cpp \ $$PWD/GoogleMapProvider.cpp \ + $$PWD/BingMapProvider.cpp \ OTHER_FILES += \ $$PWD/qgc_maps_plugin.json diff --git a/src/QtLocationPlugin/QGCMapUrlEngine.cpp b/src/QtLocationPlugin/QGCMapUrlEngine.cpp index 5b07244..071b41b 100644 --- a/src/QtLocationPlugin/QGCMapUrlEngine.cpp +++ b/src/QtLocationPlugin/QGCMapUrlEngine.cpp @@ -42,7 +42,12 @@ UrlFactory::UrlFactory() : _timeout(5 * 1000) { _providersTable["Google Street Map"] = new GoogleStreetMapProvider(this); _providersTable["Google Satellite"] = new GoogleSatelliteMapProvider(this); _providersTable["Google Terrain"] = new GoogleTerrainMapProvider(this); + _providersTable["Google Labels"] = new GoogleTerrainMapProvider(this); #endif + + _providersTable["Bing Road"] = new BingRoadMapProvider(this); + _providersTable["Bing Satellite"] = new BingSatelliteMapProvider(this); + _providersTable["Bing Hybrid"] = new BingHybridMapProvider(this); } void UrlFactory::registerProvider(QString name, MapProvider* provider) { @@ -164,19 +169,6 @@ QNetworkRequest UrlFactory::getTileURL(QString type, int x, int y, int zoom, // request.setUrl(QUrl(url)); // request.setRawHeader("Accept", "*/*"); // switch (type) { - // // case GoogleMap: - // // case GoogleSatellite: - // // case GoogleLabels: - // // case GoogleTerrain: - // // case GoogleHybrid: - // // request.setRawHeader("Referrer", - // "https://www.google.com/maps/preview"); - // // break; - // case BingHybrid: - // case BingMap: - // case BingSatellite: - // request.setRawHeader("Referrer", "https://www.bing.com/maps/"); - // break; // case StatkartTopo: // request.setRawHeader("Referrer", "https://www.norgeskart.no/"); // break; @@ -223,52 +215,6 @@ UrlFactory::_getURL(QString type, int x, int y, int zoom, QNetworkAccessManager* { switch (type) { Q_UNUSED(networkManager); - case GoogleMap: - { - // http://mt1.google.com/vt/lyrs=m - QString server = "mt"; - QString request = "vt"; - QString sec1 = ""; // after &x=... - QString sec2 = ""; // after &zoom=... - _getSecGoogleWords(x, y, sec1, sec2); - _tryCorrectGoogleVersions(networkManager); - return QString("http://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(_getServerNum(x, y, 4)).arg(request).arg(_versionGoogleMap).arg(_language).arg(x).arg(sec1).arg(y).arg(zoom).arg(sec2); - } - break; - case GoogleSatellite: - { - // http://mt1.google.com/vt/lyrs=s - QString server = "khm"; - QString request = "kh"; - QString sec1 = ""; // after &x=... - QString sec2 = ""; // after &zoom=... - _getSecGoogleWords(x, y, sec1, sec2); - _tryCorrectGoogleVersions(networkManager); - return QString("http://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(_getServerNum(x, y, 4)).arg(request).arg(_versionGoogleSatellite).arg(_language).arg(x).arg(sec1).arg(y).arg(zoom).arg(sec2); - } - break; - case GoogleLabels: - { - QString server = "mts"; - QString request = "vt"; - QString sec1 = ""; // after &x=... - QString sec2 = ""; // after &zoom=... - _getSecGoogleWords(x, y, sec1, sec2); - _tryCorrectGoogleVersions(networkManager); - return QString("http://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(_getServerNum(x, y, 4)).arg(request).arg(_versionGoogleLabels).arg(_language).arg(x).arg(sec1).arg(y).arg(zoom).arg(sec2); - } - break; - case GoogleTerrain: - { - QString server = "mt"; - QString request = "vt"; - QString sec1 = ""; // after &x=... - QString sec2 = ""; // after &zoom=... - _getSecGoogleWords(x, y, sec1, sec2); - _tryCorrectGoogleVersions(networkManager); - return QString("http://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(_getServerNum(x, y, 4)).arg(request).arg(_versionGoogleTerrain).arg(_language).arg(x).arg(sec1).arg(y).arg(zoom).arg(sec2); - } - break; 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); @@ -307,20 +253,14 @@ UrlFactory::_getURL(QString type, int x, int y, int zoom, QNetworkAccessManager* */ case BingMap: { - QString key = _tileXYToQuadKey(x, y, zoom); - return QString("http://ecn.t%1.tiles.virtualearth.net/tiles/r%2.png?g=%3&mkt=%4").arg(_getServerNum(x, y, 4)).arg(key).arg(_versionBingMaps).arg(_language); } break; case BingSatellite: { - QString key = _tileXYToQuadKey(x, y, zoom); - return QString("http://ecn.t%1.tiles.virtualearth.net/tiles/a%2.jpeg?g=%3&mkt=%4").arg(_getServerNum(x, y, 4)).arg(key).arg(_versionBingMaps).arg(_language); } break; case BingHybrid: { - QString key = _tileXYToQuadKey(x, y, zoom); - return QString("http://ecn.t%1.tiles.virtualearth.net/tiles/h%2.jpeg?g=%3&mkt=%4").arg(_getServerNum(x, y, 4)).arg(key).arg(_versionBingMaps).arg(_language); } /* case MapQuestMap: diff --git a/src/QtLocationPlugin/QGCMapUrlEngine.h b/src/QtLocationPlugin/QGCMapUrlEngine.h index eec4f28..2ff5ee8 100644 --- a/src/QtLocationPlugin/QGCMapUrlEngine.h +++ b/src/QtLocationPlugin/QGCMapUrlEngine.h @@ -17,6 +17,7 @@ #define QGC_MAP_URL_ENGINE_H #include "GoogleMapProvider.h" +#include "BingMapProvider.h" #define MAX_MAP_ZOOM (20.0) diff --git a/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc b/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc index b4f7054..0b4de9f 100644 --- a/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc +++ b/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc @@ -229,11 +229,13 @@ QGCMapEngineManager::mapProviderList() //----------------------------------------------------------------------------- QStringList -QGCMapEngineManager::mapTypeList() +QGCMapEngineManager::mapTypeList(QString provider) { // Extract type name from MapName ( format : "Provider Type") QStringList mapList = getQGCMapEngine()->getMapNameList(); - mapList.replaceInStrings(QRegExp("^([^\\ ]*) (.*)"),"\\2"); + qDebug()<< "mapTypeList : " << provider; + mapList = mapList.filter(QRegularExpression(provider)); + mapList.replaceInStrings(QRegExp("^([^\\ ]*) (.*)$"),"\\2"); mapList.removeDuplicates(); return mapList; } diff --git a/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.h b/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.h index a5bce76..7b47582 100644 --- a/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.h +++ b/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.h @@ -44,7 +44,6 @@ public: Q_PROPERTY(QmlObjectListModel* tileSets READ tileSets NOTIFY tileSetsChanged) Q_PROPERTY(QStringList mapList READ mapList CONSTANT) Q_PROPERTY(QStringList mapProviderList READ mapProviderList CONSTANT) - Q_PROPERTY(QStringList mapTypeList READ mapTypeList CONSTANT) Q_PROPERTY(quint32 maxMemCache READ maxMemCache WRITE setMaxMemCache NOTIFY maxMemCacheChanged) Q_PROPERTY(quint32 maxDiskCache READ maxDiskCache WRITE setMaxDiskCache NOTIFY maxDiskCacheChanged) Q_PROPERTY(QString errorMessage READ errorMessage NOTIFY errorMessageChanged) @@ -80,7 +79,7 @@ public: QString tileSizeStr (); QStringList mapList (); QStringList mapProviderList (); - QStringList mapTypeList (); + Q_INVOKABLE QStringList mapTypeList (QString provider); QmlObjectListModel* tileSets () { return &_tileSets; } quint32 maxMemCache (); quint32 maxDiskCache (); diff --git a/src/ui/preferences/GeneralSettings.qml b/src/ui/preferences/GeneralSettings.qml index a81aa81..c161be0 100644 --- a/src/ui/preferences/GeneralSettings.qml +++ b/src/ui/preferences/GeneralSettings.qml @@ -167,9 +167,10 @@ Rectangle { model: QGroundControl.mapEngineManager.mapProviderList Layout.preferredWidth: _comboFieldWidth onActivated: { - _mapProvider = textAt(index) - QGroundControl.settingsManager.flightMapSettings.mapProvider.value=textAt(index) - } + _mapProvider = textAt(index) + QGroundControl.settingsManager.flightMapSettings.mapProvider.value=textAt(index) + QGroundControl.settingsManager.flightMapSettings.mapType.value=QGroundControl.mapEngineManager.mapTypeList(textAt(index))[0] + } Component.onCompleted: { var index = mapCombo.find(_mapProvider) mapCombo.currentIndex = index @@ -181,11 +182,11 @@ Rectangle { } QGCComboBox { id: mapTypeCombo - model: QGroundControl.mapEngineManager.mapTypeList + model: QGroundControl.mapEngineManager.mapTypeList(_mapProvider) Layout.preferredWidth: _comboFieldWidth onActivated: { - _mapType = textAt(index) - QGroundControl.settingsManager.flightMapSettings.mapType.value=textAt(index) + _mapType = textAt(index) + QGroundControl.settingsManager.flightMapSettings.mapType.value=textAt(index) } Component.onCompleted: { var index = mapTypeCombo.find(_mapType)