QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
TerrainTileManager.h
Go to the documentation of this file.
1#pragma once
2
4
5#include <QtCore/QLoggingCategory>
6#include <QtCore/QMutex>
7#include <QtCore/QObject>
8#include <QtCore/QQueue>
9#include <QtPositioning/QGeoCoordinate>
10
11class TerrainTile;
12class QNetworkAccessManager;
13class UnitTestTerrainQuery;
14
15Q_DECLARE_LOGGING_CATEGORY(TerrainTileManagerLog)
16
17class TerrainTileManager : public QObject
18{
19 Q_OBJECT
20
21 friend class UnitTestTerrainQuery;
22public:
23 explicit TerrainTileManager(QObject *parent = nullptr);
25
26 static TerrainTileManager *instance();
27
31 bool getAltitudesForCoordinates(const QList<QGeoCoordinate> &coordinates, QList<double> &altitudes, bool &error);
32
33 void addCoordinateQuery(TerrainQueryInterface *terrainQueryInterface, const QList<QGeoCoordinate> &coordinates);
34 void addPathQuery(TerrainQueryInterface *terrainQueryInterface, const QGeoCoordinate &startPoint, const QGeoCoordinate &endPoint);
35 void addCarpetQuery(TerrainQueryInterface *terrainQueryInterface, const QGeoCoordinate &swCoord, const QGeoCoordinate &neCoord, bool statsOnly);
36
37private slots:
38 void _terrainDone();
39
40private:
42 static QList<QGeoCoordinate> _pathQueryToCoords(const QGeoCoordinate &fromCoord, const QGeoCoordinate &toCoord, double &distanceBetween, double &finalDistanceBetween);
43 void _tileFailed();
44 void _cacheTile(const QByteArray &data, const QString &hash);
45 TerrainTile *_getCachedTile(const QString &hash);
46 static void _processCarpetResults(const QList<double> &altitudes, int gridSizeLat, int gridSizeLon,
47 bool statsOnly, double &minHeight, double &maxHeight, QList<QList<double>> &carpet);
48
49 struct QueuedRequestInfo_t {
50 QPointer<TerrainQueryInterface> terrainQueryInterface;
52 double distanceBetween;
53 double finalDistanceBetween;
54 QList<QGeoCoordinate> coordinates;
55 bool carpetStatsOnly;
56 int carpetGridSizeLat;
57 int carpetGridSizeLon;
58 };
59
60 QQueue<QueuedRequestInfo_t> _requestQueue;
62
63 QMutex _tilesMutex;
64 QHash<QString, TerrainTile*> _tiles;
65
66 QNetworkAccessManager *_networkManager = nullptr;
67};
Q_DECLARE_LOGGING_CATEGORY(AndroidSerialLog)
Error error
Base class for offline/online terrain queries.