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"
StatkartMapProvider::StatkartMapProvider(QObject* parent)
: MapProvider(QString("https://www.norgeskart.no/"), QString("png"),
AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent) {}
StatkartMapProvider::~StatkartMapProvider() {}
#include "GenericMapProvider.h"
QString StatkartMapProvider::_getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager) {
......@@ -21,3 +11,12 @@ QString StatkartMapProvider::_getURL(int x, int y, int zoom,
.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 @@
#include <QString>
class StatkartMapProvider : public MapProvider {
Q_OBJECT
public:
StatkartMapProvider(QObject* parent);
~StatkartMapProvider();
StatkartMapProvider(QObject* parent)
: MapProvider(QString("https://www.norgeskart.no/"), QString("png"),
AVERAGE_TILE_SIZE, QGeoMapType::StreetMap, parent) {}
protected:
QString _getURL(int x, int y, int zoom,
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,
static const unsigned char jpegSignature[] = {0xFF, 0xD8, 0xFF, 0x00};
static const unsigned char gifSignature[] = {0x47, 0x49, 0x46, 0x38, 0x00};
const quint32 AVERAGE_MAPBOX_SAT_MAP = 15739;
const quint32 AVERAGE_MAPBOX_STREET_MAP = 5648;
const quint32 AVERAGE_TILE_SIZE = 13652;
const quint32 AVERAGE_AIRMAP_ELEV_SIZE = 2786;
const quint32 AVERAGE_MAPBOX_SAT_MAP = 15739;
const quint32 AVERAGE_MAPBOX_STREET_MAP = 5648;
const quint32 AVERAGE_TILE_SIZE = 13652;
const quint32 AVERAGE_AIRMAP_ELEV_SIZE = 2786;
class MapProvider : public QObject {
Q_OBJECT
public:
MapProvider(QString referrer, QString imageFormat, quint32 averageSize,
QGeoMapType::MapStyle _mapType = QGeoMapType::CustomMap,
QObject* parent = nullptr);
MapProvider(
QString referrer, QString imageFormat, quint32 averageSize,
QGeoMapType::MapStyle _mapType = QGeoMapType::CustomMap, QObject* parent = nullptr);
QNetworkRequest getTileURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager);
QString getImageFormat(const QByteArray& image);
quint32 getAverageSize() { return _averageSize; }
quint32 getAverageSize(){return _averageSize;}
QGeoMapType::MapStyle getMapStyle() { return _mapType; }
QGeoMapType::MapStyle getMapStyle(){return _mapType;}
protected:
QString _tileXYToQuadKey(int tileX, int tileY, int levelOfDetail);
int _getServerNum(int x, int y, int max);
// Define Referrer for Request RawHeader
QString _referrer;
QString _imageFormat;
quint32 _averageSize;
QByteArray _userAgent;
QString _language;
QString _referrer;
QString _imageFormat;
quint32 _averageSize;
QByteArray _userAgent;
QString _language;
QGeoMapType::MapStyle _mapType;
// Define the url to Request
......
......@@ -25,7 +25,8 @@ HEADERS += \
$$PWD/MapProvider.h \
$$PWD/GoogleMapProvider.h \
$$PWD/BingMapProvider.h \
$$PWD/StatkartMapProvider.h \
$$PWD/GenericMapProvider.h \
$$PWD/EsriMapProvider.h \
SOURCES += \
$$PWD/QGCMapEngine.cpp \
......@@ -41,7 +42,8 @@ SOURCES += \
$$PWD/MapProvider.cpp \
$$PWD/GoogleMapProvider.cpp \
$$PWD/BingMapProvider.cpp \
$$PWD/StatkartMapProvider.cpp \
$$PWD/GenericMapProvider.cpp \
$$PWD/EsriMapProvider.cpp \
OTHER_FILES += \
$$PWD/qgc_maps_plugin.json
......@@ -37,19 +37,27 @@ UrlFactory::UrlFactory() : _timeout(5 * 1000) {
// BingMaps
//_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
_providersTable["Google Street Map"] = new GoogleStreetMapProvider(this);
_providersTable["Google Satellite"] = new GoogleSatelliteMapProvider(this);
_providersTable["Google Terrain"] = new GoogleTerrainMapProvider(this);
_providersTable["Google Labels"] = new GoogleTerrainMapProvider(this);
_providersTable["Google Satellite"] = new GoogleSatelliteMapProvider(this);
_providersTable["Google Terrain"] = new GoogleTerrainMapProvider(this);
_providersTable["Google Labels"] = new GoogleTerrainMapProvider(this);
#endif
_providersTable["Bing Road"] = new BingRoadMapProvider(this);
_providersTable["Bing Satellite"] = new BingSatelliteMapProvider(this);
_providersTable["Bing Hybrid"] = new BingHybridMapProvider(this);
_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) {
......@@ -219,7 +227,6 @@ UrlFactory::_getURL(QString type, int x, int y, int zoom, QNetworkAccessManager*
break;
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;
/*
......@@ -274,11 +281,6 @@ UrlFactory::_getURL(QString type, int x, int y, int zoom, QNetworkAccessManager*
break;
*/
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 MapboxLight:
......
......@@ -18,7 +18,8 @@
#include "GoogleMapProvider.h"
#include "BingMapProvider.h"
#include "StatkartMapProvider.h"
#include "GenericMapProvider.h"
#include "EsriMapProvider.h"
#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