diff --git a/src/QtLocationPlugin/ElevationMapProvider.cpp b/src/QtLocationPlugin/ElevationMapProvider.cpp index ce2155c9981850fa623f55ad9f2a35c6c8f25abb..a2e38332991f48955e676d5ca4180b77e5c351af 100644 --- a/src/QtLocationPlugin/ElevationMapProvider.cpp +++ b/src/QtLocationPlugin/ElevationMapProvider.cpp @@ -10,17 +10,16 @@ ElevationProvider::ElevationProvider(QString imageFormat, quint32 averageSize, QObject* parent) : MapProvider(QString("https://api.airmap.com/"), imageFormat, averageSize, mapType, parent) {} - ElevationProvider::~ElevationProvider() {} //----------------------------------------------------------------------------- -int ElevationProvider::long2tileX(double lon, int z) { +int AirmapElevationProvider::long2tileX(double lon, int z) { Q_UNUSED(z); return static_cast(floor((lon + 180.0) / srtm1TileSize)); } //----------------------------------------------------------------------------- -int ElevationProvider::lat2tileY(double lat, int z) { +int AirmapElevationProvider::lat2tileY(double lat, int z) { Q_UNUSED(z); return static_cast(floor((lat + 90.0) / srtm1TileSize)); } diff --git a/src/QtLocationPlugin/ElevationMapProvider.h b/src/QtLocationPlugin/ElevationMapProvider.h index 600ee0b96e88b8ced6f5f1f8a562f5d42fd9b3ea..09b082729ef3d2a8a8dd7c764bf1a9d990acc309 100644 --- a/src/QtLocationPlugin/ElevationMapProvider.h +++ b/src/QtLocationPlugin/ElevationMapProvider.h @@ -21,8 +21,6 @@ class ElevationProvider : public MapProvider { ~ElevationProvider(); - int long2tileX(double lon, int z); - int lat2tileY(double lat, int z); protected: // Define the url to Request @@ -40,6 +38,10 @@ class AirmapElevationProvider : public ElevationProvider { : ElevationProvider(QString("bin"), AVERAGE_AIRMAP_ELEV_SIZE, QGeoMapType::StreetMap, parent) {} + int long2tileX(double lon, int z); + int lat2tileY(double lat, int z); + + protected: QString _getURL(int x, int y, int zoom, QNetworkAccessManager* networkManager); diff --git a/src/QtLocationPlugin/MapProvider.h b/src/QtLocationPlugin/MapProvider.h index 6825ec11eabb945ee647856eff6d9417ada1318d..bdf769fd03bf758799399874e15dc44b519851a0 100644 --- a/src/QtLocationPlugin/MapProvider.h +++ b/src/QtLocationPlugin/MapProvider.h @@ -29,9 +29,9 @@ class MapProvider : public QObject { QGeoMapType::MapStyle getMapStyle(){return _mapType;} - int long2tileX(double lon, int z); + virtual int long2tileX(double lon, int z); - int lat2tileY(double lat, int z); + virtual int lat2tileY(double lat, int z); protected: QString _tileXYToQuadKey(int tileX, int tileY, int levelOfDetail); diff --git a/src/QtLocationPlugin/QGCMapEngine.cpp b/src/QtLocationPlugin/QGCMapEngine.cpp index 818da2a37bc39beccd562f6c475505c3e39f8305..498842fb969745ff3b5c654c2cfb85331be3b68e 100644 --- a/src/QtLocationPlugin/QGCMapEngine.cpp +++ b/src/QtLocationPlugin/QGCMapEngine.cpp @@ -236,28 +236,37 @@ QGCMapEngine::hashToType(const QString& hash) } //----------------------------------------------------------------------------- -QGCFetchTileTask* + QGCFetchTileTask* QGCMapEngine::createFetchTileTask(QString type, int x, int y, int z) { - QString hash = getTileHash(type, x, y, z); - QGCFetchTileTask* task = new QGCFetchTileTask(hash); - return task; + QString hash = getTileHash(type, x, y, z); + QGCFetchTileTask* task = new QGCFetchTileTask(hash); + return task; } //----------------------------------------------------------------------------- -QGCTileSet + QGCTileSet QGCMapEngine::getTileCount(int zoom, double topleftLon, double topleftLat, double bottomRightLon, double bottomRightLat, QString mapType) { - if(zoom < 1) zoom = 1; - if(zoom > MAX_MAP_ZOOM) zoom = MAX_MAP_ZOOM; - QGCTileSet set; - 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(set.tileX1) - static_cast(set.tileX0) + 1) * (static_cast(set.tileY1) - static_cast(set.tileY0) + 1); - set.tileSize = getQGCMapEngine()->urlFactory()->averageSizeForType(mapType) * set.tileCount; - return set; + if(zoom < 1) zoom = 1; + if(zoom > MAX_MAP_ZOOM) zoom = MAX_MAP_ZOOM; + QGCTileSet set; + if(mapType != "Airmap Elevation"){ + 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); + }else{ + set.tileX0 = getQGCMapEngine()->urlFactory()->long2tileX(mapType, topleftLon, zoom); + set.tileY0 = getQGCMapEngine()->urlFactory()->lat2tileY(mapType, bottomRightLat, zoom); + set.tileX1 = getQGCMapEngine()->urlFactory()->long2tileX(mapType, bottomRightLon, zoom); + set.tileY1 = getQGCMapEngine()->urlFactory()->lat2tileY(mapType, topleftLat, zoom); + + } + set.tileCount = (static_cast(set.tileX1) - static_cast(set.tileX0) + 1) * (static_cast(set.tileY1) - static_cast(set.tileY0) + 1); + qDebug() << "getTileCount : " << set.tileCount; + set.tileSize = getQGCMapEngine()->urlFactory()->averageSizeForType(mapType) * set.tileCount; + return set; } diff --git a/src/QtLocationPlugin/QGCMapUrlEngine.cpp b/src/QtLocationPlugin/QGCMapUrlEngine.cpp index 20c9f20ab4aaf0a7cafb5e9f6bb7528d87de8b33..d0156eff06764eb28eb9e53747a4c9c1ba7de51f 100644 --- a/src/QtLocationPlugin/QGCMapUrlEngine.cpp +++ b/src/QtLocationPlugin/QGCMapUrlEngine.cpp @@ -72,6 +72,8 @@ UrlFactory::UrlFactory() : _timeout(5 * 1000) { _providersTable["VWorld Street Map"] = new VWorldStreetMapProvider(this); _providersTable["VWorld Satellite Map"] = new VWorldSatMapProvider(this); + + _providersTable["Airmap Elevation"] = new AirmapElevationProvider(this); } void UrlFactory::registerProvider(QString name, MapProvider* provider) { @@ -121,16 +123,6 @@ QNetworkRequest UrlFactory::getTileURL(QString type, int x, int y, int zoom, qCDebug(QGCMapUrlEngineLog) << "getTileURL : map not registered :" << type; return QNetworkRequest(QUrl()); } -#if 0 - case AirmapElevation: - { - } - break; - - -//----------------------------------------------------------------------------- - -#endif //----------------------------------------------------------------------------- quint32 UrlFactory::averageSizeForType(QString type) { diff --git a/src/QtLocationPlugin/QGCMapUrlEngine.h b/src/QtLocationPlugin/QGCMapUrlEngine.h index 74e70546ddd09eadd3d98d643ed4eac33c367826..960a5c9713af46819e4b67e075cfb4427854ba34 100644 --- a/src/QtLocationPlugin/QGCMapUrlEngine.h +++ b/src/QtLocationPlugin/QGCMapUrlEngine.h @@ -22,6 +22,7 @@ #include "GenericMapProvider.h" #include "EsriMapProvider.h" #include "MapboxMapProvider.h" +#include "ElevationMapProvider.h" #define MAX_MAP_ZOOM (20.0) diff --git a/src/QtLocationPlugin/QMLControl/OfflineMap.qml b/src/QtLocationPlugin/QMLControl/OfflineMap.qml index 0a11eeb855dd528a63cd8e45980d52200e506582..63e67cb684e1785e6bedfcc8e3f842d005851acd 100644 --- a/src/QtLocationPlugin/QMLControl/OfflineMap.qml +++ b/src/QtLocationPlugin/QMLControl/OfflineMap.qml @@ -463,7 +463,7 @@ Item { Row { spacing: ScreenTools.defaultFontPixelWidth anchors.horizontalCenter: parent.horizontalCenter - visible: !_defaultSet && mapType !== "Airmap Elevation Data" + visible: !_defaultSet && mapType !== "Airmap Elevation" QGCLabel { text: qsTr("Zoom Levels:"); width: infoView._labelWidth; } QGCLabel { text: offlineMapView._currentSelection ? (offlineMapView._currentSelection.minZoom + " - " + offlineMapView._currentSelection.maxZoom) : ""; horizontalAlignment: Text.AlignRight; width: infoView._valueWidth; } } diff --git a/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc b/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc index 304d83582b1a774009fccdcce5b0f670e27ff099..31c4e27ae9bebacdbe8c00ed35bcffca9eb0375b 100644 --- a/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc +++ b/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc @@ -233,7 +233,6 @@ QGCMapEngineManager::mapTypeList(QString provider) { // Extract type name from MapName ( format : "Provider Type") QStringList mapList = getQGCMapEngine()->getMapNameList(); - qDebug()<< "mapTypeList : " << provider; mapList = mapList.filter(QRegularExpression(provider)); mapList.replaceInStrings(QRegExp("^([^\\ ]*) (.*)$"),"\\2"); mapList.removeDuplicates(); diff --git a/src/Terrain/TerrainQuery.cc b/src/Terrain/TerrainQuery.cc index b178b171ed837f26099ce7dcbb6ff73383942662..39646f7159b0758da37991d37ac6413044b66c63 100644 --- a/src/Terrain/TerrainQuery.cc +++ b/src/Terrain/TerrainQuery.cc @@ -426,13 +426,13 @@ bool TerrainTileManager::_getAltitudesForCoordinates(const QList } } else { if (_state != State::Downloading) { - QNetworkRequest request = getQGCMapEngine()->urlFactory()->getTileURL("AirmapElevation", getQGCMapEngine()->urlFactory()->long2tileX("Airmap Elevation",coordinate.longitude(), 1), getQGCMapEngine()->urlFactory()->lat2tileY("Airmap Elevation", coordinate.latitude(), 1), 1, &_networkManager); + QNetworkRequest request = getQGCMapEngine()->urlFactory()->getTileURL("Airmap Elevation", 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(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")); + spec.setMapId(getQGCMapEngine()->urlFactory()->getIdFromType("Airmap Elevation")); QGeoTiledMapReplyQGC* reply = new QGeoTiledMapReplyQGC(&_networkManager, request, spec); connect(reply, &QGeoTiledMapReplyQGC::terrainDone, this, &TerrainTileManager::_terrainDone); _state = State::Downloading; @@ -473,7 +473,7 @@ void TerrainTileManager::_terrainDone(QByteArray responseBytes, QNetworkReply::N // remove from download queue QGeoTileSpec spec = reply->tileSpec(); - QString hash = QGCMapEngine::getTileHash("AirmapElevation", spec.x(), spec.y(), spec.zoom()); + QString hash = QGCMapEngine::getTileHash("Airmap Elevation", spec.x(), spec.y(), spec.zoom()); // handle potential errors if (error != QNetworkReply::NoError) { @@ -539,7 +539,11 @@ void TerrainTileManager::_terrainDone(QByteArray responseBytes, QNetworkReply::N QString TerrainTileManager::_getTileHash(const QGeoCoordinate& coordinate) { - QString ret = QGCMapEngine::getTileHash("AirmapElevation", getQGCMapEngine()->urlFactory()->long2tileX("Airmap Elevation", coordinate.longitude(), 1), getQGCMapEngine()->urlFactory()->lat2tileY("Airmap Elevation", coordinate.latitude(), 1), 1); + QString ret = QGCMapEngine::getTileHash( + "Airmap Elevation", + 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;