Newer
Older
/****************************************************************************
*
* (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.
*
****************************************************************************/
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
/**
* @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);
quint32 getMaxDiskCache ();
void setMaxDiskCache (quint32 size);
quint32 getMaxMemCache ();
void setMaxMemCache (quint32 size);
const QString getCachePath () { return _cachePath; }
const QString getCacheFilename () { return _cacheFile; }
bool isInternetActive () { return _isInternetActive; }
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 int long2elevationTileX (double lon, int z);
static int lat2elevationTileY (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);
static QString storageFreeSizeToString(quint64 size_MB);
static QString numberToString (quint64 number);
static int concurrentDownloads (UrlFactory::MapType 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 ();
void _internetStatus (bool active);
signals:
void updateTotals (quint32 totaltiles, quint64 totalsize, quint32 defaulttiles, quint64 defaultsize);
private:
QGCCacheWorker _worker;
QString _cachePath;
QString _cacheFile;
UrlFactory* _urlFactory;
QString _userAgent;
quint32 _maxDiskCache;
quint32 _maxMemCache;
bool _prunning;
};
extern QGCMapEngine* getQGCMapEngine();
extern void destroyMapEngine();
#endif // QGC_MAP_ENGINE_H