|
|
@ -7,39 +7,36 @@ |
|
|
|
* |
|
|
|
* |
|
|
|
****************************************************************************/ |
|
|
|
****************************************************************************/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* @file |
|
|
|
* @file |
|
|
|
* @author Gus Grubba <mavlink@grubba.com> |
|
|
|
* @author Gus Grubba <mavlink@grubba.com> |
|
|
|
* Original work: The OpenPilot Team, http://www.openpilot.org Copyright (C) 2012.
|
|
|
|
* Original work: The OpenPilot Team, http://www.openpilot.org Copyright (C)
|
|
|
|
|
|
|
|
* 2012. |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
//#define DEBUG_GOOGLE_MAPS
|
|
|
|
//#define DEBUG_GOOGLE_MAPS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "AppSettings.h" |
|
|
|
#include "QGCApplication.h" |
|
|
|
#include "QGCApplication.h" |
|
|
|
#include "QGCMapEngine.h" |
|
|
|
#include "QGCMapEngine.h" |
|
|
|
#include "AppSettings.h" |
|
|
|
|
|
|
|
#include "SettingsManager.h" |
|
|
|
#include "SettingsManager.h" |
|
|
|
|
|
|
|
|
|
|
|
#include <QRegExp> |
|
|
|
#include <QByteArray> |
|
|
|
#include <QNetworkReply> |
|
|
|
|
|
|
|
#include <QEventLoop> |
|
|
|
#include <QEventLoop> |
|
|
|
#include <QTimer> |
|
|
|
#include <QNetworkReply> |
|
|
|
|
|
|
|
#include <QRegExp> |
|
|
|
#include <QString> |
|
|
|
#include <QString> |
|
|
|
#include <QByteArray> |
|
|
|
#include <QTimer> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
UrlFactory::UrlFactory() |
|
|
|
UrlFactory::UrlFactory() : _timeout(5 * 1000) { |
|
|
|
: _timeout(5 * 1000) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// BingMaps
|
|
|
|
// BingMaps
|
|
|
|
//_versionBingMaps = "563";
|
|
|
|
//_versionBingMaps = "563";
|
|
|
|
#ifndef QGC_NO_GOOGLE_MAPS |
|
|
|
#ifndef QGC_NO_GOOGLE_MAPS |
|
|
|
_providersTable["GoogleStreet"] = 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); |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -48,29 +45,34 @@ void UrlFactory::registerProvider(QString name, MapProvider* provider){ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
UrlFactory::~UrlFactory() |
|
|
|
UrlFactory::~UrlFactory() {} |
|
|
|
{ |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QString |
|
|
|
QString UrlFactory::getImageFormat(int id, const QByteArray& image) { |
|
|
|
UrlFactory::getImageFormat(int id, const QByteArray& image) |
|
|
|
QString type = getTypeFromId(id); |
|
|
|
{ |
|
|
|
if (_providersTable.find(type) != _providersTable.end()) { |
|
|
|
return _providersTable[getTypeFromId(id)]->getImageFormat(image); |
|
|
|
return _providersTable[getTypeFromId(id)]->getImageFormat(image); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return ""; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
QString |
|
|
|
QString UrlFactory::getImageFormat(QString type, const QByteArray& image) { |
|
|
|
UrlFactory::getImageFormat(QString type, const QByteArray& image) |
|
|
|
if (_providersTable.find(type) != _providersTable.end()) { |
|
|
|
{ |
|
|
|
|
|
|
|
return _providersTable[type]->getImageFormat(image); |
|
|
|
return _providersTable[type]->getImageFormat(image); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return ""; |
|
|
|
|
|
|
|
} |
|
|
|
// QString format;
|
|
|
|
// QString format;
|
|
|
|
// if(image.size() > 2)
|
|
|
|
// if(image.size() > 2)
|
|
|
|
//{
|
|
|
|
//{
|
|
|
|
// if (image.startsWith(reinterpret_cast<const char*>(pngSignature)))
|
|
|
|
// if (image.startsWith(reinterpret_cast<const char*>(pngSignature)))
|
|
|
|
// format = "png";
|
|
|
|
// format = "png";
|
|
|
|
// else if (image.startsWith(reinterpret_cast<const char*>(jpegSignature)))
|
|
|
|
// else if (image.startsWith(reinterpret_cast<const
|
|
|
|
|
|
|
|
// char*>(jpegSignature)))
|
|
|
|
// format = "jpg";
|
|
|
|
// format = "jpg";
|
|
|
|
// else if (image.startsWith(reinterpret_cast<const char*>(gifSignature)))
|
|
|
|
// else if (image.startsWith(reinterpret_cast<const
|
|
|
|
|
|
|
|
// char*>(gifSignature)))
|
|
|
|
// format = "gif";
|
|
|
|
// format = "gif";
|
|
|
|
// else {
|
|
|
|
// else {
|
|
|
|
// switch (type) {
|
|
|
|
// switch (type) {
|
|
|
@ -119,23 +121,26 @@ UrlFactory::getImageFormat(QString type, const QByteArray& image) |
|
|
|
// format = "jpg";
|
|
|
|
// format = "jpg";
|
|
|
|
// break;
|
|
|
|
// break;
|
|
|
|
// default:
|
|
|
|
// default:
|
|
|
|
// qWarning("UrlFactory::getImageFormat() Unknown map id %d", type);
|
|
|
|
// qWarning("UrlFactory::getImageFormat() Unknown map id %d",
|
|
|
|
// break;
|
|
|
|
// type); break;
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
//}
|
|
|
|
// return format;
|
|
|
|
// return format;
|
|
|
|
} |
|
|
|
} |
|
|
|
QNetworkRequest |
|
|
|
QNetworkRequest UrlFactory::getTileURL(int id, int x, int y, int zoom, |
|
|
|
UrlFactory::getTileURL(int id, int x, int y, int zoom, QNetworkAccessManager* networkManager){ |
|
|
|
QNetworkAccessManager* networkManager) { |
|
|
|
|
|
|
|
|
|
|
|
return _providersTable[getTypeFromId(id)]->getTileURL(x,y,zoom,networkManager); |
|
|
|
QString type = getTypeFromId(id); |
|
|
|
|
|
|
|
if (_providersTable.find(type) != _providersTable.end()) { |
|
|
|
|
|
|
|
return _providersTable[type]->getTileURL(x, y, zoom, networkManager); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return QNetworkRequest(QUrl()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
QNetworkRequest |
|
|
|
QNetworkRequest UrlFactory::getTileURL(QString type, int x, int y, int zoom, |
|
|
|
UrlFactory::getTileURL(QString type, int x, int y, int zoom, QNetworkAccessManager* networkManager) |
|
|
|
QNetworkAccessManager* networkManager) { |
|
|
|
{ |
|
|
|
|
|
|
|
return _providersTable[type]->getTileURL(x, y, zoom, networkManager); |
|
|
|
return _providersTable[type]->getTileURL(x, y, zoom, networkManager); |
|
|
|
////-- Build URL
|
|
|
|
////-- Build URL
|
|
|
|
// QNetworkRequest request;
|
|
|
|
// QNetworkRequest request;
|
|
|
@ -151,7 +156,8 @@ UrlFactory::getTileURL(QString type, int x, int y, int zoom, QNetworkAccessManag |
|
|
|
// // case GoogleLabels:
|
|
|
|
// // case GoogleLabels:
|
|
|
|
// // case GoogleTerrain:
|
|
|
|
// // case GoogleTerrain:
|
|
|
|
// // case GoogleHybrid:
|
|
|
|
// // case GoogleHybrid:
|
|
|
|
// // request.setRawHeader("Referrer", "https://www.google.com/maps/preview");
|
|
|
|
// // request.setRawHeader("Referrer",
|
|
|
|
|
|
|
|
// "https://www.google.com/maps/preview");
|
|
|
|
// // break;
|
|
|
|
// // break;
|
|
|
|
// case BingHybrid:
|
|
|
|
// case BingHybrid:
|
|
|
|
// case BingMap:
|
|
|
|
// case BingMap:
|
|
|
@ -171,15 +177,17 @@ UrlFactory::getTileURL(QString type, int x, int y, int zoom, QNetworkAccessManag |
|
|
|
// break;
|
|
|
|
// break;
|
|
|
|
// case OpenStreetMap:
|
|
|
|
// case OpenStreetMap:
|
|
|
|
// case OpenStreetOsm:
|
|
|
|
// case OpenStreetOsm:
|
|
|
|
// request.setRawHeader("Referrer", "https://www.openstreetmap.org/");
|
|
|
|
// request.setRawHeader("Referrer",
|
|
|
|
// break;
|
|
|
|
// "https://www.openstreetmap.org/"); break;
|
|
|
|
// */
|
|
|
|
// */
|
|
|
|
|
|
|
|
|
|
|
|
// case EsriWorldStreet:
|
|
|
|
// case EsriWorldStreet:
|
|
|
|
// case EsriWorldSatellite:
|
|
|
|
// case EsriWorldSatellite:
|
|
|
|
// case EsriTerrain: {
|
|
|
|
// case EsriTerrain: {
|
|
|
|
// QByteArray token = qgcApp()->toolbox()->settingsManager()->appSettings()->esriToken()->rawValue().toString().toLatin1();
|
|
|
|
// QByteArray token =
|
|
|
|
// request.setRawHeader("User-Agent", QByteArrayLiteral("Qt Location based application"));
|
|
|
|
// qgcApp()->toolbox()->settingsManager()->appSettings()->esriToken()->rawValue().toString().toLatin1();
|
|
|
|
|
|
|
|
// request.setRawHeader("User-Agent", QByteArrayLiteral("Qt
|
|
|
|
|
|
|
|
// Location based application"));
|
|
|
|
// request.setRawHeader("User-Token", token);
|
|
|
|
// request.setRawHeader("User-Token", token);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// return request;
|
|
|
|
// return request;
|
|
|
@ -455,12 +463,15 @@ UrlFactory::_getURL(QString type, int x, int y, int zoom, QNetworkAccessManager* |
|
|
|
|
|
|
|
|
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
quint32 |
|
|
|
quint32 UrlFactory::averageSizeForType(QString type) { |
|
|
|
UrlFactory::averageSizeForType(QString type) |
|
|
|
qDebug() << "UrlFactory::averageSizeForType for" << type; |
|
|
|
{ |
|
|
|
if (_providersTable.find(type) != _providersTable.end()) { |
|
|
|
return _providersTable[type]->getAverageSize(); |
|
|
|
return _providersTable[type]->getAverageSize(); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
qDebug() << "UrlFactory::averageSizeForType " << type |
|
|
|
|
|
|
|
<< " Not registered"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// switch (type) {
|
|
|
|
// switch (type) {
|
|
|
|
// case GoogleMap:
|
|
|
|
// case GoogleMap:
|
|
|
@ -517,6 +528,4 @@ QString UrlFactory::getTypeFromId(int id){ |
|
|
|
// Todo : qHash produce a uint bigger than max(int)
|
|
|
|
// Todo : qHash produce a uint bigger than max(int)
|
|
|
|
// There is still a low probability for abs to
|
|
|
|
// There is still a low probability for abs to
|
|
|
|
// generate similar hash for different types
|
|
|
|
// generate similar hash for different types
|
|
|
|
int UrlFactory::getIdFromType(QString type){ |
|
|
|
int UrlFactory::getIdFromType(QString type) { return abs(qHash(type)); } |
|
|
|
return abs(qHash(type)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|