Commit 8313f8e8 authored by Pierre TILAK's avatar Pierre TILAK

Add Statkart

parent 34abc516
#include "BingMapProvider.h"
#if defined(DEBUG_GOOGLE_MAPS)
#include <QFile>
#include <QStandardPaths>
#endif
#include "QGCMapEngine.h"
BingMapProvider::BingMapProvider(quint32 averageSize,
QGeoMapType::MapStyle mapType, QObject* parent)
: MapProvider(QString("https://www.bing.com/maps/"), QString("png"),
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);
}
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);
}
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);
}
#pragma once
#include "MapProvider.h"
#include <QByteArray>
#include <QMutex>
#include <QNetworkProxy>
#include <QNetworkReply>
#include <QPoint>
#include <QString>
class BingMapProvider : public MapProvider {
Q_OBJECT
public:
BingMapProvider(quint32 averageSize, QGeoMapType::MapStyle mapType,
QObject* parent);
~BingMapProvider();
protected:
// Define the url to Request
virtual QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager) = 0;
const QString _versionBingMaps = "563";
};
const quint32 AVERAGE_BING_STREET_MAP = 1297;
const quint32 AVERAGE_BING_SAT_MAP = 19597;
// -----------------------------------------------------------
// Bing Road Map
class BingRoadMapProvider : public BingMapProvider {
Q_OBJECT
public:
BingRoadMapProvider(QObject* parent)
: BingMapProvider(AVERAGE_BING_STREET_MAP, QGeoMapType::StreetMap,
parent) {}
protected:
QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager);
};
// -----------------------------------------------------------
// Bing Satellite Map
class BingSatelliteMapProvider : public BingMapProvider {
Q_OBJECT
public:
BingSatelliteMapProvider(QObject* parent)
: BingMapProvider(AVERAGE_BING_SAT_MAP, QGeoMapType::SatelliteMapDay,
parent) {}
protected:
QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager);
};
// -----------------------------------------------------------
// Bing Hybrid Map
class BingHybridMapProvider : public BingMapProvider {
Q_OBJECT
public:
BingHybridMapProvider(QObject* parent)
: BingMapProvider(AVERAGE_BING_SAT_MAP, QGeoMapType::HybridMap,
parent) {}
protected:
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,6 +25,7 @@ HEADERS += \
$$PWD/MapProvider.h \
$$PWD/GoogleMapProvider.h \
$$PWD/BingMapProvider.h \
$$PWD/StatkartMapProvider.h \
SOURCES += \
$$PWD/QGCMapEngine.cpp \
......@@ -40,6 +41,7 @@ SOURCES += \
$$PWD/MapProvider.cpp \
$$PWD/GoogleMapProvider.cpp \
$$PWD/BingMapProvider.cpp \
$$PWD/StatkartMapProvider.cpp \
OTHER_FILES += \
$$PWD/qgc_maps_plugin.json
......@@ -48,6 +48,8 @@ UrlFactory::UrlFactory() : _timeout(5 * 1000) {
_providersTable["Bing Road"] = new BingRoadMapProvider(this);
_providersTable["Bing Satellite"] = new BingSatelliteMapProvider(this);
_providersTable["Bing Hybrid"] = new BingHybridMapProvider(this);
_providersTable["Statkart Topo"] = new StatkartMapProvider(this);
}
void UrlFactory::registerProvider(QString name, MapProvider* provider) {
......@@ -88,11 +90,6 @@ QString UrlFactory::getImageFormat(QString type, const QByteArray& image) {
// format = "gif";
// else {
// switch (type) {
// case GoogleMap:
// case GoogleLabels:
// case GoogleTerrain:
// case GoogleHybrid:
// case BingMap:
// case StatkartTopo:
// format = "png";
// break;
......
......@@ -18,6 +18,7 @@
#include "GoogleMapProvider.h"
#include "BingMapProvider.h"
#include "StatkartMapProvider.h"
#define MAX_MAP_ZOOM (20.0)
......
#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() {}
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);
}
#pragma once
#include "MapProvider.h"
#include <QByteArray>
#include <QMutex>
#include <QNetworkProxy>
#include <QNetworkReply>
#include <QPoint>
#include <QString>
class StatkartMapProvider : public MapProvider {
Q_OBJECT
public:
StatkartMapProvider(QObject* parent);
~StatkartMapProvider();
protected:
QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager);
};
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