Commit 68164ca8 authored by Cosmin Marc's avatar Cosmin Marc

Map providers cleanup.

parent 964f926c
/****************************************************************************
*
* (c) 2009-2019 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#include "BingMapProvider.h" #include "BingMapProvider.h"
#if defined(DEBUG_GOOGLE_MAPS)
#include <QFile> BingMapProvider::BingMapProvider(const QString &imageFormat, const quint32 averageSize,
#include <QStandardPaths> const QGeoMapType::MapStyle mapType, QObject* parent)
#endif : MapProvider(QStringLiteral("https://www.bing.com/maps/"), imageFormat, averageSize, mapType, parent) {}
#include "QGCMapEngine.h"
static const QString RoadMapUrl = QStringLiteral("http://ecn.t%1.tiles.virtualearth.net/tiles/r%2.png?g=%3&mkt=%4");
BingMapProvider::BingMapProvider(QString imageFormat, quint32 averageSize,
QGeoMapType::MapStyle mapType, QObject* parent) QString BingRoadMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {
: MapProvider(QString("https://www.bing.com/maps/"), imageFormat, Q_UNUSED(networkManager)
averageSize, mapType, parent) {} const QString key = _tileXYToQuadKey(x, y, zoom);
return RoadMapUrl.arg(QString::number(_getServerNum(x, y, 4)), key, _versionBingMaps, _language);
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);
} }
QString static const QString SatteliteMapUrl = QStringLiteral("http://ecn.t%1.tiles.virtualearth.net/tiles/a%2.jpeg?g=%3&mkt=%4");
BingSatelliteMapProvider::_getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager) { QString BingSatelliteMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {
Q_UNUSED(networkManager); Q_UNUSED(networkManager)
QString key = _tileXYToQuadKey(x, y, zoom); const QString key = _tileXYToQuadKey(x, y, zoom);
return QString("http://ecn.t%1.tiles.virtualearth.net/tiles/" return SatteliteMapUrl.arg(QString::number(_getServerNum(x, y, 4)) ,key ,_versionBingMaps ,_language);
"a%2.jpeg?g=%3&mkt=%4")
.arg(_getServerNum(x, y, 4))
.arg(key)
.arg(_versionBingMaps)
.arg(_language);
} }
QString BingHybridMapProvider::_getURL(int x, int y, int zoom, static const QString HybridMapUrl = QStringLiteral("http://ecn.t%1.tiles.virtualearth.net/tiles/h%2.jpeg?g=%3&mkt=%4");
QNetworkAccessManager* networkManager) {
Q_UNUSED(networkManager); QString BingHybridMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {
QString key = _tileXYToQuadKey(x, y, zoom); Q_UNUSED(networkManager)
return QString("http://ecn.t%1.tiles.virtualearth.net/tiles/" const QString key = _tileXYToQuadKey(x, y, zoom);
"h%2.jpeg?g=%3&mkt=%4") return HybridMapUrl.arg(QString::number(_getServerNum(x, y, 4)), key, _versionBingMaps, _language);
.arg(_getServerNum(x, y, 4))
.arg(key)
.arg(_versionBingMaps)
.arg(_language);
} }
/****************************************************************************
*
* (c) 2009-2019 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#pragma once #pragma once
#include "MapProvider.h" #include "MapProvider.h"
#include <QByteArray>
#include <QMutex>
#include <QNetworkProxy>
#include <QNetworkReply>
#include <QPoint>
#include <QString>
class BingMapProvider : public MapProvider { class BingMapProvider : public MapProvider {
Q_OBJECT 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: ~BingMapProvider() = default;
// Define the url to Request
virtual QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager) = 0;
const QString _versionBingMaps = "563"; protected:
const QString _versionBingMaps = QStringLiteral("563");
}; };
const quint32 AVERAGE_BING_STREET_MAP = 1297; static const quint32 AVERAGE_BING_STREET_MAP = 1297;
const quint32 AVERAGE_BING_SAT_MAP = 19597; static const quint32 AVERAGE_BING_SAT_MAP = 19597;
// ----------------------------------------------------------- // -----------------------------------------------------------
// Bing Road Map // Bing Road Map
class BingRoadMapProvider : public BingMapProvider { class BingRoadMapProvider : public BingMapProvider {
Q_OBJECT Q_OBJECT
public:
BingRoadMapProvider(QObject* parent) public:
: BingMapProvider(QString("png"), AVERAGE_BING_STREET_MAP, QGeoMapType::StreetMap, BingRoadMapProvider(QObject* parent = nullptr)
parent) {} : BingMapProvider(QStringLiteral("png"), AVERAGE_BING_STREET_MAP, QGeoMapType::StreetMap, parent) {}
protected: QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager);
}; };
// ----------------------------------------------------------- // -----------------------------------------------------------
...@@ -48,14 +45,12 @@ class BingRoadMapProvider : public BingMapProvider { ...@@ -48,14 +45,12 @@ class BingRoadMapProvider : public BingMapProvider {
class BingSatelliteMapProvider : public BingMapProvider { class BingSatelliteMapProvider : public BingMapProvider {
Q_OBJECT Q_OBJECT
public:
BingSatelliteMapProvider(QObject* parent) public:
: BingMapProvider(QString("jpg"), AVERAGE_BING_SAT_MAP, QGeoMapType::SatelliteMapDay, BingSatelliteMapProvider(QObject* parent = nullptr)
parent) {} : BingMapProvider(QStringLiteral("jpg"), AVERAGE_BING_SAT_MAP, QGeoMapType::SatelliteMapDay, parent) {}
protected: QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager);
}; };
// ----------------------------------------------------------- // -----------------------------------------------------------
...@@ -63,12 +58,9 @@ class BingSatelliteMapProvider : public BingMapProvider { ...@@ -63,12 +58,9 @@ class BingSatelliteMapProvider : public BingMapProvider {
class BingHybridMapProvider : public BingMapProvider { class BingHybridMapProvider : public BingMapProvider {
Q_OBJECT Q_OBJECT
public: public:
BingHybridMapProvider(QObject* parent) BingHybridMapProvider(QObject* parent = nullptr)
: BingMapProvider(QString("jpg"),AVERAGE_BING_SAT_MAP, QGeoMapType::HybridMap, : BingMapProvider(QStringLiteral("jpg"),AVERAGE_BING_SAT_MAP, QGeoMapType::HybridMap, parent) {}
parent) {}
QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
protected:
QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager);
}; };
...@@ -5,42 +5,34 @@ ...@@ -5,42 +5,34 @@
#endif #endif
#include "QGCMapEngine.h" #include "QGCMapEngine.h"
ElevationProvider::ElevationProvider(QString imageFormat, quint32 averageSize, ElevationProvider::ElevationProvider(const QString& imageFormat, quint32 averageSize, QGeoMapType::MapStyle mapType, QObject* parent)
QGeoMapType::MapStyle mapType, : MapProvider(QStringLiteral("https://api.airmap.com/"), imageFormat, averageSize, mapType, parent) {}
QObject* parent)
: MapProvider(QString("https://api.airmap.com/"), imageFormat, averageSize,
mapType, parent) {}
ElevationProvider::~ElevationProvider() {}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
int AirmapElevationProvider::long2tileX(double lon, int z) { int AirmapElevationProvider::long2tileX(const double lon, const int z) const {
Q_UNUSED(z); Q_UNUSED(z)
return static_cast<int>(floor((lon + 180.0) / srtm1TileSize)); return static_cast<int>(floor((lon + 180.0) / srtm1TileSize));
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
int AirmapElevationProvider::lat2tileY(double lat, int z) { int AirmapElevationProvider::lat2tileY(const double lat, const int z) const {
Q_UNUSED(z); Q_UNUSED(z)
return static_cast<int>(floor((lat + 90.0) / srtm1TileSize)); return static_cast<int>(floor((lat + 90.0) / srtm1TileSize));
} }
QString QString AirmapElevationProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {
AirmapElevationProvider::_getURL(int x, int y, int zoom, Q_UNUSED(networkManager)
QNetworkAccessManager* networkManager) { Q_UNUSED(zoom)
Q_UNUSED(networkManager); return QString("https://api.airmap.com/elevation/v1/ele/carpet?points=%1,%2,%3,%4")
Q_UNUSED(zoom);
return QString("https://api.airmap.com/elevation/v1/ele/"
"carpet?points=%1,%2,%3,%4")
.arg(static_cast<double>(y) * srtm1TileSize - 90.0) .arg(static_cast<double>(y) * srtm1TileSize - 90.0)
.arg(static_cast<double>(x) * srtm1TileSize - 180.0) .arg(static_cast<double>(x) * srtm1TileSize - 180.0)
.arg(static_cast<double>(y + 1) * srtm1TileSize - 90.0) .arg(static_cast<double>(y + 1) * srtm1TileSize - 90.0)
.arg(static_cast<double>(x + 1) * srtm1TileSize - 180.0); .arg(static_cast<double>(x + 1) * srtm1TileSize - 180.0);
} }
QGCTileSet AirmapElevationProvider::getTileCount(int zoom, double topleftLon, QGCTileSet AirmapElevationProvider::getTileCount(const int zoom, const double topleftLon,
double topleftLat, const double topleftLat, const double bottomRightLon,
double bottomRightLon, const double bottomRightLat) const {
double bottomRightLat) {
QGCTileSet set; QGCTileSet set;
set.tileX0 = long2tileX(topleftLon, zoom); set.tileX0 = long2tileX(topleftLon, zoom);
set.tileY0 = lat2tileY(bottomRightLat, zoom); set.tileY0 = lat2tileY(bottomRightLat, zoom);
......
...@@ -10,24 +10,17 @@ ...@@ -10,24 +10,17 @@
#include <QPoint> #include <QPoint>
#include <QString> #include <QString>
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 { class ElevationProvider : public MapProvider {
Q_OBJECT Q_OBJECT
public: public:
ElevationProvider(QString imageFormat, quint32 averageSize, ElevationProvider(const QString& imageFormat, quint32 averageSize,
QGeoMapType::MapStyle mapType, QObject* parent); QGeoMapType::MapStyle mapType, QObject* parent = nullptr);
~ElevationProvider(); virtual bool _isElevationProvider() const override { return true; }
bool _isElevationProvider(){return true;}
protected:
// Define the url to Request
virtual QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager) = 0;
}; };
// ----------------------------------------------------------- // -----------------------------------------------------------
...@@ -36,19 +29,19 @@ class ElevationProvider : public MapProvider { ...@@ -36,19 +29,19 @@ class ElevationProvider : public MapProvider {
class AirmapElevationProvider : public ElevationProvider { class AirmapElevationProvider : public ElevationProvider {
Q_OBJECT Q_OBJECT
public: public:
AirmapElevationProvider(QObject* parent) AirmapElevationProvider(QObject* parent = nullptr)
: ElevationProvider(QString("bin"), AVERAGE_AIRMAP_ELEV_SIZE, : ElevationProvider(QStringLiteral("bin"), AVERAGE_AIRMAP_ELEV_SIZE,
QGeoMapType::StreetMap, parent) {} QGeoMapType::StreetMap, parent) {}
int long2tileX(double lon, int z); int long2tileX(const double lon, const int z) const override;
int lat2tileY(double lat, int z);
QGCTileSet getTileCount(int zoom, double topleftLon, int lat2tileY(const double lat, const int z) const override;
double topleftLat, double bottomRightLon,
double bottomRightLat);
QGCTileSet getTileCount(const int zoom, const double topleftLon,
const double topleftLat, const double bottomRightLon,
const double bottomRightLat) const override;
protected: protected:
QString _getURL(int x, int y, int zoom, QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
QNetworkAccessManager* networkManager);
}; };
/****************************************************************************
*
* (c) 2009-2019 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#include "EsriMapProvider.h" #include "EsriMapProvider.h"
#include "QGCApplication.h" #include "QGCApplication.h"
#include "QGCMapEngine.h"
#include "SettingsManager.h" #include "SettingsManager.h"
QNetworkRequest EsriMapProvider::EsriMapProvider(const quint32 averageSize, const QGeoMapType::MapStyle mapType, QObject *parent)
EsriMapProvider::getTileURL(int x, int y, int zoom, : MapProvider(QString(), QString(), averageSize, mapType, parent) {}
QNetworkAccessManager* networkManager) {
QNetworkRequest EsriMapProvider::getTileURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {
//-- Build URL //-- Build URL
QNetworkRequest request; QNetworkRequest request;
QString url = _getURL(x, y, zoom, networkManager); const QString url = _getURL(x, y, zoom, networkManager);
if (url.isEmpty()) { if (url.isEmpty()) {
return request; return request;
} }
request.setUrl(QUrl(url)); request.setUrl(QUrl(url));
request.setRawHeader("Accept", "*/*"); request.setRawHeader(QByteArrayLiteral("Accept"), QByteArrayLiteral("*/*"));
QByteArray token = qgcApp() const QByteArray token = qgcApp()->toolbox()->settingsManager()->appSettings()->esriToken()->rawValue().toString().toLatin1();
->toolbox() request.setRawHeader(QByteArrayLiteral("User-Agent"), QByteArrayLiteral("Qt Location based application"));
->settingsManager() request.setRawHeader(QByteArrayLiteral("User-Token"), token);
->appSettings()
->esriToken()
->rawValue()
.toString()
.toLatin1();
request.setRawHeader("User-Agent",
QByteArrayLiteral("Qt Location based application"));
request.setRawHeader("User-Token", token);
return request; return request;
} }
QString static const QString WorldStreetMapUrl = QStringLiteral("http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/%1/%2/%3");
EsriWorldStreetMapProvider::_getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager) { QString EsriWorldStreetMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {
Q_UNUSED(networkManager); Q_UNUSED(networkManager)
return QString("http://services.arcgisonline.com/ArcGIS/rest/services/" return WorldStreetMapUrl.arg(zoom).arg(y).arg(x);
"World_Street_Map/MapServer/tile/%1/%2/%3")
.arg(zoom)
.arg(y)
.arg(x);
} }
QString static const QString WorldSatelliteMapUrl = QStringLiteral("http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/%1/%2/%3");
EsriWorldSatelliteMapProvider::_getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager) { QString EsriWorldSatelliteMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {
Q_UNUSED(networkManager); Q_UNUSED(networkManager)
return QString("http://server.arcgisonline.com/ArcGIS/rest/" return WorldSatelliteMapUrl.arg(zoom).arg(y).arg(x);
"services/World_Imagery/MapServer/tile/%1/%2/%3")
.arg(zoom)
.arg(y)
.arg(x);
} }
QString EsriTerrainMapProvider::_getURL(int x, int y, int zoom, static const QString TerrainMapUrl = QStringLiteral("http://server.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/%1/%2/%3");
QNetworkAccessManager* networkManager) {
Q_UNUSED(networkManager); QString EsriTerrainMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {
return QString("http://server.arcgisonline.com/ArcGIS/rest/services/" Q_UNUSED(networkManager)
"World_Terrain_Base/MapServer/tile/%1/%2/%3") return TerrainMapUrl.arg(zoom).arg(y).arg(x);
.arg(zoom)
.arg(y)
.arg(x);
} }
/****************************************************************************
*
* (c) 2009-2019 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#pragma once #pragma once
#include "MapProvider.h" #include "MapProvider.h"
#include <QByteArray>
#include <QMutex>
#include <QNetworkProxy>
#include <QNetworkReply>
#include <QPoint>
#include <QString>
class EsriMapProvider : public MapProvider { class EsriMapProvider : public MapProvider {
Q_OBJECT Q_OBJECT
public: public:
using MapProvider::MapProvider; EsriMapProvider(const quint32 averageSize, const QGeoMapType::MapStyle mapType, QObject* parent = nullptr);
QNetworkRequest getTileURL(int x, int y, int zoom, QNetworkRequest getTileURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
QNetworkAccessManager* networkManager);
}; };
class EsriWorldStreetMapProvider : public EsriMapProvider { class EsriWorldStreetMapProvider : public EsriMapProvider {
Q_OBJECT Q_OBJECT
public: public:
EsriWorldStreetMapProvider(QObject* parent) EsriWorldStreetMapProvider(QObject* parent = nullptr)
: EsriMapProvider(QString(""), QString(""), AVERAGE_TILE_SIZE, : EsriMapProvider(AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent) {}
QGeoMapType::StreetMap, parent) {}
QString _getURL(int x, int y, int zoom, QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
QNetworkAccessManager* networkManager);
}; };
class EsriWorldSatelliteMapProvider : public EsriMapProvider { class EsriWorldSatelliteMapProvider : public EsriMapProvider {
Q_OBJECT Q_OBJECT
public: public:
EsriWorldSatelliteMapProvider(QObject* parent) EsriWorldSatelliteMapProvider(QObject* parent = nullptr)
: EsriMapProvider(QString(""), QString(""), AVERAGE_TILE_SIZE, : EsriMapProvider(AVERAGE_TILE_SIZE, QGeoMapType::SatelliteMapDay, parent) {}
QGeoMapType::SatelliteMapDay, parent) {}
QString _getURL(int x, int y, int zoom, QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
QNetworkAccessManager* networkManager);
}; };
class EsriTerrainMapProvider : public EsriMapProvider { class EsriTerrainMapProvider : public EsriMapProvider {
Q_OBJECT Q_OBJECT
public: public:
EsriTerrainMapProvider(QObject* parent) EsriTerrainMapProvider(QObject* parent = nullptr)
: EsriMapProvider(QString(""), QString(""), AVERAGE_TILE_SIZE, : EsriMapProvider(AVERAGE_TILE_SIZE, QGeoMapType::TerrainMap, parent) {}
QGeoMapType::TerrainMap, parent) {}
QString _getURL(int x, int y, int zoom, QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
QNetworkAccessManager* networkManager);
}; };
/****************************************************************************
*
* (c) 2009-2019 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#include "GenericMapProvider.h" #include "GenericMapProvider.h"
#include "QGCMapEngine.h"
QString StatkartMapProvider::_getURL(int x, int y, int zoom, static const QString StatkartMapUrl = QStringLiteral("http://opencache.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=topo4&zoom=%1&x=%2&y=%3");
QNetworkAccessManager* networkManager) {
Q_UNUSED(networkManager); QString StatkartMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {
return QString("http://opencache.statkart.no/gatekeeper/gk/" Q_UNUSED(networkManager)
"gk.open_gmaps?layers=topo4&zoom=%1&x=%2&y=%3") return StatkartMapUrl.arg(zoom).arg(x).arg(y);
.arg(zoom)
.arg(x)
.arg(y);
} }
QString EniroMapProvider::_getURL(int x, int y, int zoom, static const QString EniroMapUrl = QStringLiteral("http://map.eniro.com/geowebcache/service/tms1.0.0/map/%1/%2/%3.png");
QNetworkAccessManager* networkManager) {
Q_UNUSED(networkManager); QString EniroMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {
return QString("http://map.eniro.com/geowebcache/service/tms1.0.0/map/%1/" Q_UNUSED(networkManager)
"%2/%3.png") return EniroMapUrl.arg(zoom).arg(x).arg((1 << zoom) - 1 - y);
.arg(zoom)
.arg(x)
.arg((1 << zoom) - 1 - y);
} }
QString MapQuestMapMapProvider::_getURL(int x, int y, int zoom, static const QString MapQuestMapUrl = QStringLiteral("http://otile%1.mqcdn.com/tiles/1.0.0/map/%2/%3/%4.jpg");
QNetworkAccessManager* networkManager) {
Q_UNUSED(networkManager); QString MapQuestMapMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {
char letter = "1234"[_getServerNum(x, y, 4)]; Q_UNUSED(networkManager)
return QString("http://otile%1.mqcdn.com/tiles/1.0.0/map/%2/%3/%4.jpg") return MapQuestMapUrl.arg(_getServerNum(x, y, 4)).arg(zoom).arg(x).arg(y);
.arg(letter)
.arg(zoom)
.arg(x)
.arg(y);
} }
QString MapQuestSatMapProvider::_getURL(int x, int y, int zoom, static const QString MapQuestSatUrl = QStringLiteral("http://otile%1.mqcdn.com/tiles/1.0.0/sat/%2/%3/%4.jpg");
QNetworkAccessManager* networkManager) {
Q_UNUSED(networkManager); QString MapQuestSatMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {
char letter = "1234"[_getServerNum(x, y, 4)]; Q_UNUSED(networkManager)
return QString("http://otile%1.mqcdn.com/tiles/1.0.0/sat/%2/%3/%4.jpg") return MapQuestSatUrl.arg(_getServerNum(x, y, 4)).arg(zoom).arg(x).arg(y);
.arg(letter)
.arg(zoom)
.arg(x)
.arg(y);
} }
QString QString VWorldStreetMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {
VWorldStreetMapProvider::_getURL(int x, int y, int zoom, Q_UNUSED(networkManager)
QNetworkAccessManager* networkManager) { const int gap = zoom - 6;
Q_UNUSED(networkManager); const int x_min = int(53 * pow(2, gap));
int gap = zoom - 6; const int x_max = int(55 * pow(2, gap) + (2 * gap - 1));
int x_min = 53 * pow(2, gap); const int y_min = int(22 * pow(2, gap));
int x_max = 55 * pow(2, gap) + (2 * gap - 1); const int y_max = int(26 * pow(2, gap) + (2 * gap - 1));
int y_min = 22 * pow(2, gap);
int y_max = 26 * pow(2, gap) + (2 * gap - 1);
if (zoom > 19) { if (zoom > 19) {
return {}; return QString();
} else if (zoom > 5 && x >= x_min && x <= x_max && y >= y_min && } else if (zoom > 5 && x >= x_min && x <= x_max && y >= y_min && y <= y_max) {
y <= y_max) { return QString(QStringLiteral("http://xdworld.vworld.kr:8080/2d/Base/service/%1/%2/%3.png")).arg(zoom, x, y);
return QString(
"http://xdworld.vworld.kr:8080/2d/Base/service/%1/%2/%3.png")
.arg(zoom)
.arg(x)
.arg(y);
} else { } else {
QString key = _tileXYToQuadKey(x, y, zoom); const QString key = _tileXYToQuadKey(x, y, zoom);
return QString("http://ecn.t%1.tiles.virtualearth.net/tiles/" return QString(QStringLiteral("http://ecn.t%1.tiles.virtualearth.net/tiles/r%2.png?g=%3&mkt=%4"))
"r%2.png?g=%3&mkt=%4") .arg(_getServerNum(x, y, 4)).arg(key, _versionBingMaps, _language);
.arg(_getServerNum(x, y, 4))
.arg(key)
.arg(_versionBingMaps)
.arg(_language);
} }
} }
QString VWorldSatMapProvider::_getURL(int x, int y, int zoom, QString VWorldSatMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {
QNetworkAccessManager* networkManager) { Q_UNUSED(networkManager)
Q_UNUSED(networkManager); const int gap = zoom - 6;
int gap = zoom - 6; const int x_min = int(53 * pow(2, gap));
int x_min = 53 * pow(2, gap); const int x_max = int(55 * pow(2, gap) + (2 * gap - 1));
int x_max = 55 * pow(2, gap) + (2 * gap - 1); const int y_min = int(22 * pow(2, gap));
int y_min = 22 * pow(2, gap); const int y_max = int(26 * pow(2, gap) + (2 * gap - 1));
int y_max = 26 * pow(2, gap) + (2 * gap - 1);
if (zoom > 19) { if (zoom > 19) {
return {}; return QString();
} else if (zoom > 5 && x >= x_min && x <= x_max && y >= y_min && } else if (zoom > 5 && x >= x_min && x <= x_max && y >= y_min && y <= y_max) {
y <= y_max) { return QString("http://xdworld.vworld.kr:8080/2d/Satellite/service/%1/%2/%3.jpeg").arg(zoom, x, y);
return QString("http://xdworld.vworld.kr:8080/2d/Satellite/service/%1/"
"%2/%3.jpeg")
.arg(zoom)
.arg(x)
.arg(y);
} else { } else {
QString key = _tileXYToQuadKey(x, y, zoom); const QString key = _tileXYToQuadKey(x, y, zoom);
return QString("http://ecn.t%1.tiles.virtualearth.net/tiles/" return QString("http://ecn.t%1.tiles.virtualearth.net/tiles/a%2.jpeg?g=%3&mkt=%4")
"a%2.jpeg?g=%3&mkt=%4") .arg(_getServerNum(x, y, 4)).arg(key, _versionBingMaps, _language);
.arg(_getServerNum(x, y, 4))
.arg(key)
.arg(_versionBingMaps)
.arg(_language);
} }
} }
/****************************************************************************
*
* (c) 2009-2019 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#pragma once #pragma once
#include "MapProvider.h" #include "MapProvider.h"
#include <cmath>
#include <QByteArray>
#include <QMutex>
#include <QNetworkProxy>
#include <QNetworkReply>
#include <QPoint>
#include <QString>
class StatkartMapProvider : public MapProvider { class StatkartMapProvider : public MapProvider {
Q_OBJECT Q_OBJECT
public: public:
StatkartMapProvider(QObject* parent) StatkartMapProvider(QObject* parent = nullptr)
: MapProvider(QString("https://www.norgeskart.no/"), QString("png"), : MapProvider(QStringLiteral("https://www.norgeskart.no/"), QStringLiteral("png"),
AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent) {} AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent) {}
QString _getURL(int x, int y, int zoom, QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
QNetworkAccessManager* networkManager);
}; };
class EniroMapProvider : public MapProvider { class EniroMapProvider : public MapProvider {
Q_OBJECT Q_OBJECT
public: public:
EniroMapProvider(QObject* parent) EniroMapProvider(QObject* parent = nullptr)
: MapProvider(QString("https://www.eniro.se/"), QString("png"), : MapProvider(QStringLiteral("https://www.eniro.se/"), QStringLiteral("png"),
AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent) {} AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent) {}
QString _getURL(int x, int y, int zoom, QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
QNetworkAccessManager* networkManager);
}; };
class MapQuestMapMapProvider : public MapProvider { class MapQuestMapMapProvider : public MapProvider {
Q_OBJECT Q_OBJECT
public: public:
MapQuestMapMapProvider(QObject* parent) MapQuestMapMapProvider(QObject* parent = nullptr)
: MapProvider(QString("https://mapquest.com"), QString("jpg"), : MapProvider(QStringLiteral("https://mapquest.com"), QStringLiteral("jpg"),
AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent) {} AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent) {}
QString _getURL(int x, int y, int zoom, QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
QNetworkAccessManager* networkManager);
}; };
class MapQuestSatMapProvider : public MapProvider { class MapQuestSatMapProvider : public MapProvider {
Q_OBJECT Q_OBJECT
public: public:
MapQuestSatMapProvider(QObject* parent) MapQuestSatMapProvider(QObject* parent = nullptr)
: MapProvider(QString("https://mapquest.com"), QString("jpg"), : MapProvider(QStringLiteral("https://mapquest.com"), QStringLiteral("jpg"),
AVERAGE_TILE_SIZE, QGeoMapType::SatelliteMapDay, parent) { AVERAGE_TILE_SIZE, QGeoMapType::SatelliteMapDay, parent) {}
}
QString _getURL(int x, int y, int zoom, QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
QNetworkAccessManager* networkManager);
}; };
class VWorldStreetMapProvider : public MapProvider { class VWorldStreetMapProvider : public MapProvider {
Q_OBJECT Q_OBJECT
public: public:
VWorldStreetMapProvider(QObject* parent) VWorldStreetMapProvider(QObject* parent = nullptr)
: MapProvider(QString("www.vworld.kr"), QString("png"), : MapProvider(QStringLiteral("www.vworld.kr"), QStringLiteral("png"),
AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent) {} AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent) {}
QString _getURL(int x, int y, int zoom, QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
QNetworkAccessManager* networkManager);
private: private:
const QString _versionBingMaps = "563"; const QString _versionBingMaps = QStringLiteral("563");
}; };
class VWorldSatMapProvider : public MapProvider { class VWorldSatMapProvider : public MapProvider {
Q_OBJECT Q_OBJECT
public: public:
VWorldSatMapProvider(QObject* parent) VWorldSatMapProvider(QObject* parent = nullptr)
: MapProvider(QString("www.vworld.kr"), QString("jpg"), : MapProvider(QStringLiteral("www.vworld.kr"), QStringLiteral("jpg"),
AVERAGE_TILE_SIZE, QGeoMapType::SatelliteMapDay, parent) { AVERAGE_TILE_SIZE, QGeoMapType::SatelliteMapDay, parent) {}
}
QString _getURL(int x, int y, int zoom, QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
QNetworkAccessManager* networkManager);
private: private:
const QString _versionBingMaps = "563"; const QString _versionBingMaps = QStringLiteral("563");
}; };
This diff is collapsed.
/****************************************************************************
*
* (c) 2009-2019 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#pragma once #pragma once
#include "MapProvider.h" #include "MapProvider.h"
#include <QByteArray>
#include <QMutex>
#include <QNetworkProxy>
#include <QNetworkReply> #include <QNetworkReply>
#include <QPoint>
#include <QString>
class GoogleMapProvider : public MapProvider { class GoogleMapProvider : public MapProvider {
Q_OBJECT Q_OBJECT
public:
GoogleMapProvider(QString imageFormat, quint32 averageSize, public:
QGeoMapType::MapStyle mapType, QObject* parent); GoogleMapProvider(const QString& imageFormat, const quint32 averageSize,
const QGeoMapType::MapStyle _mapType, QObject* parent = nullptr);
~GoogleMapProvider(); ~GoogleMapProvider();
// Google Specific private slots // Google Specific private slots
private slots: private slots:
void _networkReplyError(QNetworkReply::NetworkError error); void _networkReplyError(QNetworkReply::NetworkError error);
void _googleVersionCompleted(); void _googleVersionCompleted();
void _replyDestroyed(); void _replyDestroyed();
protected: protected:
// Define the url to Request
virtual QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager) = 0;
// Google Specific private methods // 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); void _tryCorrectGoogleVersions(QNetworkAccessManager* networkManager);
// Google Specific attributes // Google Specific attributes
...@@ -57,23 +58,22 @@ class GoogleMapProvider : public MapProvider { ...@@ -57,23 +58,22 @@ class GoogleMapProvider : public MapProvider {
// CycleMap, // CycleMap,
// CustomMap = 100 // CustomMap = 100
const quint32 AVERAGE_GOOGLE_STREET_MAP = 4913; static const quint32 AVERAGE_GOOGLE_STREET_MAP = 4913;
const quint32 AVERAGE_GOOGLE_SAT_MAP = 56887; static const quint32 AVERAGE_GOOGLE_SAT_MAP = 56887;
const quint32 AVERAGE_GOOGLE_TERRAIN_MAP = 19391; static const quint32 AVERAGE_GOOGLE_TERRAIN_MAP = 19391;
// ----------------------------------------------------------- // -----------------------------------------------------------
// Google Street Map // Google Street Map
class GoogleStreetMapProvider : public GoogleMapProvider { class GoogleStreetMapProvider : public GoogleMapProvider {
Q_OBJECT Q_OBJECT
public:
GoogleStreetMapProvider(QObject* parent) public:
: GoogleMapProvider(QString("png"), AVERAGE_GOOGLE_STREET_MAP, GoogleStreetMapProvider(QObject* parent = nullptr)
QGeoMapType::StreetMap, parent) {} : GoogleMapProvider(QStringLiteral("png"), AVERAGE_GOOGLE_STREET_MAP, QGeoMapType::StreetMap, parent) {}
protected: protected:
QString _getURL(int x, int y, int zoom, QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
QNetworkAccessManager* networkManager);
}; };
// ----------------------------------------------------------- // -----------------------------------------------------------
...@@ -81,14 +81,14 @@ class GoogleStreetMapProvider : public GoogleMapProvider { ...@@ -81,14 +81,14 @@ class GoogleStreetMapProvider : public GoogleMapProvider {
class GoogleSatelliteMapProvider : public GoogleMapProvider { class GoogleSatelliteMapProvider : public GoogleMapProvider {
Q_OBJECT Q_OBJECT
public:
GoogleSatelliteMapProvider(QObject* parent) public:
: GoogleMapProvider(QString("jpg"), AVERAGE_GOOGLE_SAT_MAP, GoogleSatelliteMapProvider(QObject* parent = nullptr)
: GoogleMapProvider(QStringLiteral("jpg"), AVERAGE_GOOGLE_SAT_MAP,
QGeoMapType::SatelliteMapDay, parent) {} QGeoMapType::SatelliteMapDay, parent) {}
protected: protected:
QString _getURL(int x, int y, int zoom, QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
QNetworkAccessManager* networkManager);
}; };
// ----------------------------------------------------------- // -----------------------------------------------------------
...@@ -96,14 +96,13 @@ class GoogleSatelliteMapProvider : public GoogleMapProvider { ...@@ -96,14 +96,13 @@ class GoogleSatelliteMapProvider : public GoogleMapProvider {
class GoogleLabelsMapProvider : public GoogleMapProvider { class GoogleLabelsMapProvider : public GoogleMapProvider {
Q_OBJECT Q_OBJECT
public:
GoogleLabelsMapProvider(QObject* parent) public:
: GoogleMapProvider(QString("png"), AVERAGE_TILE_SIZE, GoogleLabelsMapProvider(QObject* parent = nullptr)
QGeoMapType::CustomMap, parent) {} : GoogleMapProvider(QStringLiteral("png"), AVERAGE_TILE_SIZE, QGeoMapType::CustomMap, parent) {}
protected: protected:
QString _getURL(int x, int y, int zoom, QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
QNetworkAccessManager* networkManager);
}; };
// ----------------------------------------------------------- // -----------------------------------------------------------
...@@ -111,14 +110,13 @@ class GoogleLabelsMapProvider : public GoogleMapProvider { ...@@ -111,14 +110,13 @@ class GoogleLabelsMapProvider : public GoogleMapProvider {
class GoogleTerrainMapProvider : public GoogleMapProvider { class GoogleTerrainMapProvider : public GoogleMapProvider {
Q_OBJECT Q_OBJECT
public:
GoogleTerrainMapProvider(QObject* parent) public:
: GoogleMapProvider(QString("png"), AVERAGE_GOOGLE_TERRAIN_MAP, GoogleTerrainMapProvider(QObject* parent = nullptr)
QGeoMapType::TerrainMap, parent) {} : GoogleMapProvider(QStringLiteral("png"), AVERAGE_GOOGLE_TERRAIN_MAP, QGeoMapType::TerrainMap, parent) {}
protected: protected:
QString _getURL(int x, int y, int zoom, QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
QNetworkAccessManager* networkManager);
}; };
// ----------------------------------------------------------- // -----------------------------------------------------------
...@@ -126,12 +124,11 @@ class GoogleTerrainMapProvider : public GoogleMapProvider { ...@@ -126,12 +124,11 @@ class GoogleTerrainMapProvider : public GoogleMapProvider {
class GoogleHybridMapProvider : public GoogleMapProvider { class GoogleHybridMapProvider : public GoogleMapProvider {
Q_OBJECT Q_OBJECT
public:
GoogleHybridMapProvider(QObject* parent) public:
: GoogleMapProvider(QString("png"), AVERAGE_GOOGLE_SAT_MAP, GoogleHybridMapProvider(QObject* parent = nullptr)
QGeoMapType::HybridMap, parent) {} : GoogleMapProvider(QStringLiteral("png"), AVERAGE_GOOGLE_SAT_MAP, QGeoMapType::HybridMap, parent) {}
protected: protected:
QString _getURL(int x, int y, int zoom, QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
QNetworkAccessManager* networkManager);
}; };
...@@ -34,9 +34,9 @@ QNetworkRequest MapProvider::getTileURL(const int x, const int y, const int zoom ...@@ -34,9 +34,9 @@ QNetworkRequest MapProvider::getTileURL(const int x, const int y, const int zoom
return request; return request;
} }
request.setUrl(QUrl(url)); request.setUrl(QUrl(url));
request.setRawHeader("Accept", "*/*"); request.setRawHeader(QByteArrayLiteral("Accept"), QByteArrayLiteral("*/*"));
request.setRawHeader("Referrer", _referrer.toUtf8()); request.setRawHeader(QByteArrayLiteral("Referrer"), _referrer.toUtf8());
request.setRawHeader("User-Agent", _userAgent); request.setRawHeader(QByteArrayLiteral("User-Agent"), _userAgent);
return request; return request;
} }
...@@ -56,7 +56,7 @@ QString MapProvider::getImageFormat(const QByteArray& image) const { ...@@ -56,7 +56,7 @@ QString MapProvider::getImageFormat(const QByteArray& image) const {
return format; 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; QString quadKey;
for (int i = levelOfDetail; i > 0; i--) { for (int i = levelOfDetail; i > 0; i--) {
char digit = '0'; char digit = '0';
...@@ -73,7 +73,7 @@ QString MapProvider::_tileXYToQuadKey(const int tileX, const int tileY, const in ...@@ -73,7 +73,7 @@ QString MapProvider::_tileXYToQuadKey(const int tileX, const int tileY, const in
return quadKey; 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; return (x + 2 * y) % max;
} }
...@@ -89,7 +89,9 @@ int MapProvider::lat2tileY(const double lat, const int z) const { ...@@ -89,7 +89,9 @@ int MapProvider::lat2tileY(const double lat, const int z) const {
2.0 * pow(2.0, z))); 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, QGCTileSet MapProvider::getTileCount(const int zoom, const double topleftLon,
const double topleftLat, const double bottomRightLon, const double topleftLat, const double bottomRightLon,
......
...@@ -21,7 +21,7 @@ static const unsigned char pngSignature[] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A ...@@ -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 jpegSignature[] = {0xFF, 0xD8, 0xFF, 0x00};
static const unsigned char gifSignature[] = {0x47, 0x49, 0x46, 0x38, 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 QNetworkRequest;
class QNetworkAccessManager; class QNetworkAccessManager;
...@@ -31,9 +31,9 @@ class MapProvider : public QObject { ...@@ -31,9 +31,9 @@ class MapProvider : public QObject {
public: public:
MapProvider(const QString& referrer, const QString& imageFormat, const quint32 averageSize, 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; QString getImageFormat(const QByteArray& image) const;
...@@ -45,15 +45,15 @@ public: ...@@ -45,15 +45,15 @@ public:
virtual int lat2tileY(const double lat, const int z) const; 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, virtual QGCTileSet getTileCount(const int zoom, const double topleftLon,
const double topleftLat, const double bottomRightLon, const double topleftLat, const double bottomRightLon,
const double bottomRightLat) const; const double bottomRightLat) const;
protected: protected:
QString _tileXYToQuadKey(const int tileX, const int tileY, const int levelOfDetail); QString _tileXYToQuadKey(const int tileX, const int tileY, const int levelOfDetail) const;
int _getServerNum(const int x, const int y, const int max); int _getServerNum(const int x, const int y, const int max) const;
// Define the url to Request // Define the url to Request
virtual QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) = 0; virtual QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) = 0;
......
...@@ -3,33 +3,19 @@ ...@@ -3,33 +3,19 @@
#include "QGCMapEngine.h" #include "QGCMapEngine.h"
#include "SettingsManager.h" #include "SettingsManager.h"
MapboxMapProvider::MapboxMapProvider(QString mapName, quint32 averageSize, static const QString MapBoxUrl = QStringLiteral("https://api.mapbox.com/v4/%1/%2/%3/%4.jpg80?access_token=%5");
QGeoMapType::MapStyle mapType,
QObject* parent) MapboxMapProvider::MapboxMapProvider(const QString &mapName, const quint32 averageSize, const QGeoMapType::MapStyle mapType, QObject* parent)
: MapProvider(QString("https://www.mapbox.com/"), QString("jpg"), : MapProvider(QStringLiteral("https://www.mapbox.com/"), QStringLiteral("jpg"), averageSize, mapType, parent)
averageSize, mapType, parent), mapboxName(mapName) { , _mapboxName(mapName)
{
} }
QString QString MapboxMapProvider::_getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {
MapboxMapProvider::_getURL(int x, int y, int zoom, Q_UNUSED(networkManager)
QNetworkAccessManager* networkManager) { const QString mapBoxToken = qgcApp()->toolbox()->settingsManager()->appSettings()->mapboxToken()->rawValue().toString();
Q_UNUSED(networkManager);
QString mapBoxToken = qgcApp()
->toolbox()
->settingsManager()
->appSettings()
->mapboxToken()
->rawValue()
.toString();
if (!mapBoxToken.isEmpty()) { if (!mapBoxToken.isEmpty()) {
QString server = "https://api.mapbox.com/v4/"; return MapBoxUrl.arg(_mapboxName).arg(zoom).arg(x).arg(y).arg(mapBoxToken);
server += mapboxName;
server += QString("/%1/%2/%3.jpg80?access_token=%4")
.arg(zoom)
.arg(x)
.arg(y)
.arg(mapBoxToken);
return server;
} }
return QString(""); return QString();
} }
/****************************************************************************
*
* (c) 2009-2019 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#pragma once #pragma once
#include "MapProvider.h" #include "MapProvider.h"
#include <QByteArray> static const quint32 AVERAGE_MAPBOX_SAT_MAP = 15739;
#include <QMutex> static const quint32 AVERAGE_MAPBOX_STREET_MAP = 5648;
#include <QNetworkProxy>
#include <QNetworkReply>
#include <QPoint>
#include <QString>
const quint32 AVERAGE_MAPBOX_SAT_MAP = 15739;
const quint32 AVERAGE_MAPBOX_STREET_MAP = 5648;
class MapboxMapProvider : public MapProvider { class MapboxMapProvider : public MapProvider {
Q_OBJECT Q_OBJECT
public:
MapboxMapProvider(QString mapName, quint32 averageSize, public:
QGeoMapType::MapStyle mapType, QObject* parent); MapboxMapProvider(const QString& mapName, const quint32 averageSize, const QGeoMapType::MapStyle mapType, QObject* parent = nullptr);
QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager); protected:
protected: QString _getURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) override;
QString mapboxName;
QString _mapboxName;
}; };
class MapboxStreetMapProvider : public MapboxMapProvider { class MapboxStreetMapProvider : public MapboxMapProvider {
Q_OBJECT Q_OBJECT
public:
MapboxStreetMapProvider(QObject* parent) public:
: MapboxMapProvider("mapbox.streets", AVERAGE_MAPBOX_STREET_MAP, MapboxStreetMapProvider(QObject* parent = nullptr)
: MapboxMapProvider(QStringLiteral("mapbox.streets"), AVERAGE_MAPBOX_STREET_MAP,
QGeoMapType::StreetMap, parent) {} QGeoMapType::StreetMap, parent) {}
}; };
class MapboxLightMapProvider : public MapboxMapProvider { class MapboxLightMapProvider : public MapboxMapProvider {
Q_OBJECT Q_OBJECT
public:
MapboxLightMapProvider(QObject* parent) public:
: MapboxMapProvider("mapbox.light", AVERAGE_TILE_SIZE, MapboxLightMapProvider(QObject* parent = nullptr)
: MapboxMapProvider(QStringLiteral("mapbox.light"), AVERAGE_TILE_SIZE,
QGeoMapType::CustomMap, parent) {} QGeoMapType::CustomMap, parent) {}
}; };
class MapboxDarkMapProvider : public MapboxMapProvider { class MapboxDarkMapProvider : public MapboxMapProvider {
Q_OBJECT Q_OBJECT
public:
MapboxDarkMapProvider(QObject* parent) public:
: MapboxMapProvider("mapbox.dark", AVERAGE_TILE_SIZE, MapboxDarkMapProvider(QObject* parent = nullptr)
: MapboxMapProvider(QStringLiteral("mapbox.dark"), AVERAGE_TILE_SIZE,
QGeoMapType::CustomMap, parent) {} QGeoMapType::CustomMap, parent) {}
}; };
class MapboxSatelliteMapProvider : public MapboxMapProvider { class MapboxSatelliteMapProvider : public MapboxMapProvider {
Q_OBJECT Q_OBJECT
public:
MapboxSatelliteMapProvider(QObject* parent) public:
: MapboxMapProvider("mapbox.satellite", AVERAGE_MAPBOX_SAT_MAP, MapboxSatelliteMapProvider(QObject* parent = nullptr)
: MapboxMapProvider(QStringLiteral("mapbox.satellite"), AVERAGE_MAPBOX_SAT_MAP,
QGeoMapType::SatelliteMapDay, parent) {} QGeoMapType::SatelliteMapDay, parent) {}
}; };
class MapboxHybridMapProvider : public MapboxMapProvider { class MapboxHybridMapProvider : public MapboxMapProvider {
Q_OBJECT Q_OBJECT
public:
MapboxHybridMapProvider(QObject* parent) public:
: MapboxMapProvider("mapbox.hybrid", AVERAGE_MAPBOX_SAT_MAP, MapboxHybridMapProvider(QObject* parent = nullptr)
: MapboxMapProvider(QStringLiteral("mapbox.hybrid"), AVERAGE_MAPBOX_SAT_MAP,
QGeoMapType::HybridMap, parent) {} QGeoMapType::HybridMap, parent) {}
}; };
class MapboxWheatPasteMapProvider : public MapboxMapProvider { class MapboxWheatPasteMapProvider : public MapboxMapProvider {
Q_OBJECT Q_OBJECT
public:
MapboxWheatPasteMapProvider(QObject* parent) public:
: MapboxMapProvider("mapbox.wheatpaste", AVERAGE_TILE_SIZE, MapboxWheatPasteMapProvider(QObject* parent = nullptr)
: MapboxMapProvider(QStringLiteral("mapbox.wheatpaste"), AVERAGE_TILE_SIZE,
QGeoMapType::CustomMap, parent) {} QGeoMapType::CustomMap, parent) {}
}; };
class MapboxStreetsBasicMapProvider : public MapboxMapProvider { class MapboxStreetsBasicMapProvider : public MapboxMapProvider {
Q_OBJECT Q_OBJECT
public:
MapboxStreetsBasicMapProvider(QObject* parent) public:
: MapboxMapProvider("mapbox.streets-basic", AVERAGE_TILE_SIZE, MapboxStreetsBasicMapProvider(QObject* parent = nullptr)
: MapboxMapProvider(QStringLiteral("mapbox.streets-basic"), AVERAGE_TILE_SIZE,
QGeoMapType::StreetMap, parent) {} QGeoMapType::StreetMap, parent) {}
}; };
class MapboxComicMapProvider : public MapboxMapProvider { class MapboxComicMapProvider : public MapboxMapProvider {
Q_OBJECT Q_OBJECT
public:
MapboxComicMapProvider(QObject* parent) public:
: MapboxMapProvider("mapbox.comic", AVERAGE_TILE_SIZE, MapboxComicMapProvider(QObject* parent = nullptr)
: MapboxMapProvider(QStringLiteral("mapbox.comic"), AVERAGE_TILE_SIZE,
QGeoMapType::CustomMap, parent) {} QGeoMapType::CustomMap, parent) {}
}; };
class MapboxOutdoorsMapProvider : public MapboxMapProvider { class MapboxOutdoorsMapProvider : public MapboxMapProvider {
Q_OBJECT Q_OBJECT
public:
MapboxOutdoorsMapProvider(QObject* parent) public:
: MapboxMapProvider("mapbox.outdoors", AVERAGE_TILE_SIZE, MapboxOutdoorsMapProvider(QObject* parent = nullptr)
: MapboxMapProvider(QStringLiteral("mapbox.outdoors"), AVERAGE_TILE_SIZE,
QGeoMapType::CustomMap, parent) {} QGeoMapType::CustomMap, parent) {}
}; };
class MapboxRunBikeHikeMapProvider : public MapboxMapProvider { class MapboxRunBikeHikeMapProvider : public MapboxMapProvider {
Q_OBJECT Q_OBJECT
public:
MapboxRunBikeHikeMapProvider(QObject* parent) public:
: MapboxMapProvider("mapbox.run-bike-hike", AVERAGE_MAPBOX_STREET_MAP, MapboxRunBikeHikeMapProvider(QObject* parent = nullptr)
: MapboxMapProvider(QStringLiteral("mapbox.run-bike-hike"), AVERAGE_MAPBOX_STREET_MAP,
QGeoMapType::CycleMap, parent) {} QGeoMapType::CycleMap, parent) {}
}; };
class MapboxPencilMapProvider : public MapboxMapProvider { class MapboxPencilMapProvider : public MapboxMapProvider {
Q_OBJECT Q_OBJECT
public:
MapboxPencilMapProvider(QObject* parent) public:
: MapboxMapProvider("mapbox.pencil", AVERAGE_TILE_SIZE, MapboxPencilMapProvider(QObject* parent = nullptr)
: MapboxMapProvider(QStringLiteral("mapbox.pencil"), AVERAGE_TILE_SIZE,
QGeoMapType::CustomMap, parent) {} QGeoMapType::CustomMap, parent) {}
}; };
class MapboxPiratesMapProvider : public MapboxMapProvider { class MapboxPiratesMapProvider : public MapboxMapProvider {
Q_OBJECT Q_OBJECT
public:
MapboxPiratesMapProvider(QObject* parent) public:
: MapboxMapProvider("mapbox.pirates", AVERAGE_TILE_SIZE, MapboxPiratesMapProvider(QObject* parent = nullptr)
: MapboxMapProvider(QStringLiteral("mapbox.pirates"), AVERAGE_TILE_SIZE,
QGeoMapType::CustomMap, parent) {} QGeoMapType::CustomMap, parent) {}
}; };
class MapboxEmeraldMapProvider : public MapboxMapProvider { class MapboxEmeraldMapProvider : public MapboxMapProvider {
Q_OBJECT Q_OBJECT
public:
MapboxEmeraldMapProvider(QObject* parent) public:
: MapboxMapProvider("mapbox.emerald", AVERAGE_TILE_SIZE, MapboxEmeraldMapProvider(QObject* parent = nullptr)
: MapboxMapProvider(QStringLiteral("mapbox.emerald"), AVERAGE_TILE_SIZE,
QGeoMapType::CustomMap, parent) {} QGeoMapType::CustomMap, parent) {}
}; };
class MapboxHighContrastMapProvider : public MapboxMapProvider { class MapboxHighContrastMapProvider : public MapboxMapProvider {
Q_OBJECT Q_OBJECT
public:
MapboxHighContrastMapProvider(QObject* parent) public:
: MapboxMapProvider("mapbox.high-contrast", AVERAGE_TILE_SIZE, MapboxHighContrastMapProvider(QObject* parent = nullptr)
: MapboxMapProvider(QStringLiteral("mapbox.high-contrast"), AVERAGE_TILE_SIZE,
QGeoMapType::CustomMap, parent) {} QGeoMapType::CustomMap, parent) {}
}; };
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment