Commit 671987ba authored by Pierre TILAK's avatar Pierre TILAK

Create generic, add Eniro and Esri

parent 8313f8e8
#include "EsriMapProvider.h"
#include "QGCApplication.h"
#include "QGCMapEngine.h"
#include "SettingsManager.h"
QNetworkRequest
EsriMapProvider::getTileURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager) {
//-- Build URL
QNetworkRequest request;
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);
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);
}
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);
}
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);
}
#pragma once
#include "MapProvider.h"
#include <QByteArray>
#include <QMutex>
#include <QNetworkProxy>
#include <QNetworkReply>
#include <QPoint>
#include <QString>
class EsriMapProvider : public MapProvider {
Q_OBJECT
public:
using MapProvider::MapProvider;
QNetworkRequest getTileURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager);
};
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);
};
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);
};
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);
};
#include "StatkartMapProvider.h"
#if defined(DEBUG_GOOGLE_MAPS)
#include <QFile>
#include <QStandardPaths>
#endif
#include "QGCMapEngine.h" #include "QGCMapEngine.h"
#include "GenericMapProvider.h"
StatkartMapProvider::StatkartMapProvider(QObject* parent)
: MapProvider(QString("https://www.norgeskart.no/"), QString("png"),
AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent) {}
StatkartMapProvider::~StatkartMapProvider() {}
QString StatkartMapProvider::_getURL(int x, int y, int zoom, QString StatkartMapProvider::_getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager) { QNetworkAccessManager* networkManager) {
...@@ -21,3 +11,12 @@ QString StatkartMapProvider::_getURL(int x, int y, int zoom, ...@@ -21,3 +11,12 @@ QString StatkartMapProvider::_getURL(int x, int y, int zoom,
.arg(y); .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);
}
...@@ -10,14 +10,23 @@ ...@@ -10,14 +10,23 @@
#include <QString> #include <QString>
class StatkartMapProvider : public MapProvider { class StatkartMapProvider : public MapProvider {
Q_OBJECT Q_OBJECT
public: public:
StatkartMapProvider(QObject* parent); StatkartMapProvider(QObject* parent)
~StatkartMapProvider(); : MapProvider(QString("https://www.norgeskart.no/"), QString("png"),
AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent) {}
protected:
QString _getURL(int x, int y, int zoom, QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager); QNetworkAccessManager* networkManager);
}; };
class EniroMapProvider : public MapProvider {
Q_OBJECT
public:
EniroMapProvider(QObject* parent)
: MapProvider(QString("https://www.eniro.se/"), QString("png"),
AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent) {}
QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager);
};
...@@ -11,37 +11,37 @@ static const unsigned char pngSignature[] = {0x89, 0x50, 0x4E, 0x47, 0x0D, ...@@ -11,37 +11,37 @@ static const unsigned char pngSignature[] = {0x89, 0x50, 0x4E, 0x47, 0x0D,
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_MAPBOX_SAT_MAP = 15739; const quint32 AVERAGE_MAPBOX_SAT_MAP = 15739;
const quint32 AVERAGE_MAPBOX_STREET_MAP = 5648; const quint32 AVERAGE_MAPBOX_STREET_MAP = 5648;
const quint32 AVERAGE_TILE_SIZE = 13652; const quint32 AVERAGE_TILE_SIZE = 13652;
const quint32 AVERAGE_AIRMAP_ELEV_SIZE = 2786; const quint32 AVERAGE_AIRMAP_ELEV_SIZE = 2786;
class MapProvider : public QObject { class MapProvider : public QObject {
Q_OBJECT Q_OBJECT
public: public:
MapProvider(QString referrer, QString imageFormat, quint32 averageSize, MapProvider(
QGeoMapType::MapStyle _mapType = QGeoMapType::CustomMap, QString referrer, QString imageFormat, quint32 averageSize,
QObject* parent = nullptr); QGeoMapType::MapStyle _mapType = QGeoMapType::CustomMap, QObject* parent = nullptr);
QNetworkRequest getTileURL(int x, int y, int zoom, QNetworkRequest getTileURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager); QNetworkAccessManager* networkManager);
QString getImageFormat(const QByteArray& image); QString getImageFormat(const QByteArray& image);
quint32 getAverageSize() { return _averageSize; } quint32 getAverageSize(){return _averageSize;}
QGeoMapType::MapStyle getMapStyle() { return _mapType; } QGeoMapType::MapStyle getMapStyle(){return _mapType;}
protected: protected:
QString _tileXYToQuadKey(int tileX, int tileY, int levelOfDetail); QString _tileXYToQuadKey(int tileX, int tileY, int levelOfDetail);
int _getServerNum(int x, int y, int max); int _getServerNum(int x, int y, int max);
// Define Referrer for Request RawHeader // Define Referrer for Request RawHeader
QString _referrer; QString _referrer;
QString _imageFormat; QString _imageFormat;
quint32 _averageSize; quint32 _averageSize;
QByteArray _userAgent; QByteArray _userAgent;
QString _language; QString _language;
QGeoMapType::MapStyle _mapType; QGeoMapType::MapStyle _mapType;
// Define the url to Request // Define the url to Request
......
...@@ -25,7 +25,8 @@ HEADERS += \ ...@@ -25,7 +25,8 @@ HEADERS += \
$$PWD/MapProvider.h \ $$PWD/MapProvider.h \
$$PWD/GoogleMapProvider.h \ $$PWD/GoogleMapProvider.h \
$$PWD/BingMapProvider.h \ $$PWD/BingMapProvider.h \
$$PWD/StatkartMapProvider.h \ $$PWD/GenericMapProvider.h \
$$PWD/EsriMapProvider.h \
SOURCES += \ SOURCES += \
$$PWD/QGCMapEngine.cpp \ $$PWD/QGCMapEngine.cpp \
...@@ -41,7 +42,8 @@ SOURCES += \ ...@@ -41,7 +42,8 @@ SOURCES += \
$$PWD/MapProvider.cpp \ $$PWD/MapProvider.cpp \
$$PWD/GoogleMapProvider.cpp \ $$PWD/GoogleMapProvider.cpp \
$$PWD/BingMapProvider.cpp \ $$PWD/BingMapProvider.cpp \
$$PWD/StatkartMapProvider.cpp \ $$PWD/GenericMapProvider.cpp \
$$PWD/EsriMapProvider.cpp \
OTHER_FILES += \ OTHER_FILES += \
$$PWD/qgc_maps_plugin.json $$PWD/qgc_maps_plugin.json
...@@ -37,19 +37,27 @@ UrlFactory::UrlFactory() : _timeout(5 * 1000) { ...@@ -37,19 +37,27 @@ UrlFactory::UrlFactory() : _timeout(5 * 1000) {
// BingMaps // BingMaps
//_versionBingMaps = "563"; //_versionBingMaps = "563";
// Warning : in _providersTable, keys needs to follow this format : "Provider Type" // Warning : in _providersTable, keys needs to follow this format :
// "Provider Type"
#ifndef QGC_NO_GOOGLE_MAPS #ifndef QGC_NO_GOOGLE_MAPS
_providersTable["Google Street Map"] = new GoogleStreetMapProvider(this); _providersTable["Google Street Map"] = new GoogleStreetMapProvider(this);
_providersTable["Google Satellite"] = new GoogleSatelliteMapProvider(this); _providersTable["Google Satellite"] = new GoogleSatelliteMapProvider(this);
_providersTable["Google Terrain"] = new GoogleTerrainMapProvider(this); _providersTable["Google Terrain"] = new GoogleTerrainMapProvider(this);
_providersTable["Google Labels"] = new GoogleTerrainMapProvider(this); _providersTable["Google Labels"] = new GoogleTerrainMapProvider(this);
#endif #endif
_providersTable["Bing Road"] = new BingRoadMapProvider(this); _providersTable["Bing Road"] = new BingRoadMapProvider(this);
_providersTable["Bing Satellite"] = new BingSatelliteMapProvider(this); _providersTable["Bing Satellite"] = new BingSatelliteMapProvider(this);
_providersTable["Bing Hybrid"] = new BingHybridMapProvider(this); _providersTable["Bing Hybrid"] = new BingHybridMapProvider(this);
_providersTable["Statkart Topo"] = new StatkartMapProvider(this); _providersTable["Statkart Topo"] = new StatkartMapProvider(this);
_providersTable["Eniro Topo"] = new EniroMapProvider(this);
// To be add later on Token entry !
//_providersTable["Esri World Street"] = new EsriWorldStreetMapProvider(this);
//_providersTable["Esri World Satellite"] = new EsriWorldSatelliteMapProvider(this);
//_providersTable["Esri Terrain"] = new EsriTerrainMapProvider(this);
} }
void UrlFactory::registerProvider(QString name, MapProvider* provider) { void UrlFactory::registerProvider(QString name, MapProvider* provider) {
...@@ -219,7 +227,6 @@ UrlFactory::_getURL(QString type, int x, int y, int zoom, QNetworkAccessManager* ...@@ -219,7 +227,6 @@ UrlFactory::_getURL(QString type, int x, int y, int zoom, QNetworkAccessManager*
break; break;
case EniroTopo: case EniroTopo:
{ {
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);
} }
break; break;
/* /*
...@@ -274,11 +281,6 @@ UrlFactory::_getURL(QString type, int x, int y, int zoom, QNetworkAccessManager* ...@@ -274,11 +281,6 @@ UrlFactory::_getURL(QString type, int x, int y, int zoom, QNetworkAccessManager*
break; break;
*/ */
case EsriWorldStreet: case EsriWorldStreet:
return QString("http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/%1/%2/%3").arg(zoom).arg(y).arg(x);
case EsriWorldSatellite:
return QString("http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/%1/%2/%3").arg(zoom).arg(y).arg(x);
case EsriTerrain:
return QString("http://server.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/%1/%2/%3").arg(zoom).arg(y).arg(x);
case MapboxStreets: case MapboxStreets:
case MapboxLight: case MapboxLight:
......
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
#include "GoogleMapProvider.h" #include "GoogleMapProvider.h"
#include "BingMapProvider.h" #include "BingMapProvider.h"
#include "StatkartMapProvider.h" #include "GenericMapProvider.h"
#include "EsriMapProvider.h"
#define MAX_MAP_ZOOM (20.0) #define MAX_MAP_ZOOM (20.0)
......
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