Commit cf560e2c authored by Pierre TILAK's avatar Pierre TILAK

Use Hash table in QGeoTiledMappingManagerEngineQGC

parent 9da70e37
......@@ -5,11 +5,10 @@
#endif
#include "QGCMapEngine.h"
#define AVERAGE_GOOGLE_STREET_MAP 4913
GoogleMapProvider::GoogleMapProvider(QObject* parent)
GoogleMapProvider::GoogleMapProvider(quint32 averageSize, QGeoMapType::MapStyle mapType ,QObject* parent)
: MapProvider(QString("https://www.google.com/maps/preview"),
QString("png"), quint32(AVERAGE_GOOGLE_STREET_MAP), parent),
QString("png"), averageSize, mapType, parent),
_googleVersionRetrieved(false), _googleReply(nullptr) {
// Google version strings
......@@ -127,7 +126,7 @@ void GoogleMapProvider::_tryCorrectGoogleVersions(
}
}
QString GoogleMapProvider::_getURL(int x, int y, int zoom,
QString GoogleStreetMapProvider::_getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager) {
// http://mt1.google.com/vt/lyrs=m
QString server = "mt";
......
......@@ -3,16 +3,17 @@
#include "MapProvider.h"
#include <QByteArray>
#include <QMutex>
#include <QNetworkProxy>
#include <QNetworkReply>
#include <QString>
#include <QPoint>
#include <QMutex>
#include <QString>
class GoogleMapProvider : public MapProvider {
Q_OBJECT
public:
GoogleMapProvider(QObject* parent);
GoogleMapProvider(quint32 averageSize, QGeoMapType::MapStyle mapType,
QObject* parent);
~GoogleMapProvider();
......@@ -25,8 +26,8 @@ class GoogleMapProvider : public MapProvider {
protected:
// Define the url to Request
QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager) ;
virtual QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager) = 0;
// Google Specific private methods
void _getSecGoogleWords(int x, int y, QString& sec1, QString& sec2);
......@@ -43,28 +44,78 @@ class GoogleMapProvider : public MapProvider {
QString _secGoogleWord;
};
// NoMap = 0,
// StreetMap,
// SatelliteMapDay,
// SatelliteMapNight,
// TerrainMap,
// HybridMap,
// TransitMap,
// GrayStreetMap,
// PedestrianMap,
// CarNavigationMap,
// CycleMap,
// CustomMap = 100
const unsigned int AVERAGE_GOOGLE_STREET_MAP = 4913;
const unsigned int AVERAGE_GOOGLE_SAT_MAP = 56887;
const unsigned int AVERAGE_GOOGLE_TERRAIN_MAP = 19391;
// -----------------------------------------------------------
// Google Street Map
class GoogleStreetMapProvider : public GoogleMapProvider {
Q_OBJECT
public:
GoogleStreetMapProvider(QObject* parent)
: GoogleMapProvider(AVERAGE_GOOGLE_STREET_MAP, QGeoMapType::StreetMap,
parent) {}
protected:
QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager);
};
// -----------------------------------------------------------
// Google Street Map
class GoogleSatelliteMapProvider : public GoogleMapProvider {
Q_OBJECT
public:
GoogleSatelliteMapProvider(QObject* parent):GoogleMapProvider(parent){}
GoogleSatelliteMapProvider(QObject* parent)
: GoogleMapProvider(AVERAGE_GOOGLE_SAT_MAP,
QGeoMapType::SatelliteMapDay, parent) {}
protected:
QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager);
};
// -----------------------------------------------------------
// Google Labels Map
class GoogleLabelsMapProvider : public GoogleMapProvider {
Q_OBJECT
public:
GoogleLabelsMapProvider(QObject* parent):GoogleMapProvider(parent){}
GoogleLabelsMapProvider(QObject* parent)
: GoogleMapProvider(AVERAGE_TILE_SIZE, QGeoMapType::CustomMap, parent) {
}
protected:
QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager);
};
// -----------------------------------------------------------
// Google Terrain Map
class GoogleTerrainMapProvider : public GoogleMapProvider {
Q_OBJECT
public:
GoogleTerrainMapProvider(QObject* parent):GoogleMapProvider(parent){}
GoogleTerrainMapProvider(QObject* parent)
: GoogleMapProvider(AVERAGE_GOOGLE_TERRAIN_MAP, QGeoMapType::TerrainMap,
parent) {}
protected:
QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager);
......
#include "MapProvider.h"
MapProvider::MapProvider(QString referrer, QString imageFormat,
quint32 averageSize, QObject* parent)
quint32 averageSize, QGeoMapType::MapStyle mapType,QObject* parent)
: QObject(parent), _referrer(referrer), _imageFormat(imageFormat),
_averageSize(averageSize) {
_averageSize(averageSize), _mapType(mapType) {
QStringList langs = QLocale::system().uiLanguages();
if (langs.length() > 0) {
_language = langs[0];
......
......@@ -4,32 +4,45 @@
#include <QNetworkProxy>
#include <QNetworkReply>
#include <QString>
#include <QtLocation/private/qgeomaptype_p.h>
static const unsigned char pngSignature[] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00};
static const unsigned char jpegSignature[] = {0xFF, 0xD8, 0xFF, 0x00};
static const unsigned char gifSignature[] = {0x47, 0x49, 0x46, 0x38, 0x00};
static const unsigned char pngSignature[] = {0x89, 0x50, 0x4E, 0x47, 0x0D,
0x0A, 0x1A, 0x0A, 0x00};
static const unsigned char jpegSignature[] = {0xFF, 0xD8, 0xFF, 0x00};
static const unsigned char gifSignature[] = {0x47, 0x49, 0x46, 0x38, 0x00};
const unsigned int AVERAGE_BING_STREET_MAP = 1297;
const unsigned int AVERAGE_BING_SAT_MAP = 19597;
const unsigned int AVERAGE_MAPBOX_SAT_MAP = 15739;
const unsigned int AVERAGE_MAPBOX_STREET_MAP = 5648;
const unsigned int AVERAGE_TILE_SIZE = 13652;
const unsigned int AVERAGE_AIRMAP_ELEV_SIZE = 2786;
class MapProvider : public QObject {
Q_OBJECT
public:
MapProvider(QString referrer, QString imageFormat, quint32 averageSize,
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);
QGeoMapType::MapStyle getMapStyle(){return _mapType;}
protected:
QString _tileXYToQuadKey (int tileX, int tileY, int levelOfDetail);
int _getServerNum (int x, int y, int max);
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
virtual QString _getURL(int x, int y, int zoom,
......
......@@ -29,14 +29,6 @@
#include <QByteArray>
#define AVERAGE_GOOGLE_TERRAIN_MAP 19391
#define AVERAGE_BING_STREET_MAP 1297
#define AVERAGE_BING_SAT_MAP 19597
#define AVERAGE_GOOGLE_SAT_MAP 56887
#define AVERAGE_MAPBOX_SAT_MAP 15739
#define AVERAGE_MAPBOX_STREET_MAP 5648
#define AVERAGE_TILE_SIZE 13652
#define AVERAGE_AIRMAP_ELEV_SIZE 2786
//-----------------------------------------------------------------------------
UrlFactory::UrlFactory()
......@@ -46,7 +38,7 @@ UrlFactory::UrlFactory()
// BingMaps
//_versionBingMaps = "563";
#ifndef QGC_NO_GOOGLE_MAPS
_providersTable["GoogleStreet"] = new GoogleMapProvider(this);
_providersTable["GoogleStreet"] = new GoogleStreetMapProvider(this);
_providersTable["GoogleSatellite"] = new GoogleSatelliteMapProvider(this);
#endif
_curMapProvider = _providersTable["GoogleStreet"];
......
......@@ -85,18 +85,16 @@ public:
static quint32 averageSizeForType (MapType type);
//private:
// QString _getURL (MapType type, int x, int y, int zoom, QNetworkAccessManager* networkManager);
QHash<QString, MapProvider*> getProviderTable(){return _providersTable;}
private:
int _timeout;
QHash<QString, MapProvider*> _providersTable;
// BingMaps
//QString _versionBingMaps;
MapProvider* _curMapProvider;
QHash<QString, MapProvider*> _providersTable;
};
......
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