Skip to content
Snippets Groups Projects
Select Git revision
  • 1284ef09e93972920cb468e92d8671e5ac19dee5
  • master default protected
  • dev1
  • merge_branch_alt
  • original
  • rc1
  • phil
7 results

MapProvider.cpp

Blame
  • MapProvider.cpp 3.80 KiB
    /****************************************************************************
     *
     * (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
     *
     * QGroundControl is licensed according to the terms in the file
     * COPYING.md in the root of the source code directory.
     *
     ****************************************************************************/
    
    #include <QNetworkAccessManager>
    #include <QNetworkRequest>
    
    #include "MapProvider.h"
    
    MapProvider::MapProvider(const QString &referrer, const QString &imageFormat,
                             const quint32 averageSize, const QGeoMapType::MapStyle mapType, QObject* parent)
        : QObject(parent)
        , _referrer(referrer)
        , _imageFormat(imageFormat)
        , _averageSize(averageSize)
        , _mapType(mapType)
    {
        const QStringList langs = QLocale::system().uiLanguages();
        if (langs.length() > 0) {
            _language = langs[0];
        }
    }
    
    QNetworkRequest MapProvider::getTileURL(const int x, const int y, const int zoom, QNetworkAccessManager* networkManager) {
        //-- Build URL
        QNetworkRequest request;
        const QString url = _getURL(x, y, zoom, networkManager);
        if (url.isEmpty()) {
            return request;
        }
        request.setUrl(QUrl(url));
        request.setRawHeader(QByteArrayLiteral("Accept"), QByteArrayLiteral("*/*"));
        request.setRawHeader(QByteArrayLiteral("Referrer"), _referrer.toUtf8());
        request.setRawHeader(QByteArrayLiteral("User-Agent"), _userAgent);
        return request;
    }
    
    QString MapProvider::getImageFormat(const QByteArray& image) const {
        QString format;
        if (image.size() > 2) {
            if (image.startsWith(reinterpret_cast<const char*>(pngSignature)))
                format = QStringLiteral("png");
            else if (image.startsWith(reinterpret_cast<const char*>(jpegSignature)))
                format = QStringLiteral("jpg");
            else if (image.startsWith(reinterpret_cast<const char*>(gifSignature)))
                format = QStringLiteral("gif");
            else {
                return _imageFormat;
            }
        }
        return format;
    }
    
    QString MapProvider::_tileXYToQuadKey(const int tileX, const int tileY, const int levelOfDetail) const {
        QString quadKey;
        for (int i = levelOfDetail; i > 0; i--) {
            char digit = '0';
            const int  mask  = 1 << (i - 1);
            if ((tileX & mask) != 0) {
                digit++;
            }
            if ((tileY & mask) != 0) {
                digit++;
                digit++;
            }