diff --git a/src/QtLocationPlugin/BingMapProvider.cpp b/src/QtLocationPlugin/BingMapProvider.cpp index 7980e6d28fc3e4cc9e8338de21c2c710aa974587..b3f063a52169a72e920c90f5f0c99632c1a9f7af 100644 --- a/src/QtLocationPlugin/BingMapProvider.cpp +++ b/src/QtLocationPlugin/BingMapProvider.cpp @@ -1,51 +1,39 @@ +/**************************************************************************** + * + * (c) 2009-2019 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ + #include "BingMapProvider.h" -#if defined(DEBUG_GOOGLE_MAPS) -#include -#include -#endif -#include "QGCMapEngine.h" - -BingMapProvider::BingMapProvider(QString imageFormat, quint32 averageSize, - QGeoMapType::MapStyle mapType, QObject* parent) - : MapProvider(QString("https://www.bing.com/maps/"), imageFormat, - averageSize, mapType, parent) {} - -BingMapProvider::~BingMapProvider() {} - -QString BingRoadMapProvider::_getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) { - Q_UNUSED(networkManager); - 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); + +BingMapProvider::BingMapProvider(const QString &imageFormat, const quint32 averageSize, + const QGeoMapType::MapStyle mapType, QObject* parent) + : MapProvider(QStringLiteral("https://www.bing.com/maps/"), imageFormat, averageSize, mapType, parent) {} + +static const QString RoadMapUrl = QStringLiteral("http://ecn.t%1.tiles.virtualearth.net/tiles/r%2.png?g=%3&mkt=%4"); + +QString BingRoadMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { + Q_UNUSED(networkManager) + const QString key = _tileXYToQuadKey(x, y, zoom); + return RoadMapUrl.arg(QString::number(_getServerNum(x, y, 4)), key, _versionBingMaps, _language); } -QString -BingSatelliteMapProvider::_getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) { - Q_UNUSED(networkManager); - 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); +static const QString SatteliteMapUrl = QStringLiteral("http://ecn.t%1.tiles.virtualearth.net/tiles/a%2.jpeg?g=%3&mkt=%4"); + +QString BingSatelliteMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { + Q_UNUSED(networkManager) + const QString key = _tileXYToQuadKey(x, y, zoom); + return SatteliteMapUrl.arg(QString::number(_getServerNum(x, y, 4)) ,key ,_versionBingMaps ,_language); } -QString BingHybridMapProvider::_getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) { - Q_UNUSED(networkManager); - 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); +static const QString HybridMapUrl = QStringLiteral("http://ecn.t%1.tiles.virtualearth.net/tiles/h%2.jpeg?g=%3&mkt=%4"); + +QString BingHybridMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { + Q_UNUSED(networkManager) + const QString key = _tileXYToQuadKey(x, y, zoom); + return HybridMapUrl.arg(QString::number(_getServerNum(x, y, 4)), key, _versionBingMaps, _language); } diff --git a/src/QtLocationPlugin/BingMapProvider.h b/src/QtLocationPlugin/BingMapProvider.h index 8b8fa6841badb741a6a03adacc11dff01d243806..092be8b2256cf498c910945c3167f4cf2dd3c0d7 100644 --- a/src/QtLocationPlugin/BingMapProvider.h +++ b/src/QtLocationPlugin/BingMapProvider.h @@ -1,46 +1,43 @@ +/**************************************************************************** + * + * (c) 2009-2019 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ + #pragma once #include "MapProvider.h" -#include -#include -#include -#include -#include -#include - class BingMapProvider : public MapProvider { Q_OBJECT - public: - BingMapProvider(QString imageFormat, quint32 averageSize, - QGeoMapType::MapStyle mapType, QObject* parent); - ~BingMapProvider(); +public: + BingMapProvider(const QString &imageFormat, const quint32 averageSize, + const QGeoMapType::MapStyle mapType, QObject* parent = nullptr); - protected: - // Define the url to Request - virtual QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) = 0; + ~BingMapProvider() = default; - const QString _versionBingMaps = "563"; +protected: + const QString _versionBingMaps = QStringLiteral("563"); }; -const quint32 AVERAGE_BING_STREET_MAP = 1297; -const quint32 AVERAGE_BING_SAT_MAP = 19597; +static const quint32 AVERAGE_BING_STREET_MAP = 1297; +static const quint32 AVERAGE_BING_SAT_MAP = 19597; // ----------------------------------------------------------- // Bing Road Map class BingRoadMapProvider : public BingMapProvider { Q_OBJECT - public: - BingRoadMapProvider(QObject* parent) - : BingMapProvider(QString("png"), AVERAGE_BING_STREET_MAP, QGeoMapType::StreetMap, - parent) {} - - protected: - QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager); + +public: + BingRoadMapProvider(QObject* parent = nullptr) + : BingMapProvider(QStringLiteral("png"), AVERAGE_BING_STREET_MAP, QGeoMapType::StreetMap, parent) {} + + QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; }; // ----------------------------------------------------------- @@ -48,14 +45,12 @@ class BingRoadMapProvider : public BingMapProvider { class BingSatelliteMapProvider : public BingMapProvider { Q_OBJECT - public: - BingSatelliteMapProvider(QObject* parent) - : BingMapProvider(QString("jpg"), AVERAGE_BING_SAT_MAP, QGeoMapType::SatelliteMapDay, - parent) {} - - protected: - QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager); + +public: + BingSatelliteMapProvider(QObject* parent = nullptr) + : BingMapProvider(QStringLiteral("jpg"), AVERAGE_BING_SAT_MAP, QGeoMapType::SatelliteMapDay, parent) {} + + QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; }; // ----------------------------------------------------------- @@ -63,12 +58,9 @@ class BingSatelliteMapProvider : public BingMapProvider { class BingHybridMapProvider : public BingMapProvider { Q_OBJECT - public: - BingHybridMapProvider(QObject* parent) - : BingMapProvider(QString("jpg"),AVERAGE_BING_SAT_MAP, QGeoMapType::HybridMap, - parent) {} - - protected: - QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager); +public: + BingHybridMapProvider(QObject* parent = nullptr) + : BingMapProvider(QStringLiteral("jpg"),AVERAGE_BING_SAT_MAP, QGeoMapType::HybridMap, parent) {} + + QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; }; diff --git a/src/QtLocationPlugin/ElevationMapProvider.cpp b/src/QtLocationPlugin/ElevationMapProvider.cpp index 03af2faece64aa7a900f89ea0970f838958e3446..717d7eb7abe852b0e31ef72351684f431b933bbf 100644 --- a/src/QtLocationPlugin/ElevationMapProvider.cpp +++ b/src/QtLocationPlugin/ElevationMapProvider.cpp @@ -5,42 +5,34 @@ #endif #include "QGCMapEngine.h" -ElevationProvider::ElevationProvider(QString imageFormat, quint32 averageSize, - QGeoMapType::MapStyle mapType, - QObject* parent) - : MapProvider(QString("https://api.airmap.com/"), imageFormat, averageSize, - mapType, parent) {} -ElevationProvider::~ElevationProvider() {} +ElevationProvider::ElevationProvider(const QString& imageFormat, quint32 averageSize, QGeoMapType::MapStyle mapType, QObject* parent) + : MapProvider(QStringLiteral("https://api.airmap.com/"), imageFormat, averageSize, mapType, parent) {} //----------------------------------------------------------------------------- -int AirmapElevationProvider::long2tileX(double lon, int z) { - Q_UNUSED(z); +int AirmapElevationProvider::long2tileX(const double lon, const int z) const { + Q_UNUSED(z) return static_cast(floor((lon + 180.0) / srtm1TileSize)); } //----------------------------------------------------------------------------- -int AirmapElevationProvider::lat2tileY(double lat, int z) { - Q_UNUSED(z); +int AirmapElevationProvider::lat2tileY(const double lat, const int z) const { + Q_UNUSED(z) return static_cast(floor((lat + 90.0) / srtm1TileSize)); } -QString -AirmapElevationProvider::_getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) { - Q_UNUSED(networkManager); - Q_UNUSED(zoom); - return QString("https://api.airmap.com/elevation/v1/ele/" - "carpet?points=%1,%2,%3,%4") +QString AirmapElevationProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { + Q_UNUSED(networkManager) + Q_UNUSED(zoom) + return QString("https://api.airmap.com/elevation/v1/ele/carpet?points=%1,%2,%3,%4") .arg(static_cast(y) * srtm1TileSize - 90.0) .arg(static_cast(x) * srtm1TileSize - 180.0) .arg(static_cast(y + 1) * srtm1TileSize - 90.0) .arg(static_cast(x + 1) * srtm1TileSize - 180.0); } -QGCTileSet AirmapElevationProvider::getTileCount(int zoom, double topleftLon, - double topleftLat, - double bottomRightLon, - double bottomRightLat) { +QGCTileSet AirmapElevationProvider::getTileCount(const int zoom, const double topleftLon, + const double topleftLat, const double bottomRightLon, + const double bottomRightLat) const { QGCTileSet set; set.tileX0 = long2tileX(topleftLon, zoom); set.tileY0 = lat2tileY(bottomRightLat, zoom); diff --git a/src/QtLocationPlugin/ElevationMapProvider.h b/src/QtLocationPlugin/ElevationMapProvider.h index 3694deb098ed2f898d75aecc8fc6169410b5c88d..5f7fadfdb59c373bd46f66c78f9e3bf8fe0e16e0 100644 --- a/src/QtLocationPlugin/ElevationMapProvider.h +++ b/src/QtLocationPlugin/ElevationMapProvider.h @@ -10,24 +10,17 @@ #include #include -const quint32 AVERAGE_AIRMAP_ELEV_SIZE = 2786; +static const quint32 AVERAGE_AIRMAP_ELEV_SIZE = 2786; //----------------------------------------------------------------------------- -const double srtm1TileSize = 0.01; +static const double srtm1TileSize = 0.01; class ElevationProvider : public MapProvider { Q_OBJECT public: - ElevationProvider(QString imageFormat, quint32 averageSize, - QGeoMapType::MapStyle mapType, QObject* parent); + ElevationProvider(const QString& imageFormat, quint32 averageSize, + QGeoMapType::MapStyle mapType, QObject* parent = nullptr); - ~ElevationProvider(); - - bool _isElevationProvider(){return true;} - - protected: - // Define the url to Request - virtual QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) = 0; + virtual bool _isElevationProvider() const override { return true; } }; // ----------------------------------------------------------- @@ -36,19 +29,19 @@ class ElevationProvider : public MapProvider { class AirmapElevationProvider : public ElevationProvider { Q_OBJECT public: - AirmapElevationProvider(QObject* parent) - : ElevationProvider(QString("bin"), AVERAGE_AIRMAP_ELEV_SIZE, + AirmapElevationProvider(QObject* parent = nullptr) + : ElevationProvider(QStringLiteral("bin"), AVERAGE_AIRMAP_ELEV_SIZE, QGeoMapType::StreetMap, parent) {} - int long2tileX(double lon, int z); - int lat2tileY(double lat, int z); - QGCTileSet getTileCount(int zoom, double topleftLon, - double topleftLat, double bottomRightLon, - double bottomRightLat); + int long2tileX(const double lon, const int z) const override; + + int lat2tileY(const double lat, const int z) const override; + QGCTileSet getTileCount(const int zoom, const double topleftLon, + const double topleftLat, const double bottomRightLon, + const double bottomRightLat) const override; protected: - QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager); + QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; }; diff --git a/src/QtLocationPlugin/EsriMapProvider.cpp b/src/QtLocationPlugin/EsriMapProvider.cpp index 86a29c8f1b5bbb3a717b3de62ac82b927cae2c03..2ed0ea1ef129f108328c05b3c6af7d9922057748 100644 --- a/src/QtLocationPlugin/EsriMapProvider.cpp +++ b/src/QtLocationPlugin/EsriMapProvider.cpp @@ -1,61 +1,51 @@ +/**************************************************************************** + * + * (c) 2009-2019 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ + #include "EsriMapProvider.h" #include "QGCApplication.h" -#include "QGCMapEngine.h" #include "SettingsManager.h" -QNetworkRequest -EsriMapProvider::getTileURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) { +EsriMapProvider::EsriMapProvider(const quint32 averageSize, const QGeoMapType::MapStyle mapType, QObject *parent) + : MapProvider(QString(), QString(), averageSize, mapType, parent) {} + +QNetworkRequest EsriMapProvider::getTileURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { //-- Build URL QNetworkRequest request; - QString url = _getURL(x, y, zoom, networkManager); + const QString url = _getURL(x, y, zoom, networkManager); if (url.isEmpty()) { return request; } request.setUrl(QUrl(url)); - request.setRawHeader("Accept", "*/*"); - QByteArray token = qgcApp() - ->toolbox() - ->settingsManager() - ->appSettings() - ->esriToken() - ->rawValue() - .toString() - .toLatin1(); - request.setRawHeader("User-Agent", - QByteArrayLiteral("Qt Location based application")); - request.setRawHeader("User-Token", token); + request.setRawHeader(QByteArrayLiteral("Accept"), QByteArrayLiteral("*/*")); + const QByteArray token = qgcApp()->toolbox()->settingsManager()->appSettings()->esriToken()->rawValue().toString().toLatin1(); + request.setRawHeader(QByteArrayLiteral("User-Agent"), QByteArrayLiteral("Qt Location based application")); + request.setRawHeader(QByteArrayLiteral("User-Token"), token); return request; } -QString -EsriWorldStreetMapProvider::_getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) { - Q_UNUSED(networkManager); - return QString("http://services.arcgisonline.com/ArcGIS/rest/services/" - "World_Street_Map/MapServer/tile/%1/%2/%3") - .arg(zoom) - .arg(y) - .arg(x); +static const QString WorldStreetMapUrl = QStringLiteral("http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/%1/%2/%3"); + +QString EsriWorldStreetMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { + Q_UNUSED(networkManager) + return WorldStreetMapUrl.arg(zoom).arg(y).arg(x); } -QString -EsriWorldSatelliteMapProvider::_getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) { - Q_UNUSED(networkManager); - return QString("http://server.arcgisonline.com/ArcGIS/rest/" - "services/World_Imagery/MapServer/tile/%1/%2/%3") - .arg(zoom) - .arg(y) - .arg(x); +static const QString WorldSatelliteMapUrl = QStringLiteral("http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/%1/%2/%3"); + +QString EsriWorldSatelliteMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { + Q_UNUSED(networkManager) + return WorldSatelliteMapUrl.arg(zoom).arg(y).arg(x); } -QString EsriTerrainMapProvider::_getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) { - Q_UNUSED(networkManager); - return QString("http://server.arcgisonline.com/ArcGIS/rest/services/" - "World_Terrain_Base/MapServer/tile/%1/%2/%3") - .arg(zoom) - .arg(y) - .arg(x); +static const QString TerrainMapUrl = QStringLiteral("http://server.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/%1/%2/%3"); + +QString EsriTerrainMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { + Q_UNUSED(networkManager) + return TerrainMapUrl.arg(zoom).arg(y).arg(x); } diff --git a/src/QtLocationPlugin/EsriMapProvider.h b/src/QtLocationPlugin/EsriMapProvider.h index bc703cc19638f7643a51d3675510dd2b7e60e9cb..ae1da84d78e1cff692fef71175557d914487c835 100644 --- a/src/QtLocationPlugin/EsriMapProvider.h +++ b/src/QtLocationPlugin/EsriMapProvider.h @@ -1,49 +1,51 @@ +/**************************************************************************** + * + * (c) 2009-2019 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ + #pragma once #include "MapProvider.h" -#include -#include -#include -#include -#include -#include - class EsriMapProvider : public MapProvider { Q_OBJECT + public: - using MapProvider::MapProvider; + EsriMapProvider(const quint32 averageSize, const QGeoMapType::MapStyle mapType, QObject* parent = nullptr); - QNetworkRequest getTileURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager); + QNetworkRequest getTileURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; }; class EsriWorldStreetMapProvider : public EsriMapProvider { Q_OBJECT + public: - EsriWorldStreetMapProvider(QObject* parent) - : EsriMapProvider(QString(""), QString(""), AVERAGE_TILE_SIZE, - QGeoMapType::StreetMap, parent) {} - QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager); + EsriWorldStreetMapProvider(QObject* parent = nullptr) + : EsriMapProvider(AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent) {} + + QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; }; class EsriWorldSatelliteMapProvider : public EsriMapProvider { Q_OBJECT + public: - EsriWorldSatelliteMapProvider(QObject* parent) - : EsriMapProvider(QString(""), QString(""), AVERAGE_TILE_SIZE, - QGeoMapType::SatelliteMapDay, parent) {} - QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager); + EsriWorldSatelliteMapProvider(QObject* parent = nullptr) + : EsriMapProvider(AVERAGE_TILE_SIZE, QGeoMapType::SatelliteMapDay, parent) {} + + QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; }; class EsriTerrainMapProvider : public EsriMapProvider { Q_OBJECT + public: - EsriTerrainMapProvider(QObject* parent) - : EsriMapProvider(QString(""), QString(""), AVERAGE_TILE_SIZE, - QGeoMapType::TerrainMap, parent) {} - QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager); + EsriTerrainMapProvider(QObject* parent = nullptr) + : EsriMapProvider(AVERAGE_TILE_SIZE, QGeoMapType::TerrainMap, parent) {} + + QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; }; diff --git a/src/QtLocationPlugin/GenericMapProvider.cpp b/src/QtLocationPlugin/GenericMapProvider.cpp index dfacb5f791b75ed18a849e391c875959f22056f1..d6a616258e67c5a9fb6aaf4dd5e331718b8c0eb6 100644 --- a/src/QtLocationPlugin/GenericMapProvider.cpp +++ b/src/QtLocationPlugin/GenericMapProvider.cpp @@ -1,103 +1,75 @@ +/**************************************************************************** + * + * (c) 2009-2019 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ #include "GenericMapProvider.h" -#include "QGCMapEngine.h" -QString StatkartMapProvider::_getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) { - Q_UNUSED(networkManager); - 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); +static const QString StatkartMapUrl = QStringLiteral("http://opencache.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=topo4&zoom=%1&x=%2&y=%3"); + +QString StatkartMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { + Q_UNUSED(networkManager) + return StatkartMapUrl.arg(zoom).arg(x).arg(y); } -QString EniroMapProvider::_getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) { - Q_UNUSED(networkManager); - return QString("http://map.eniro.com/geowebcache/service/tms1.0.0/map/%1/" - "%2/%3.png") - .arg(zoom) - .arg(x) - .arg((1 << zoom) - 1 - y); +static const QString EniroMapUrl = QStringLiteral("http://map.eniro.com/geowebcache/service/tms1.0.0/map/%1/%2/%3.png"); + +QString EniroMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { + Q_UNUSED(networkManager) + return EniroMapUrl.arg(zoom).arg(x).arg((1 << zoom) - 1 - y); } -QString MapQuestMapMapProvider::_getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) { - Q_UNUSED(networkManager); - char letter = "1234"[_getServerNum(x, y, 4)]; - return QString("http://otile%1.mqcdn.com/tiles/1.0.0/map/%2/%3/%4.jpg") - .arg(letter) - .arg(zoom) - .arg(x) - .arg(y); +static const QString MapQuestMapUrl = QStringLiteral("http://otile%1.mqcdn.com/tiles/1.0.0/map/%2/%3/%4.jpg"); + +QString MapQuestMapMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { + Q_UNUSED(networkManager) + return MapQuestMapUrl.arg(_getServerNum(x, y, 4)).arg(zoom).arg(x).arg(y); } -QString MapQuestSatMapProvider::_getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) { - Q_UNUSED(networkManager); - char letter = "1234"[_getServerNum(x, y, 4)]; - return QString("http://otile%1.mqcdn.com/tiles/1.0.0/sat/%2/%3/%4.jpg") - .arg(letter) - .arg(zoom) - .arg(x) - .arg(y); +static const QString MapQuestSatUrl = QStringLiteral("http://otile%1.mqcdn.com/tiles/1.0.0/sat/%2/%3/%4.jpg"); + +QString MapQuestSatMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { + Q_UNUSED(networkManager) + return MapQuestSatUrl.arg(_getServerNum(x, y, 4)).arg(zoom).arg(x).arg(y); } -QString -VWorldStreetMapProvider::_getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) { - Q_UNUSED(networkManager); - int gap = zoom - 6; - int x_min = 53 * pow(2, gap); - int x_max = 55 * pow(2, gap) + (2 * gap - 1); - int y_min = 22 * pow(2, gap); - int y_max = 26 * pow(2, gap) + (2 * gap - 1); +QString VWorldStreetMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { + Q_UNUSED(networkManager) + const int gap = zoom - 6; + const int x_min = int(53 * pow(2, gap)); + const int x_max = int(55 * pow(2, gap) + (2 * gap - 1)); + const int y_min = int(22 * pow(2, gap)); + const int y_max = int(26 * pow(2, gap) + (2 * gap - 1)); if (zoom > 19) { - return {}; - } else if (zoom > 5 && x >= x_min && x <= x_max && y >= y_min && - y <= y_max) { - return QString( - "http://xdworld.vworld.kr:8080/2d/Base/service/%1/%2/%3.png") - .arg(zoom) - .arg(x) - .arg(y); + return QString(); + } else if (zoom > 5 && x >= x_min && x <= x_max && y >= y_min && y <= y_max) { + return QString(QStringLiteral("http://xdworld.vworld.kr:8080/2d/Base/service/%1/%2/%3.png")).arg(zoom, x, y); } else { - 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); + const QString key = _tileXYToQuadKey(x, y, zoom); + return QString(QStringLiteral("http://ecn.t%1.tiles.virtualearth.net/tiles/r%2.png?g=%3&mkt=%4")) + .arg(_getServerNum(x, y, 4)).arg(key, _versionBingMaps, _language); } } -QString VWorldSatMapProvider::_getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) { - Q_UNUSED(networkManager); - int gap = zoom - 6; - int x_min = 53 * pow(2, gap); - int x_max = 55 * pow(2, gap) + (2 * gap - 1); - int y_min = 22 * pow(2, gap); - int y_max = 26 * pow(2, gap) + (2 * gap - 1); +QString VWorldSatMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { + Q_UNUSED(networkManager) + const int gap = zoom - 6; + const int x_min = int(53 * pow(2, gap)); + const int x_max = int(55 * pow(2, gap) + (2 * gap - 1)); + const int y_min = int(22 * pow(2, gap)); + const int y_max = int(26 * pow(2, gap) + (2 * gap - 1)); if (zoom > 19) { - return {}; - } else if (zoom > 5 && x >= x_min && x <= x_max && y >= y_min && - y <= y_max) { - return QString("http://xdworld.vworld.kr:8080/2d/Satellite/service/%1/" - "%2/%3.jpeg") - .arg(zoom) - .arg(x) - .arg(y); + return QString(); + } else if (zoom > 5 && x >= x_min && x <= x_max && y >= y_min && y <= y_max) { + return QString("http://xdworld.vworld.kr:8080/2d/Satellite/service/%1/%2/%3.jpeg").arg(zoom, x, y); } else { - 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); + const 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, _versionBingMaps, _language); } } diff --git a/src/QtLocationPlugin/GenericMapProvider.h b/src/QtLocationPlugin/GenericMapProvider.h index 066af8e3790cb3a527c28293779f7c464e544395..9dafb9d0544328a0fdc4f08ea6d6ec4b3465c576 100644 --- a/src/QtLocationPlugin/GenericMapProvider.h +++ b/src/QtLocationPlugin/GenericMapProvider.h @@ -1,85 +1,77 @@ +/**************************************************************************** + * + * (c) 2009-2019 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ #pragma once #include "MapProvider.h" -#include - -#include -#include -#include -#include -#include -#include class StatkartMapProvider : public MapProvider { Q_OBJECT public: - StatkartMapProvider(QObject* parent) - : MapProvider(QString("https://www.norgeskart.no/"), QString("png"), + StatkartMapProvider(QObject* parent = nullptr) + : MapProvider(QStringLiteral("https://www.norgeskart.no/"), QStringLiteral("png"), AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent) {} - QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager); + QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; }; class EniroMapProvider : public MapProvider { Q_OBJECT public: - EniroMapProvider(QObject* parent) - : MapProvider(QString("https://www.eniro.se/"), QString("png"), + EniroMapProvider(QObject* parent = nullptr) + : MapProvider(QStringLiteral("https://www.eniro.se/"), QStringLiteral("png"), AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent) {} - QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager); + QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; }; class MapQuestMapMapProvider : public MapProvider { Q_OBJECT public: - MapQuestMapMapProvider(QObject* parent) - : MapProvider(QString("https://mapquest.com"), QString("jpg"), + MapQuestMapMapProvider(QObject* parent = nullptr) + : MapProvider(QStringLiteral("https://mapquest.com"), QStringLiteral("jpg"), AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent) {} - QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager); + QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; }; class MapQuestSatMapProvider : public MapProvider { Q_OBJECT public: - MapQuestSatMapProvider(QObject* parent) - : MapProvider(QString("https://mapquest.com"), QString("jpg"), - AVERAGE_TILE_SIZE, QGeoMapType::SatelliteMapDay, parent) { - } + MapQuestSatMapProvider(QObject* parent = nullptr) + : MapProvider(QStringLiteral("https://mapquest.com"), QStringLiteral("jpg"), + AVERAGE_TILE_SIZE, QGeoMapType::SatelliteMapDay, parent) {} - QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager); + QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; }; class VWorldStreetMapProvider : public MapProvider { Q_OBJECT public: - VWorldStreetMapProvider(QObject* parent) - : MapProvider(QString("www.vworld.kr"), QString("png"), + VWorldStreetMapProvider(QObject* parent = nullptr) + : MapProvider(QStringLiteral("www.vworld.kr"), QStringLiteral("png"), AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent) {} - QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager); + QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; private: - const QString _versionBingMaps = "563"; + const QString _versionBingMaps = QStringLiteral("563"); }; class VWorldSatMapProvider : public MapProvider { Q_OBJECT public: - VWorldSatMapProvider(QObject* parent) - : MapProvider(QString("www.vworld.kr"), QString("jpg"), - AVERAGE_TILE_SIZE, QGeoMapType::SatelliteMapDay, parent) { - } + VWorldSatMapProvider(QObject* parent = nullptr) + : MapProvider(QStringLiteral("www.vworld.kr"), QStringLiteral("jpg"), + AVERAGE_TILE_SIZE, QGeoMapType::SatelliteMapDay, parent) {} - QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager); + QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; private: - const QString _versionBingMaps = "563"; + const QString _versionBingMaps = QStringLiteral("563"); }; diff --git a/src/QtLocationPlugin/GoogleMapProvider.cpp b/src/QtLocationPlugin/GoogleMapProvider.cpp index c2505dd09c963732bde158dafae58ea5325f6fc2..021b3c49b66a8d4c6667f274486c0b8086c79157 100644 --- a/src/QtLocationPlugin/GoogleMapProvider.cpp +++ b/src/QtLocationPlugin/GoogleMapProvider.cpp @@ -1,24 +1,33 @@ +/**************************************************************************** + * + * (c) 2009-2019 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ + #include "GoogleMapProvider.h" #if defined(DEBUG_GOOGLE_MAPS) #include #include #endif -#include "QGCMapEngine.h" +#include -GoogleMapProvider::GoogleMapProvider(QString imageFormat, quint32 averageSize, - QGeoMapType::MapStyle mapType, - QObject* parent) - : MapProvider(QString("https://www.google.com/maps/preview"), imageFormat, - averageSize, mapType, parent), - _googleVersionRetrieved(false), _googleReply(nullptr) { +#include "QGCMapEngine.h" +GoogleMapProvider::GoogleMapProvider(const QString &imageFormat, const quint32 averageSize, const QGeoMapType::MapStyle mapType, QObject* parent) + : MapProvider(QStringLiteral("https://www.google.com/maps/preview"), imageFormat, averageSize, mapType, parent) + , _googleVersionRetrieved(false) + , _googleReply(nullptr) +{ // Google version strings - _versionGoogleMap = "m@354000000"; - _versionGoogleSatellite = "692"; - _versionGoogleLabels = "h@336"; - _versionGoogleTerrain = "t@354,r@354000000"; - _versionGoogleHybrid = "y"; - _secGoogleWord = "Galileo"; + _versionGoogleMap = QStringLiteral("m@354000000"); + _versionGoogleSatellite = QStringLiteral("692"); + _versionGoogleLabels = QStringLiteral("h@336"); + _versionGoogleTerrain = QStringLiteral("t@354,r@354000000"); + _versionGoogleHybrid = QStringLiteral("y"); + _secGoogleWord = QStringLiteral("Galileo"); } GoogleMapProvider::~GoogleMapProvider() { @@ -27,14 +36,13 @@ GoogleMapProvider::~GoogleMapProvider() { } //----------------------------------------------------------------------------- -void GoogleMapProvider::_getSecGoogleWords(int x, int y, QString& sec1, - QString& sec2) { - sec1 = ""; // after &x=... - sec2 = ""; // after &zoom=... +void GoogleMapProvider::_getSecGoogleWords(const int x, const int y, QString& sec1, QString& sec2) const { + sec1 = QStringLiteral(""); // after &x=... + sec2 = QStringLiteral(""); // after &zoom=... int seclen = ((x * 3) + y) % 8; sec2 = _secGoogleWord.left(seclen); if (y >= 10000 && y < 100000) { - sec1 = "&s="; + sec1 = QStringLiteral("&s="); } } @@ -47,19 +55,20 @@ void GoogleMapProvider::_networkReplyError(QNetworkReply::NetworkError error) { } } //----------------------------------------------------------------------------- -void GoogleMapProvider::_replyDestroyed() { _googleReply = nullptr; } +void GoogleMapProvider::_replyDestroyed() { + _googleReply = nullptr; +} void GoogleMapProvider::_googleVersionCompleted() { if (!_googleReply || (_googleReply->error() != QNetworkReply::NoError)) { qDebug() << "Error collecting Google maps version info"; return; } - QString html = QString(_googleReply->readAll()); + const QString html = QString(_googleReply->readAll()); #if defined(DEBUG_GOOGLE_MAPS) - QString filename = - QStandardPaths::writableLocation(QStandardPaths::HomeLocation); - filename += "/google.output"; + QString filename = QStandardPaths::writableLocation(QStandardPaths::HomeLocation); + filename += QStringLiteral("/google.output"); QFile file(filename); if (file.open(QIODevice::ReadWrite)) { QTextStream stream(&file); @@ -67,30 +76,24 @@ void GoogleMapProvider::_googleVersionCompleted() { } #endif - QRegExp reg("\"*https?://mt\\D?\\d..*/vt\\?lyrs=m@(\\d*)", - Qt::CaseInsensitive); + QRegExp reg(QStringLiteral("\"*https?://mt\\D?\\d..*/vt\\?lyrs=m@(\\d*)"), Qt::CaseInsensitive); if (reg.indexIn(html) != -1) { - QStringList gc = reg.capturedTexts(); - _versionGoogleMap = QString("m@%1").arg(gc[1]); + _versionGoogleMap = QString(QStringLiteral("m@%1")).arg(reg.capturedTexts().value(1, QString())); } - reg = QRegExp("\"*https?://khm\\D?\\d.googleapis.com/kh\\?v=(\\d*)", - Qt::CaseInsensitive); + reg = QRegExp(QStringLiteral("\"*https?://khm\\D?\\d.googleapis.com/kh\\?v=(\\d*)"), Qt::CaseInsensitive); if (reg.indexIn(html) != -1) { - QStringList gc = reg.capturedTexts(); - _versionGoogleSatellite = gc[1]; + _versionGoogleSatellite = reg.capturedTexts().value(1); } - reg = QRegExp("\"*https?://mt\\D?\\d..*/vt\\?lyrs=t@(\\d*),r@(\\d*)", - Qt::CaseInsensitive); + reg = QRegExp(QStringLiteral("\"*https?://mt\\D?\\d..*/vt\\?lyrs=t@(\\d*),r@(\\d*)"), Qt::CaseInsensitive); if (reg.indexIn(html) != -1) { - QStringList gc = reg.capturedTexts(); - _versionGoogleTerrain = QString("t@%1,r@%2").arg(gc[1]).arg(gc[2]); + const QStringList gc = reg.capturedTexts(); + _versionGoogleTerrain = QString(QStringLiteral("t@%1,r@%2")).arg(gc.value(1), gc.value(2)); } _googleReply->deleteLater(); _googleReply = nullptr; } -void GoogleMapProvider::_tryCorrectGoogleVersions( - QNetworkAccessManager* networkManager) { +void GoogleMapProvider::_tryCorrectGoogleVersions(QNetworkAccessManager* networkManager) { QMutexLocker locker(&_googleVersionMutex); if (_googleVersionRetrieved) { return; @@ -105,37 +108,28 @@ void GoogleMapProvider::_tryCorrectGoogleVersions( QSslConfiguration conf = qheader.sslConfiguration(); conf.setPeerVerifyMode(QSslSocket::VerifyNone); qheader.setSslConfiguration(conf); - QString url = "http://maps.google.com/maps/api/js?v=3.2&sensor=false"; + const QString url = QStringLiteral("http://maps.google.com/maps/api/js?v=3.2&sensor=false"); qheader.setUrl(QUrl(url)); QByteArray ua; ua.append(getQGCMapEngine()->userAgent()); qheader.setRawHeader("User-Agent", ua); _googleReply = networkManager->get(qheader); - connect(_googleReply, &QNetworkReply::finished, this, - &GoogleMapProvider::_googleVersionCompleted); - connect(_googleReply, &QNetworkReply::destroyed, this, - &GoogleMapProvider::_replyDestroyed); - connect( - _googleReply, - static_cast( - &QNetworkReply::error), - this, &GoogleMapProvider::_networkReplyError); + connect(_googleReply, &QNetworkReply::finished, this, &GoogleMapProvider::_googleVersionCompleted); + connect(_googleReply, &QNetworkReply::destroyed, this, &GoogleMapProvider::_replyDestroyed); + connect(_googleReply, QOverload::of(&QNetworkReply::error), this, &GoogleMapProvider::_networkReplyError); networkManager->setProxy(proxy); } } -QString -GoogleStreetMapProvider::_getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) { +QString GoogleStreetMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { // http://mt1.google.com/vt/lyrs=m - QString server = "mt"; - QString request = "vt"; - QString sec1 = ""; // after &x=... - QString sec2 = ""; // after &zoom=... + QString server = QStringLiteral("mt"); + QString request = QStringLiteral("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") + return QString(QStringLiteral("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) @@ -148,18 +142,15 @@ GoogleStreetMapProvider::_getURL(int x, int y, int zoom, .arg(sec2); } -QString -GoogleSatelliteMapProvider::_getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) { +QString GoogleSatelliteMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { // http://mt1.google.com/vt/lyrs=s - QString server = "khm"; - QString request = "kh"; - QString sec1 = ""; // after &x=... - QString sec2 = ""; // after &zoom=... + QString server = QStringLiteral("khm"); + QString request = QStringLiteral("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") + return QString(QStringLiteral("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) @@ -172,17 +163,14 @@ GoogleSatelliteMapProvider::_getURL(int x, int y, int zoom, .arg(sec2); } -QString -GoogleLabelsMapProvider::_getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) { +QString GoogleLabelsMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { QString server = "mts"; QString request = "vt"; - QString sec1 = ""; // after &x=... - QString sec2 = ""; // after &zoom=... + 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") + return QString(QStringLiteral("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) @@ -195,17 +183,14 @@ GoogleLabelsMapProvider::_getURL(int x, int y, int zoom, .arg(sec2); } -QString -GoogleTerrainMapProvider::_getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) { - QString server = "mt"; - QString request = "vt"; - QString sec1 = ""; // after &x=... - QString sec2 = ""; // after &zoom=... +QString GoogleTerrainMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { + QString server = QStringLiteral("mt"); + QString request = QStringLiteral("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") + return QString(QStringLiteral("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) @@ -218,17 +203,14 @@ GoogleTerrainMapProvider::_getURL(int x, int y, int zoom, .arg(sec2); } -QString -GoogleHybridMapProvider::_getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) { - QString server = "mt"; - QString request = "vt"; - QString sec1 = ""; // after &x=... - QString sec2 = ""; // after &zoom=... +QString GoogleHybridMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { + QString server = QStringLiteral("mt"); + QString request = QStringLiteral("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") + return QString(QStringLiteral("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) diff --git a/src/QtLocationPlugin/GoogleMapProvider.h b/src/QtLocationPlugin/GoogleMapProvider.h index 40921ea4b21d57e0396ac0c4fb58da0a0d45608c..7fd40d23e5c430d172cbeb17cceb872ef7a5dff3 100644 --- a/src/QtLocationPlugin/GoogleMapProvider.h +++ b/src/QtLocationPlugin/GoogleMapProvider.h @@ -1,35 +1,36 @@ +/**************************************************************************** + * + * (c) 2009-2019 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ + #pragma once #include "MapProvider.h" -#include -#include -#include #include -#include -#include class GoogleMapProvider : public MapProvider { Q_OBJECT - public: - GoogleMapProvider(QString imageFormat, quint32 averageSize, - QGeoMapType::MapStyle mapType, QObject* parent); + +public: + GoogleMapProvider(const QString& imageFormat, const quint32 averageSize, + const QGeoMapType::MapStyle _mapType, QObject* parent = nullptr); ~GoogleMapProvider(); // Google Specific private slots - private slots: +private slots: void _networkReplyError(QNetworkReply::NetworkError error); void _googleVersionCompleted(); void _replyDestroyed(); - protected: - // Define the url to Request - virtual QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager) = 0; - +protected: // Google Specific private methods - void _getSecGoogleWords(int x, int y, QString& sec1, QString& sec2); + void _getSecGoogleWords(const int x, const int y, QString& sec1, QString& sec2) const; void _tryCorrectGoogleVersions(QNetworkAccessManager* networkManager); // Google Specific attributes @@ -57,23 +58,22 @@ class GoogleMapProvider : public MapProvider { // CycleMap, // CustomMap = 100 -const quint32 AVERAGE_GOOGLE_STREET_MAP = 4913; -const quint32 AVERAGE_GOOGLE_SAT_MAP = 56887; -const quint32 AVERAGE_GOOGLE_TERRAIN_MAP = 19391; +static const quint32 AVERAGE_GOOGLE_STREET_MAP = 4913; +static const quint32 AVERAGE_GOOGLE_SAT_MAP = 56887; +static const quint32 AVERAGE_GOOGLE_TERRAIN_MAP = 19391; // ----------------------------------------------------------- // Google Street Map class GoogleStreetMapProvider : public GoogleMapProvider { Q_OBJECT - public: - GoogleStreetMapProvider(QObject* parent) - : GoogleMapProvider(QString("png"), AVERAGE_GOOGLE_STREET_MAP, - QGeoMapType::StreetMap, parent) {} - - protected: - QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager); + +public: + GoogleStreetMapProvider(QObject* parent = nullptr) + : GoogleMapProvider(QStringLiteral("png"), AVERAGE_GOOGLE_STREET_MAP, QGeoMapType::StreetMap, parent) {} + +protected: + QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; }; // ----------------------------------------------------------- @@ -81,14 +81,14 @@ class GoogleStreetMapProvider : public GoogleMapProvider { class GoogleSatelliteMapProvider : public GoogleMapProvider { Q_OBJECT - public: - GoogleSatelliteMapProvider(QObject* parent) - : GoogleMapProvider(QString("jpg"), AVERAGE_GOOGLE_SAT_MAP, + +public: + GoogleSatelliteMapProvider(QObject* parent = nullptr) + : GoogleMapProvider(QStringLiteral("jpg"), AVERAGE_GOOGLE_SAT_MAP, QGeoMapType::SatelliteMapDay, parent) {} - protected: - QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager); +protected: + QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; }; // ----------------------------------------------------------- @@ -96,14 +96,13 @@ class GoogleSatelliteMapProvider : public GoogleMapProvider { class GoogleLabelsMapProvider : public GoogleMapProvider { Q_OBJECT - public: - GoogleLabelsMapProvider(QObject* parent) - : GoogleMapProvider(QString("png"), AVERAGE_TILE_SIZE, - QGeoMapType::CustomMap, parent) {} - - protected: - QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager); + +public: + GoogleLabelsMapProvider(QObject* parent = nullptr) + : GoogleMapProvider(QStringLiteral("png"), AVERAGE_TILE_SIZE, QGeoMapType::CustomMap, parent) {} + +protected: + QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; }; // ----------------------------------------------------------- @@ -111,14 +110,13 @@ class GoogleLabelsMapProvider : public GoogleMapProvider { class GoogleTerrainMapProvider : public GoogleMapProvider { Q_OBJECT - public: - GoogleTerrainMapProvider(QObject* parent) - : GoogleMapProvider(QString("png"), AVERAGE_GOOGLE_TERRAIN_MAP, - QGeoMapType::TerrainMap, parent) {} - - protected: - QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager); + +public: + GoogleTerrainMapProvider(QObject* parent = nullptr) + : GoogleMapProvider(QStringLiteral("png"), AVERAGE_GOOGLE_TERRAIN_MAP, QGeoMapType::TerrainMap, parent) {} + +protected: + QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; }; // ----------------------------------------------------------- @@ -126,12 +124,11 @@ class GoogleTerrainMapProvider : public GoogleMapProvider { class GoogleHybridMapProvider : public GoogleMapProvider { Q_OBJECT - public: - GoogleHybridMapProvider(QObject* parent) - : GoogleMapProvider(QString("png"), AVERAGE_GOOGLE_SAT_MAP, - QGeoMapType::HybridMap, parent) {} - - protected: - QString _getURL(int x, int y, int zoom, - QNetworkAccessManager* networkManager); + +public: + GoogleHybridMapProvider(QObject* parent = nullptr) + : GoogleMapProvider(QStringLiteral("png"), AVERAGE_GOOGLE_SAT_MAP, QGeoMapType::HybridMap, parent) {} + +protected: + QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; }; diff --git a/src/QtLocationPlugin/MapProvider.cpp b/src/QtLocationPlugin/MapProvider.cpp index 3f22daa65b78dc36e34f141094c5867e1705af10..e96f50ea305892ffb4cfc758e75b17bc63246dd2 100644 --- a/src/QtLocationPlugin/MapProvider.cpp +++ b/src/QtLocationPlugin/MapProvider.cpp @@ -34,9 +34,9 @@ QNetworkRequest MapProvider::getTileURL(const int x, const int y, const int zoom return request; } request.setUrl(QUrl(url)); - request.setRawHeader("Accept", "*/*"); - request.setRawHeader("Referrer", _referrer.toUtf8()); - request.setRawHeader("User-Agent", _userAgent); + request.setRawHeader(QByteArrayLiteral("Accept"), QByteArrayLiteral("*/*")); + request.setRawHeader(QByteArrayLiteral("Referrer"), _referrer.toUtf8()); + request.setRawHeader(QByteArrayLiteral("User-Agent"), _userAgent); return request; } @@ -56,7 +56,7 @@ QString MapProvider::getImageFormat(const QByteArray& image) const { return format; } -QString MapProvider::_tileXYToQuadKey(const int tileX, const int tileY, const int levelOfDetail) { +QString MapProvider::_tileXYToQuadKey(const int tileX, const int tileY, const int levelOfDetail) const { QString quadKey; for (int i = levelOfDetail; i > 0; i--) { char digit = '0'; @@ -73,7 +73,7 @@ QString MapProvider::_tileXYToQuadKey(const int tileX, const int tileY, const in return quadKey; } -int MapProvider::_getServerNum(const int x, const int y, const int max) { +int MapProvider::_getServerNum(const int x, const int y, const int max) const { return (x + 2 * y) % max; } @@ -89,7 +89,9 @@ int MapProvider::lat2tileY(const double lat, const int z) const { 2.0 * pow(2.0, z))); } -bool MapProvider::_isElevationProvider() { return false; } +bool MapProvider::_isElevationProvider() const { + return false; +} QGCTileSet MapProvider::getTileCount(const int zoom, const double topleftLon, const double topleftLat, const double bottomRightLon, diff --git a/src/QtLocationPlugin/MapProvider.h b/src/QtLocationPlugin/MapProvider.h index a7cc25becc2f1dab465862045aa0d0e9b4a31562..74fdcdead2cdc91205e5c4c650d5604c2c06a57a 100644 --- a/src/QtLocationPlugin/MapProvider.h +++ b/src/QtLocationPlugin/MapProvider.h @@ -21,7 +21,7 @@ static const unsigned char pngSignature[] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A static const unsigned char jpegSignature[] = {0xFF, 0xD8, 0xFF, 0x00}; static const unsigned char gifSignature[] = {0x47, 0x49, 0x46, 0x38, 0x00}; -const quint32 AVERAGE_TILE_SIZE = 13652; +static const quint32 AVERAGE_TILE_SIZE = 13652; class QNetworkRequest; class QNetworkAccessManager; @@ -31,9 +31,9 @@ class MapProvider : public QObject { public: MapProvider(const QString& referrer, const QString& imageFormat, const quint32 averageSize, - const QGeoMapType::MapStyle _mapType = QGeoMapType::CustomMap, QObject* parent = nullptr); + const QGeoMapType::MapStyle mapType = QGeoMapType::CustomMap, QObject* parent = nullptr); - QNetworkRequest getTileURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager); + virtual QNetworkRequest getTileURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager); QString getImageFormat(const QByteArray& image) const; @@ -45,15 +45,15 @@ public: virtual int lat2tileY(const double lat, const int z) const; - virtual bool _isElevationProvider(); + virtual bool _isElevationProvider() const; virtual QGCTileSet getTileCount(const int zoom, const double topleftLon, const double topleftLat, const double bottomRightLon, const double bottomRightLat) const; - protected: - QString _tileXYToQuadKey(const int tileX, const int tileY, const int levelOfDetail); - int _getServerNum(const int x, const int y, const int max); +protected: + QString _tileXYToQuadKey(const int tileX, const int tileY, const int levelOfDetail) const; + int _getServerNum(const int x, const int y, const int max) const; // Define the url to Request virtual QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) = 0; diff --git a/src/QtLocationPlugin/MapboxMapProvider.cpp b/src/QtLocationPlugin/MapboxMapProvider.cpp index 555a52fa0461e0730beba7ff660090dfa3a74781..214bd8beca9f8338c5619e1f60a8bcae05d55152 100644 --- a/src/QtLocationPlugin/MapboxMapProvider.cpp +++ b/src/QtLocationPlugin/MapboxMapProvider.cpp @@ -3,33 +3,19 @@ #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) { +static const QString MapBoxUrl = QStringLiteral("https://api.mapbox.com/v4/%1/%2/%3/%4.jpg80?access_token=%5"); + +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) + , _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(); +QString MapboxMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) { + Q_UNUSED(networkManager) + const 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 MapBoxUrl.arg(_mapboxName).arg(zoom).arg(x).arg(y).arg(mapBoxToken); } - return QString(""); + return QString(); } diff --git a/src/QtLocationPlugin/MapboxMapProvider.h b/src/QtLocationPlugin/MapboxMapProvider.h index 9b31e308dbfc2f5f78e3e223711a184fccc7771b..a6eb90a3cb26fec023cf52e7ca224f27983406db 100644 --- a/src/QtLocationPlugin/MapboxMapProvider.h +++ b/src/QtLocationPlugin/MapboxMapProvider.h @@ -1,136 +1,153 @@ +/**************************************************************************** + * + * (c) 2009-2019 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ + #pragma once #include "MapProvider.h" -#include -#include -#include -#include -#include -#include - -const quint32 AVERAGE_MAPBOX_SAT_MAP = 15739; -const quint32 AVERAGE_MAPBOX_STREET_MAP = 5648; +static const quint32 AVERAGE_MAPBOX_SAT_MAP = 15739; +static const quint32 AVERAGE_MAPBOX_STREET_MAP = 5648; 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; + +public: + MapboxMapProvider(const QString& mapName, const quint32 averageSize, const QGeoMapType::MapStyle mapType, QObject* parent = nullptr); + +protected: + QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override; + + QString _mapboxName; }; class MapboxStreetMapProvider : public MapboxMapProvider { Q_OBJECT - public: - MapboxStreetMapProvider(QObject* parent) - : MapboxMapProvider("mapbox.streets", AVERAGE_MAPBOX_STREET_MAP, + +public: + MapboxStreetMapProvider(QObject* parent = nullptr) + : MapboxMapProvider(QStringLiteral("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, + +public: + MapboxLightMapProvider(QObject* parent = nullptr) + : MapboxMapProvider(QStringLiteral("mapbox.light"), AVERAGE_TILE_SIZE, QGeoMapType::CustomMap, parent) {} }; class MapboxDarkMapProvider : public MapboxMapProvider { Q_OBJECT - public: - MapboxDarkMapProvider(QObject* parent) - : MapboxMapProvider("mapbox.dark", AVERAGE_TILE_SIZE, + +public: + MapboxDarkMapProvider(QObject* parent = nullptr) + : MapboxMapProvider(QStringLiteral("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, + +public: + MapboxSatelliteMapProvider(QObject* parent = nullptr) + : MapboxMapProvider(QStringLiteral("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, + +public: + MapboxHybridMapProvider(QObject* parent = nullptr) + : MapboxMapProvider(QStringLiteral("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, + +public: + MapboxWheatPasteMapProvider(QObject* parent = nullptr) + : MapboxMapProvider(QStringLiteral("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, + +public: + MapboxStreetsBasicMapProvider(QObject* parent = nullptr) + : MapboxMapProvider(QStringLiteral("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, + +public: + MapboxComicMapProvider(QObject* parent = nullptr) + : MapboxMapProvider(QStringLiteral("mapbox.comic"), AVERAGE_TILE_SIZE, QGeoMapType::CustomMap, parent) {} }; class MapboxOutdoorsMapProvider : public MapboxMapProvider { Q_OBJECT - public: - MapboxOutdoorsMapProvider(QObject* parent) - : MapboxMapProvider("mapbox.outdoors", AVERAGE_TILE_SIZE, + +public: + MapboxOutdoorsMapProvider(QObject* parent = nullptr) + : MapboxMapProvider(QStringLiteral("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, + +public: + MapboxRunBikeHikeMapProvider(QObject* parent = nullptr) + : MapboxMapProvider(QStringLiteral("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, + +public: + MapboxPencilMapProvider(QObject* parent = nullptr) + : MapboxMapProvider(QStringLiteral("mapbox.pencil"), AVERAGE_TILE_SIZE, QGeoMapType::CustomMap, parent) {} }; class MapboxPiratesMapProvider : public MapboxMapProvider { Q_OBJECT - public: - MapboxPiratesMapProvider(QObject* parent) - : MapboxMapProvider("mapbox.pirates", AVERAGE_TILE_SIZE, + +public: + MapboxPiratesMapProvider(QObject* parent = nullptr) + : MapboxMapProvider(QStringLiteral("mapbox.pirates"), AVERAGE_TILE_SIZE, QGeoMapType::CustomMap, parent) {} }; class MapboxEmeraldMapProvider : public MapboxMapProvider { Q_OBJECT - public: - MapboxEmeraldMapProvider(QObject* parent) - : MapboxMapProvider("mapbox.emerald", AVERAGE_TILE_SIZE, + +public: + MapboxEmeraldMapProvider(QObject* parent = nullptr) + : MapboxMapProvider(QStringLiteral("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, + +public: + MapboxHighContrastMapProvider(QObject* parent = nullptr) + : MapboxMapProvider(QStringLiteral("mapbox.high-contrast"), AVERAGE_TILE_SIZE, QGeoMapType::CustomMap, parent) {} };