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/QMutex>
6#include <QtCore/QObject>
7#include <QtCore/QQueue>
8#include <QtPositioning/QGeoCoordinate>
9
10class TerrainTile;
11class QNetworkAccessManager;
12class UnitTestTerrainQuery;
13
14class TerrainTileManager : public QObject
15{
16 Q_OBJECT
17
19public:
20 explicit TerrainTileManager(QObject *parent = nullptr);
22
24
28 bool getAltitudesForCoordinates(const QList<QGeoCoordinate> &coordinates, QList<double> &altitudes, bool &error);
29
30 void addCoordinateQuery(TerrainQueryInterface *terrainQueryInterface, const QList<QGeoCoordinate> &coordinates);
31 void addPathQuery(TerrainQueryInterface *terrainQueryInterface, const QGeoCoordinate &startPoint, const QGeoCoordinate &endPoint);
32 void addCarpetQuery(TerrainQueryInterface *terrainQueryInterface, const QGeoCoordinate &swCoord, const QGeoCoordinate &neCoord, bool statsOnly);
33
34private slots:
35 void _terrainDone();
36
37private:
39 static QList<QGeoCoordinate> _pathQueryToCoords(const QGeoCoordinate &fromCoord, const QGeoCoordinate &toCoord, double &distanceBetween, double &finalDistanceBetween);
40 void _tileFailed();
41 void _cacheTile(const QByteArray &data, const QString &hash);
42 TerrainTile *_getCachedTile(const QString &hash);
43 static void _processCarpetResults(const QList<double> &altitudes, int gridSizeLat, int gridSizeLon,
44 bool statsOnly, double &minHeight, double &maxHeight, QList<QList<double>> &carpet);
45
46 struct QueuedRequestInfo_t {
47 QPointer<TerrainQueryInterface> terrainQueryInterface;
49 double distanceBetween;
50 double finalDistanceBetween;
51 QList<QGeoCoordinate> coordinates;
52 bool carpetStatsOnly;
53 int carpetGridSizeLat;
54 int carpetGridSizeLon;
55 };
56
57 QQueue<QueuedRequestInfo_t> _requestQueue;
59
60 QMutex _tilesMutex;
61 QHash<QString, TerrainTile*> _tiles;
62
63 QNetworkAccessManager *_networkManager = nullptr;
64};
Error error
Base class for offline/online terrain queries.
friend class UnitTestTerrainQuery
bool getAltitudesForCoordinates(const QList< QGeoCoordinate > &coordinates, QList< double > &altitudes, bool &error)
void addPathQuery(TerrainQueryInterface *terrainQueryInterface, const QGeoCoordinate &startPoint, const QGeoCoordinate &endPoint)
void addCarpetQuery(TerrainQueryInterface *terrainQueryInterface, const QGeoCoordinate &swCoord, const QGeoCoordinate &neCoord, bool statsOnly)
static TerrainTileManager * instance()
void addCoordinateQuery(TerrainQueryInterface *terrainQueryInterface, const QList< QGeoCoordinate > &coordinates)