ElevationMapProvider.cpp 2.28 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#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() {}

//-----------------------------------------------------------------------------
16
int AirmapElevationProvider::long2tileX(double lon, int z) {
17 18 19 20 21
    Q_UNUSED(z);
    return static_cast<int>(floor((lon + 180.0) / srtm1TileSize));
}

//-----------------------------------------------------------------------------
22
int AirmapElevationProvider::lat2tileY(double lat, int z) {
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
    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);
}

40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
QGCTileSet AirmapElevationProvider::getTileCount(int zoom, double topleftLon,
                                                 double topleftLat,
                                                 double bottomRightLon,
                                                 double bottomRightLat) {
    QGCTileSet set;
    set.tileX0 = long2tileX(topleftLon, zoom);
    set.tileY0 = lat2tileY(bottomRightLat, zoom);
    set.tileX1 = long2tileX(bottomRightLon, zoom);
    set.tileY1 = lat2tileY(topleftLat, 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 = getAverageSize() * set.tileCount;

    return set;
}