QGCMapEngine.h 4.83 KB
Newer Older
1 2 3 4 5 6 7 8
/****************************************************************************
 *
 *   (c) 2009-2016 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.
 *
 ****************************************************************************/
dogmaphobic's avatar
dogmaphobic committed
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88


/**
 * @file
 *   @brief Map Tile Cache
 *
 *   @author Gus Grubba <mavlink@grubba.com>
 *
 */

#ifndef QGC_MAP_ENGINE_H
#define QGC_MAP_ENGINE_H

#include <QString>

#include "QGCMapUrlEngine.h"
#include "QGCMapEngineData.h"
#include "QGCTileCacheWorker.h"

//-----------------------------------------------------------------------------
class QGCTileSet
{
public:
    QGCTileSet()
    {
        clear();
    }
    QGCTileSet& operator += (QGCTileSet& other)
    {
        tileX0      += other.tileX0;
        tileX1      += other.tileX1;
        tileY0      += other.tileY0;
        tileY1      += other.tileY1;
        tileCount   += other.tileCount;
        tileSize    += other.tileSize;
        return *this;
    }
    void clear()
    {
        tileX0      = 0;
        tileX1      = 0;
        tileY0      = 0;
        tileY1      = 0;
        tileCount   = 0;
        tileSize    = 0;
    }

    int         tileX0;
    int         tileX1;
    int         tileY0;
    int         tileY1;
    quint64     tileCount;
    quint64     tileSize;
};

//-----------------------------------------------------------------------------
class QGCMapEngine : public QObject
{
    Q_OBJECT
public:
    QGCMapEngine                ();
    ~QGCMapEngine               ();

    void                        init                ();
    void                        addTask             (QGCMapTask *task);
    void                        cacheTile           (UrlFactory::MapType type, int x, int y, int z, const QByteArray& image, const QString& format, qulonglong set = UINT64_MAX);
    void                        cacheTile           (UrlFactory::MapType type, const QString& hash, const QByteArray& image, const QString& format, qulonglong set = UINT64_MAX);
    QGCFetchTileTask*           createFetchTileTask (UrlFactory::MapType type, int x, int y, int z);
    QStringList                 getMapNameList      ();
    const QString               userAgent           () { return _userAgent; }
    void                        setUserAgent        (const QString& ua) { _userAgent = ua; }
    UrlFactory::MapType         hashToType          (const QString& hash);
    QString                     getMapBoxToken      ();
    void                        setMapBoxToken      (const QString& token);
    quint32                     getMaxDiskCache     ();
    void                        setMaxDiskCache     (quint32 size);
    quint32                     getMaxMemCache      ();
    void                        setMaxMemCache      (quint32 size);
    const QString               getCachePath        () { return _cachePath; }
    const QString               getCacheFilename    () { return _cacheFile; }
dogmaphobic's avatar
dogmaphobic committed
89
    bool                        wasCacheReset       () { return _cacheWasReset; }
dogmaphobic's avatar
dogmaphobic committed
90 91 92 93 94 95 96 97 98 99

    UrlFactory*                 urlFactory          () { return _urlFactory; }

    //-- Tile Math
    static QGCTileSet           getTileCount        (int zoom, double topleftLon, double topleftLat, double bottomRightLon, double bottomRightLat, UrlFactory::MapType mapType);
    static int                  long2tileX          (double lon, int z);
    static int                  lat2tileY           (double lat, int z);
    static QString              getTileHash         (UrlFactory::MapType type, int x, int y, int z);
    static UrlFactory::MapType  getTypeFromName     (const QString &name);
    static QString              bigSizeToString     (quint64 size);
dogmaphobic's avatar
dogmaphobic committed
100
    static QString              numberToString      (quint64 number);
dogmaphobic's avatar
dogmaphobic committed
101 102 103 104 105 106 107 108 109
    static int                  concurrentDownloads (UrlFactory::MapType type);

private slots:
    void _updateTotals          (quint32 totaltiles, quint64 totalsize, quint32 defaulttiles, quint64 defaultsize);
    void _pruned                ();

signals:
    void updateTotals           (quint32 totaltiles, quint64 totalsize, quint32 defaulttiles, quint64 defaultsize);

110
private:
dogmaphobic's avatar
dogmaphobic committed
111
    void _wipeOldCaches         ();
dogmaphobic's avatar
dogmaphobic committed
112
    void _checkWipeDirectory    (const QString& dirPath);
dogmaphobic's avatar
dogmaphobic committed
113
    bool _wipeDirectory         (const QString& dirPath);
114

dogmaphobic's avatar
dogmaphobic committed
115 116 117 118 119 120 121 122 123 124
private:
    QGCCacheWorker          _worker;
    QString                 _cachePath;
    QString                 _cacheFile;
    QString                 _mapBoxToken;
    UrlFactory*             _urlFactory;
    QString                 _userAgent;
    quint32                 _maxDiskCache;
    quint32                 _maxMemCache;
    bool                    _prunning;
dogmaphobic's avatar
dogmaphobic committed
125
    bool                    _cacheWasReset;
dogmaphobic's avatar
dogmaphobic committed
126 127 128 129 130 131
};

extern QGCMapEngine*    getQGCMapEngine();
extern void             destroyMapEngine();

#endif // QGC_MAP_ENGINE_H