Commit abe232e0 authored by Pierre TILAK's avatar Pierre TILAK

Add Elevation, lat2tile in MapProvider

parent fa4c3b5e
......@@ -412,8 +412,8 @@ int MissionController::insertComplexMissionItem(QString itemName, QGeoCoordinate
// If the ComplexMissionItem is inserted first, add a TakeOff SimpleMissionItem
if (_visualItems->count() == 1 && (_controllerVehicle->fixedWing() || _controllerVehicle->vtol() || _controllerVehicle->multiRotor())) {
insertSimpleMissionItem(mapCenterCoordinate, i);
i++;
insertSimpleMissionItem(mapCenterCoordinate, visualItemIndex);
visualItemIndex++;
}
int sequenceNumber = _nextSequenceNumber();
......
#include "ElevationMapProvider.h"
#if defined(DEBUG_GOOGLE_MAPS)
#include <QFile>
#include <QStandardPaths>
#endif
#include "QGCMapEngine.h"
ElevationProvider::ElevationProvider(QString imageFormat, quint32 averageSize,
QGeoMapType::MapStyle mapType,
QObject* parent)
: MapProvider(QString("https://api.airmap.com/"), imageFormat, averageSize,
mapType, parent) {}
ElevationProvider::~ElevationProvider() {}
//-----------------------------------------------------------------------------
int ElevationProvider::long2tileX(double lon, int z) {
Q_UNUSED(z);
return static_cast<int>(floor((lon + 180.0) / srtm1TileSize));
}
//-----------------------------------------------------------------------------
int ElevationProvider::lat2tileY(double lat, int z) {
Q_UNUSED(z);
return static_cast<int>(floor((lat + 90.0) / srtm1TileSize));
}
QString
AirmapElevationProvider::_getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager) {
Q_UNUSED(networkManager);
Q_UNUSED(zoom);
return QString("https://api.airmap.com/elevation/v1/ele/"
"carpet?points=%1,%2,%3,%4")
.arg(static_cast<double>(y) * srtm1TileSize - 90.0)
.arg(static_cast<double>(x) * srtm1TileSize - 180.0)
.arg(static_cast<double>(y + 1) * srtm1TileSize - 90.0)
.arg(static_cast<double>(x + 1) * srtm1TileSize - 180.0);
}
#pragma once
#include "MapProvider.h"
#include <QByteArray>
#include <QMutex>
#include <QNetworkProxy>
#include <QNetworkReply>
#include <QPoint>
#include <QString>
const quint32 AVERAGE_AIRMAP_ELEV_SIZE = 2786;
//-----------------------------------------------------------------------------
const double srtm1TileSize = 0.01;
class ElevationProvider : public MapProvider {
Q_OBJECT
public:
ElevationProvider(QString imageFormat, quint32 averageSize,
QGeoMapType::MapStyle mapType, QObject* parent);
~ElevationProvider();
int long2tileX(double lon, int z);
int lat2tileY(double lat, int z);
protected:
// Define the url to Request
virtual QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager) = 0;
};
// -----------------------------------------------------------
// Airmap Elevation
class AirmapElevationProvider : public ElevationProvider {
Q_OBJECT
public:
AirmapElevationProvider(QObject* parent)
: ElevationProvider(QString("bin"), AVERAGE_AIRMAP_ELEV_SIZE,
QGeoMapType::StreetMap, parent) {}
protected:
QString _getURL(int x, int y, int zoom,
QNetworkAccessManager* networkManager);
};
......@@ -61,3 +61,15 @@ QString MapProvider::_tileXYToQuadKey(int tileX, int tileY, int levelOfDetail) {
int MapProvider::_getServerNum(int x, int y, int max) {
return (x + 2 * y) % max;
}
int MapProvider::long2tileX(double lon, int z) {
return static_cast<int>(floor((lon + 180.0) / 360.0 * pow(2.0, z)));
}
//-----------------------------------------------------------------------------
int MapProvider::lat2tileY(double lat, int z) {
return static_cast<int>(floor(
(1.0 -
log(tan(lat * M_PI / 180.0) + 1.0 / cos(lat * M_PI / 180.0)) / M_PI) /
2.0 * pow(2.0, z)));
}
......@@ -11,10 +11,7 @@ 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;
class MapProvider : public QObject {
Q_OBJECT
......@@ -32,6 +29,10 @@ class MapProvider : public QObject {
QGeoMapType::MapStyle getMapStyle(){return _mapType;}
int long2tileX(double lon, int z);
int lat2tileY(double lat, int z);
protected:
QString _tileXYToQuadKey(int tileX, int tileY, int levelOfDetail);
int _getServerNum(int x, int y, int max);
......
......@@ -9,6 +9,9 @@
#include <QPoint>
#include <QString>
const quint32 AVERAGE_MAPBOX_SAT_MAP = 15739;
const quint32 AVERAGE_MAPBOX_STREET_MAP = 5648;
class MapboxMapProvider : public MapProvider {
Q_OBJECT
public:
......
......@@ -23,6 +23,7 @@ HEADERS += \
$$PWD/QGeoTileFetcherQGC.h \
$$PWD/QGeoTiledMappingManagerEngineQGC.h \
$$PWD/MapProvider.h \
$$PWD/ElevationMapProvider.h \
$$PWD/GoogleMapProvider.h \
$$PWD/BingMapProvider.h \
$$PWD/GenericMapProvider.h \
......@@ -41,6 +42,7 @@ SOURCES += \
$$PWD/QGeoTileFetcherQGC.cpp \
$$PWD/QGeoTiledMappingManagerEngineQGC.cpp \
$$PWD/MapProvider.cpp \
$$PWD/ElevationMapProvider.cpp \
$$PWD/GoogleMapProvider.cpp \
$$PWD/BingMapProvider.cpp \
$$PWD/GenericMapProvider.cpp \
......
......@@ -56,9 +56,6 @@ getQGCMapEngine()
return kMapEngine;
}
//-----------------------------------------------------------------------------
const double QGCMapEngine::srtm1TileSize = 0.01;
//-----------------------------------------------------------------------------
void
destroyMapEngine()
......@@ -254,51 +251,15 @@ QGCMapEngine::getTileCount(int zoom, double topleftLon, double topleftLat, doubl
if(zoom < 1) zoom = 1;
if(zoom > MAX_MAP_ZOOM) zoom = MAX_MAP_ZOOM;
QGCTileSet set;
if (mapType != "AirmapElevation") {
set.tileX0 = long2tileX(topleftLon, zoom);
set.tileY0 = lat2tileY(topleftLat, zoom);
set.tileX1 = long2tileX(bottomRightLon, zoom);
set.tileY1 = lat2tileY(bottomRightLat, zoom);
} else {
set.tileX0 = long2elevationTileX(topleftLon, zoom);
set.tileY0 = lat2elevationTileY(bottomRightLat, zoom);
set.tileX1 = long2elevationTileX(bottomRightLon, zoom);
set.tileY1 = lat2elevationTileY(topleftLat, zoom);
}
set.tileX0 = getQGCMapEngine()->urlFactory()->long2tileX(mapType, topleftLon, zoom);
set.tileY0 = getQGCMapEngine()->urlFactory()->lat2tileY(mapType, topleftLat, zoom);
set.tileX1 = getQGCMapEngine()->urlFactory()->long2tileX(mapType, bottomRightLon, zoom);
set.tileY1 = getQGCMapEngine()->urlFactory()->lat2tileY(mapType, bottomRightLat, zoom);
set.tileCount = (static_cast<quint64>(set.tileX1) - static_cast<quint64>(set.tileX0) + 1) * (static_cast<quint64>(set.tileY1) - static_cast<quint64>(set.tileY0) + 1);
set.tileSize = getQGCMapEngine()->urlFactory()->averageSizeForType(mapType) * set.tileCount;
return set;
}
//-----------------------------------------------------------------------------
int
QGCMapEngine::long2tileX(double lon, int z)
{
return static_cast<int>(floor((lon + 180.0) / 360.0 * pow(2.0, z)));
}
//-----------------------------------------------------------------------------
int
QGCMapEngine::lat2tileY(double lat, int z)
{
return static_cast<int>(floor((1.0 - log( tan(lat * M_PI/180.0) + 1.0 / cos(lat * M_PI/180.0)) / M_PI) / 2.0 * pow(2.0, z)));
}
//-----------------------------------------------------------------------------
int
QGCMapEngine::long2elevationTileX(double lon, int z)
{
Q_UNUSED(z);
return static_cast<int>(floor((lon + 180.0) / srtm1TileSize));
}
//-----------------------------------------------------------------------------
int
QGCMapEngine::lat2elevationTileY(double lat, int z)
{
Q_UNUSED(z);
return static_cast<int>(floor((lat + 90.0) / srtm1TileSize));
}
//-----------------------------------------------------------------------------
QStringList
......
......@@ -92,20 +92,13 @@ public:
//-- Tile Math
static QGCTileSet getTileCount (int zoom, double topleftLon, double topleftLat, double bottomRightLon, double bottomRightLat, QString mapType);
static int long2tileX (double lon, int z);
static int lat2tileY (double lat, int z);
static int long2elevationTileX (double lon, int z);
static int lat2elevationTileY (double lat, int z);
static QString getTileHash (QString type, int x, int y, int z);
static QString getTypeFromName (const QString &name);
static QString getTypeFromName (const QString &name);
static QString bigSizeToString (quint64 size);
static QString storageFreeSizeToString(quint64 size_MB);
static QString numberToString (quint64 number);
static int concurrentDownloads (QString type);
/// size of an elevation tile in degree
static const double srtm1TileSize;
private slots:
void _updateTotals (quint32 totaltiles, quint64 totalsize, quint32 defaulttiles, quint64 defaultsize);
void _pruned ();
......
......@@ -280,7 +280,7 @@ QGCCachedTileSet::_networkReplyFinished()
qCDebug(QGCCachedTileSetLog) << "Tile fetched" << hash;
QByteArray image = reply->readAll();
QString type = getQGCMapEngine()->hashToType(hash);
if (type == "AirmapElevation" ) {
if (type == "Airmap Elevation" ) {
image = TerrainTile::serialize(image);
}
QString format = getQGCMapEngine()->urlFactory()->getImageFormat(type, image);
......
......@@ -35,9 +35,6 @@ QGC_LOGGING_CATEGORY(QGCMapUrlEngineLog, "QGCMapUrlEngineLog")
//-----------------------------------------------------------------------------
UrlFactory::UrlFactory() : _timeout(5 * 1000) {
// BingMaps
//_versionBingMaps = "563";
// Warning : in _providersTable, keys needs to follow this format :
// "Provider Type"
#ifndef QGC_NO_GOOGLE_MAPS
......@@ -102,65 +99,6 @@ QString UrlFactory::getImageFormat(QString type, const QByteArray& image) {
qCDebug(QGCMapUrlEngineLog) << "getImageFormat : Map not registered :" << type;
return "";
}
// QString format;
// if(image.size() > 2)
//{
// if (image.startsWith(reinterpret_cast<const char*>(pngSignature)))
// format = "png";
// else if (image.startsWith(reinterpret_cast<const
// char*>(jpegSignature)))
// format = "jpg";
// else if (image.startsWith(reinterpret_cast<const
// char*>(gifSignature)))
// format = "gif";
// else {
// switch (type) {
// case StatkartTopo:
// format = "png";
// break;
// case EniroTopo:
// format = "png";
// break;
// /*
// case MapQuestMap:
// case MapQuestSat:
// case OpenStreetMap:
// */
// case MapboxStreets:
// case MapboxLight:
// case MapboxDark:
// case MapboxSatellite:
// case MapboxHybrid:
// case MapboxWheatPaste:
// case MapboxStreetsBasic:
// case MapboxComic:
// case MapboxOutdoors:
// case MapboxRunBikeHike:
// case MapboxPencil:
// case MapboxPirates:
// case MapboxEmerald:
// case MapboxHighContrast:
// case GoogleSatellite:
// case BingSatellite:
// case BingHybrid:
// format = "jpg";
// break;
// case AirmapElevation:
// format = "bin";
// break;
// case VWorldStreet :
// format = "png";
// break;
// case VWorldSatellite :
// format = "jpg";
// break;
// default:
// qWarning("UrlFactory::getImageFormat() Unknown map id %d",
// type); break;
// }
// }
//}
// return format;
}
QNetworkRequest UrlFactory::getTileURL(int id, int x, int y, int zoom,
QNetworkAccessManager* networkManager) {
......@@ -182,251 +120,13 @@ QNetworkRequest UrlFactory::getTileURL(QString type, int x, int y, int zoom,
}
qCDebug(QGCMapUrlEngineLog) << "getTileURL : map not registered :" << type;
return QNetworkRequest(QUrl());
////-- Build URL
// QNetworkRequest request;
// QString url = _getURL(type, x, y, zoom, networkManager);
// if(url.isEmpty()) {
// return request;
//}
// request.setUrl(QUrl(url));
// request.setRawHeader("Accept", "*/*");
// switch (type) {
// case StatkartTopo:
// request.setRawHeader("Referrer", "https://www.norgeskart.no/");
// break;
// case EniroTopo:
// request.setRawHeader("Referrer", "https://www.eniro.se/");
// break;
// /*
// case OpenStreetMapSurfer:
// case OpenStreetMapSurferTerrain:
// request.setRawHeader("Referrer", "http://www.mapsurfer.net/");
// break;
// case OpenStreetMap:
// case OpenStreetOsm:
// request.setRawHeader("Referrer",
// "https://www.openstreetmap.org/"); break;
// */
// case EsriWorldStreet:
// case EsriWorldSatellite:
// case EsriTerrain: {
// 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;
// case AirmapElevation:
// request.setRawHeader("Referrer", "https://api.airmap.com/");
// break;
// default:
// break;
//}
// request.setRawHeader("User-Agent", _userAgent);
// return request;
}
//-----------------------------------------------------------------------------
#if 0
QString
UrlFactory::_getURL(QString type, int x, int y, int zoom, QNetworkAccessManager* networkManager)
{
switch (type) {
(networkManager);
case StatkartTopo:
{
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);
}
break;
case EniroTopo:
{
}
break;
/*
case OpenStreetMap:
{
char letter = "abc"[_getServerNum(x, y, 3)];
return QString("https://%1.tile.openstreetmap.org/%2/%3/%4.png").arg(letter).arg(zoom).arg(x).arg(y);
}
break;
case OpenStreetOsm:
{
char letter = "abc"[_getServerNum(x, y, 3)];
return QString("http://%1.tah.openstreetmap.org/Tiles/tile/%2/%3/%4.png").arg(letter).arg(zoom).arg(x).arg(y);
}
break;
case OpenStreetMapSurfer:
{
// http://tiles1.mapsurfer.net/tms_r.ashx?x=37378&y=20826&z=16
return QString("http://tiles1.mapsurfer.net/tms_r.ashx?x=%1&y=%2&z=%3").arg(x).arg(y).arg(zoom);
}
break;
case OpenStreetMapSurferTerrain:
{
// http://tiles2.mapsurfer.net/tms_t.ashx?x=9346&y=5209&z=14
return QString("http://tiles2.mapsurfer.net/tms_t.ashx?x=%1&y=%2&z=%3").arg(x).arg(y).arg(zoom);
}
break;
*/
case BingMap:
{
}
break;
case BingSatellite:
{
}
break;
case BingHybrid:
{
}
/*
case MapQuestMap:
{
char letter = "1234"[_getServerNum(x, y, 4)];
return QString("http://otile%1.mqcdn.com/tiles/1.0.0/map/%2/%3/%4.jpg").arg(letter).arg(zoom).arg(x).arg(y);
}
break;
case MapQuestSat:
{
char letter = "1234"[_getServerNum(x, y, 4)];
return QString("http://otile%1.mqcdn.com/tiles/1.0.0/sat/%2/%3/%4.jpg").arg(letter).arg(zoom).arg(x).arg(y);
}
break;
*/
case EsriWorldStreet:
case MapboxStreets:
case MapboxLight:
case MapboxDark:
case MapboxSatellite:
case MapboxHybrid:
case MapboxWheatPaste:
case MapboxStreetsBasic:
case MapboxComic:
case MapboxOutdoors:
case MapboxRunBikeHike:
case MapboxPencil:
case MapboxPirates:
case MapboxEmerald:
case MapboxHighContrast:
{
QString mapBoxToken = qgcApp()->toolbox()->settingsManager()->appSettings()->mapboxToken()->rawValue().toString();
if(!mapBoxToken.isEmpty()) {
QString server = "https://api.mapbox.com/v4/";
switch(type) {
case MapboxStreets:
server += "mapbox.streets";
break;
case MapboxLight:
server += "mapbox.light";
break;
case MapboxDark:
server += "mapbox.dark";
break;
case MapboxSatellite:
server += "mapbox.satellite";
break;
case MapboxHybrid:
server += "mapbox.streets-satellite";
break;
case MapboxWheatPaste:
server += "mapbox.wheatpaste";
break;
case MapboxStreetsBasic:
server += "mapbox.streets-basic";
break;
case MapboxComic:
server += "mapbox.comic";
break;
case MapboxOutdoors:
server += "mapbox.outdoors";
break;
case MapboxRunBikeHike:
server += "mapbox.run-bike-hike";
break;
case MapboxPencil:
server += "mapbox.pencil";
break;
case MapboxPirates:
server += "mapbox.pirates";
break;
case MapboxEmerald:
server += "mapbox.emerald";
break;
case MapboxHighContrast:
server += "mapbox.high-contrast";
break;
default:
return {};
}
server += QString("/%1/%2/%3.jpg80?access_token=%4").arg(zoom).arg(x).arg(y).arg(mapBoxToken);
return server;
}
}
break;
case AirmapElevation:
{
return QString("https://api.airmap.com/elevation/v1/ele/carpet?points=%1,%2,%3,%4").arg(static_cast<double>(y)*QGCMapEngine::srtm1TileSize - 90.0).arg(
static_cast<double>(x)*QGCMapEngine::srtm1TileSize - 180.0).arg(
static_cast<double>(y + 1)*QGCMapEngine::srtm1TileSize - 90.0).arg(
static_cast<double>(x + 1)*QGCMapEngine::srtm1TileSize - 180.0);
}
break;
case VWorldStreet :
{
int gap = zoom - 6;
int x_min = 53 * pow(2, gap);
int x_max = 55 * pow(2, gap) + (2*gap - 1);
int y_min = 22 * pow(2, gap);
int y_max = 26 * pow(2, gap) + (2*gap - 1);
if ( zoom > 19 ) {
return {};
}
else if ( zoom > 5 && x >= x_min && x <= x_max && y >= y_min && y <= y_max ) {
return QString("http://xdworld.vworld.kr:8080/2d/Base/service/%1/%2/%3.png").arg(zoom).arg(x).arg(y);
}
else {
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);
}
}
break;
case VWorldSatellite :
{
int gap = zoom - 6;
int x_min = 53 * pow(2, gap);
int x_max = 55 * pow(2, gap) + (2*gap - 1);
int y_min = 22 * pow(2, gap);
int y_max = 26 * pow(2, gap) + (2*gap - 1);
if ( zoom > 19 ) {
return {};
}
else if ( zoom > 5 && x >= x_min && x <= x_max && y >= y_min && y <= y_max ) {
return QString("http://xdworld.vworld.kr:8080/2d/Satellite/service/%1/%2/%3.jpeg").arg(zoom).arg(x).arg(y);
}
else {
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);
}
}
break;
default:
qWarning("Unknown map id %d\n", type);
break;
}
return {};
}
//-----------------------------------------------------------------------------
......@@ -466,3 +166,18 @@ QString UrlFactory::getTypeFromId(int id) {
// There is still a low probability for abs to
// generate similar hash for different types
int UrlFactory::getIdFromType(QString type) { return abs(qHash(type)); }
//-----------------------------------------------------------------------------
int
UrlFactory::long2tileX(QString mapType, double lon, int z)
{
return _providersTable[mapType]->long2tileX(lon, z);
}
//-----------------------------------------------------------------------------
int
UrlFactory::lat2tileY(QString mapType, double lat, int z)
{
return _providersTable[mapType]->lat2tileY(lat, z);
}
......@@ -28,18 +28,6 @@
class UrlFactory : public QObject {
Q_OBJECT
public:
//
// /*
// MapQuestMap = 700,
// MapQuestSat = 701,
// */
//
// VWorldMap = 800,
// VWorldSatellite = 801,
// VWorldStreet = 802,
//
// AirmapElevation = 8001
// };
UrlFactory ();
~UrlFactory ();
......@@ -52,6 +40,9 @@ public:
quint32 averageSizeForType (QString type);
int long2tileX(QString mapType, double lon, int z);
int lat2tileY(QString mapType, double lat, int z);
QHash<QString, MapProvider*> getProviderTable(){return _providersTable;}
int getIdFromType(QString type);
......@@ -62,10 +53,6 @@ private:
QHash<QString, MapProvider*> _providersTable;
void registerProvider(QString Name, MapProvider* provider);
// BingMaps
//QString _versionBingMaps;
};
#endif
......@@ -124,12 +124,12 @@ QGeoTiledMapReplyQGC::networkReplyFinished()
QByteArray a = _reply->readAll();
QString format = getQGCMapEngine()->urlFactory()->getImageFormat(tileSpec().mapId(), a);
//-- Test for a specialized, elevation data (not map tile)
int AirmapElevationId = getQGCMapEngine()->urlFactory()->getIdFromType("AirmapElevation");
int AirmapElevationId = getQGCMapEngine()->urlFactory()->getIdFromType("Airmap Elevation");
if (tileSpec().mapId() == AirmapElevationId) {
a = TerrainTile::serialize(a);
//-- Cache it if valid
if(!a.isEmpty()) {
getQGCMapEngine()->cacheTile("AirmapElevation", tileSpec().x(), tileSpec().y(), tileSpec().zoom(), a, format);
getQGCMapEngine()->cacheTile("Airmap Elevation", tileSpec().x(), tileSpec().y(), tileSpec().zoom(), a, format);
}
emit terrainDone(a, QNetworkReply::NoError);
} else {
......@@ -153,7 +153,7 @@ QGeoTiledMapReplyQGC::networkReplyError(QNetworkReply::NetworkError error)
return;
}
//-- Test for a specialized, elevation data (not map tile)
int AirmapElevationId = getQGCMapEngine()->urlFactory()->getIdFromType("AirmapElevation");
int AirmapElevationId = getQGCMapEngine()->urlFactory()->getIdFromType("Airmap Elevation");
if (tileSpec().mapId() == AirmapElevationId) {
emit terrainDone(QByteArray(), error);
} else {
......@@ -172,7 +172,7 @@ void
QGeoTiledMapReplyQGC::cacheError(QGCMapTask::TaskType type, QString /*errorString*/)
{
if(!getQGCMapEngine()->isInternetActive()) {
int AirmapElevationId = getQGCMapEngine()->urlFactory()->getIdFromType("AirmapElevation");
int AirmapElevationId = getQGCMapEngine()->urlFactory()->getIdFromType("Airmap Elevation");
if (tileSpec().mapId() == AirmapElevationId) {
emit terrainDone(QByteArray(), QNetworkReply::NetworkSessionFailedError);
} else {
......@@ -210,7 +210,7 @@ void
QGeoTiledMapReplyQGC::cacheReply(QGCCacheTile* tile)
{
//-- Test for a specialized, elevation data (not map tile)
int AirmapElevationId = getQGCMapEngine()->urlFactory()->getIdFromType("AirmapElevation");
int AirmapElevationId = getQGCMapEngine()->urlFactory()->getIdFromType("Airmap Elevation");
if (tileSpec().mapId() == AirmapElevationId) {
emit terrainDone(tile->img(), QNetworkReply::NoError);
} else {
......
......@@ -106,12 +106,10 @@ QGeoTiledMappingManagerEngineQGC::QGeoTiledMappingManagerEngineQGC(const QVarian
while(i.hasNext()){
i.next();
qDebug()<< "Add MapProvider" <<i.value()->getMapStyle() << i.key()<<getQGCMapEngine()->urlFactory()->getIdFromType(i.key());
mapList.append(QGCGEOMAPTYPE(i.value()->getMapStyle(), i.key(), i.key(), false, false, getQGCMapEngine()->urlFactory()->getIdFromType(i.key()) ));
}
setSupportedMapTypes(mapList);
qDebug() << "End Adding Provider";
//-- Users (QML code) can define a different user agent
if (parameters.contains(QStringLiteral("useragent"))) {
getQGCMapEngine()->setUserAgent(parameters.value(QStringLiteral("useragent")).toString().toLatin1());
......
......@@ -84,7 +84,7 @@ QGCMapEngineManager::updateForCurrentView(double lon0, double lat0, double lon1,
_imageSet += set;
}
if (_fetchElevation) {
QGCTileSet set = QGCMapEngine::getTileCount(1, lon0, lat0, lon1, lat1, "AirmapElevation");
QGCTileSet set = QGCMapEngine::getTileCount(1, lon0, lat0, lon1, lat1, "Airmap Elevation");
_elevationSet += set;
}
......@@ -159,9 +159,9 @@ QGCMapEngineManager::startDownload(const QString& name, const QString& mapType)
} else {
qWarning() << "QGCMapEngineManager::startDownload() No Tiles to save";
}
if (mapType != "Airmap Elevation Data" && _fetchElevation) {
if (mapType != "Airmap Elevation" && _fetchElevation) {
QGCCachedTileSet* set = new QGCCachedTileSet(name + " Elevation");
set->setMapTypeStr("Airmap Elevation Data");
set->setMapTypeStr("Airmap Elevation");
set->setTopleftLat(_topleftLat);
set->setTopleftLon(_topleftLon);
set->setBottomRightLat(_bottomRightLat);
......@@ -170,7 +170,7 @@ QGCMapEngineManager::startDownload(const QString& name, const QString& mapType)
set->setMaxZoom(1);
set->setTotalTileSize(_elevationSet.tileSize);
set->setTotalTileCount(static_cast<quint32>(_elevationSet.tileCount));
set->setType("AirmapElevation");
set->setType("Airmap Elevation");
QGCCreateTileSetTask* task = new QGCCreateTileSetTask(set);
//-- Create Tile Set (it will also create a list of tiles to download)
connect(task, &QGCCreateTileSetTask::tileSetSaved, this, &QGCMapEngineManager::_tileSetSaved);
......
......@@ -426,11 +426,11 @@ bool TerrainTileManager::_getAltitudesForCoordinates(const QList<QGeoCoordinate>
}
} else {
if (_state != State::Downloading) {
QNetworkRequest request = getQGCMapEngine()->urlFactory()->getTileURL("AirmapElevation", QGCMapEngine::long2elevationTileX(coordinate.longitude(), 1), QGCMapEngine::lat2elevationTileY(coordinate.latitude(), 1), 1, &_networkManager);
QNetworkRequest request = getQGCMapEngine()->urlFactory()->getTileURL("AirmapElevation", getQGCMapEngine()->urlFactory()->long2tileX("Airmap Elevation",coordinate.longitude(), 1), getQGCMapEngine()->urlFactory()->lat2tileY("Airmap Elevation", coordinate.latitude(), 1), 1, &_networkManager);
qCDebug(TerrainQueryLog) << "TerrainTileManager::_getAltitudesForCoordinates query from database" << request.url();
QGeoTileSpec spec;
spec.setX(QGCMapEngine::long2elevationTileX(coordinate.longitude(), 1));
spec.setY(QGCMapEngine::lat2elevationTileY(coordinate.latitude(), 1));
spec.setX(getQGCMapEngine()->urlFactory()->long2tileX("Airmap Elevation", coordinate.longitude(), 1));
spec.setY(getQGCMapEngine()->urlFactory()->lat2tileY("Airmap Elevation", coordinate.latitude(), 1));
spec.setZoom(1);
spec.setMapId(getQGCMapEngine()->urlFactory()->getIdFromType("AirmapElevation"));
QGeoTiledMapReplyQGC* reply = new QGeoTiledMapReplyQGC(&_networkManager, request, spec);
......@@ -539,7 +539,7 @@ void TerrainTileManager::_terrainDone(QByteArray responseBytes, QNetworkReply::N
QString TerrainTileManager::_getTileHash(const QGeoCoordinate& coordinate)
{
QString ret = QGCMapEngine::getTileHash("AirmapElevation", QGCMapEngine::long2elevationTileX(coordinate.longitude(), 1), QGCMapEngine::lat2elevationTileY(coordinate.latitude(), 1), 1);
QString ret = QGCMapEngine::getTileHash("AirmapElevation", getQGCMapEngine()->urlFactory()->long2tileX("Airmap Elevation", coordinate.longitude(), 1), getQGCMapEngine()->urlFactory()->lat2tileY("Airmap Elevation", coordinate.latitude(), 1), 1);
qCDebug(TerrainQueryVerboseLog) << "Computing unique tile hash for " << coordinate << ret;
return ret;
......
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