QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
TerrainQueryInterface.cc
Go to the documentation of this file.
4
5#include <QtNetwork/QNetworkAccessManager>
6#include <QtPositioning/QGeoCoordinate>
7
8#include "QGCNetworkHelper.h"
9
10QGC_LOGGING_CATEGORY(TerrainQueryInterfaceLog, "Terrain.TerrainQueryInterface")
11
13 : QObject(parent)
14{
15 qCDebug(TerrainQueryInterfaceLog) << this;
16}
17
19{
20 qCDebug(TerrainQueryInterfaceLog) << this;
21}
22
23void TerrainQueryInterface::requestCoordinateHeights(const QList<QGeoCoordinate> &coordinates)
24{
25 Q_UNUSED(coordinates);
26 qCWarning(TerrainQueryInterfaceLog) << "Not Supported";
27}
28
29void TerrainQueryInterface::requestPathHeights(const QGeoCoordinate &fromCoord, const QGeoCoordinate &toCoord)
30{
31 Q_UNUSED(fromCoord);
32 Q_UNUSED(toCoord);
33 qCWarning(TerrainQueryInterfaceLog) << "Not Supported";
34}
35
36void TerrainQueryInterface::requestCarpetHeights(const QGeoCoordinate &swCoord, const QGeoCoordinate &neCoord, bool statsOnly)
37{
38 Q_UNUSED(swCoord);
39 Q_UNUSED(neCoord);
40 Q_UNUSED(statsOnly);
41 qCWarning(TerrainQueryInterfaceLog) << "Not Supported";
42}
43
44void TerrainQueryInterface::signalCoordinateHeights(bool success, const QList<double> &heights)
45{
46 emit coordinateHeightsReceived(success, heights);
47}
48
49void TerrainQueryInterface::signalPathHeights(bool success, double distanceBetween, double finalDistanceBetween, const QList<double> &heights)
50{
51 emit pathHeightsReceived(success, distanceBetween, finalDistanceBetween, heights);
52}
53
54void TerrainQueryInterface::signalCarpetHeights(bool success, double minHeight, double maxHeight, const QList<QList<double>> &carpet)
55{
56 emit carpetHeightsReceived(success, minHeight, maxHeight, carpet);
57}
58
60{
61 switch (_queryMode) {
63 emit coordinateHeightsReceived(false, QList<double>());
64 break;
66 emit pathHeightsReceived(false, qQNaN(), qQNaN(), QList<double>());
67 break;
69 emit carpetHeightsReceived(false, qQNaN(), qQNaN(), QList<QList<double>>());
70 break;
71 default:
72 qCWarning(TerrainQueryInterfaceLog) << "Query Mode Not Supported";
73 break;
74 }
75}
76
77/*===========================================================================*/
78
80 : TerrainQueryInterface(parent)
81{
82 qCDebug(TerrainQueryInterfaceLog) << this;
83}
84
86{
87 qCDebug(TerrainQueryInterfaceLog) << this;
88}
89
90void TerrainOfflineQuery::requestCoordinateHeights(const QList<QGeoCoordinate> &coordinates)
91{
92 if (coordinates.isEmpty()) {
93 return;
94 }
95
98}
99
100void TerrainOfflineQuery::requestPathHeights(const QGeoCoordinate &fromCoord, const QGeoCoordinate &toCoord)
101{
103 TerrainTileManager::instance()->addPathQuery(this, fromCoord, toCoord);
104}
105
106void TerrainOfflineQuery::requestCarpetHeights(const QGeoCoordinate &swCoord, const QGeoCoordinate &neCoord, bool statsOnly)
107{
109 TerrainTileManager::instance()->addCarpetQuery(this, swCoord, neCoord, statsOnly);
110}
111
112/*===========================================================================*/
113
115 : TerrainQueryInterface(parent)
116 , _networkManager(new QNetworkAccessManager(this))
117{
118 qCDebug(TerrainQueryInterfaceLog) << this;
119
120 qCDebug(TerrainQueryInterfaceLog) << "supportsSsl" << QSslSocket::supportsSsl() << "sslLibraryBuildVersionString" << QSslSocket::sslLibraryBuildVersionString();
121
123}
124
126{
127 qCDebug(TerrainQueryInterfaceLog) << this;
128}
129
131{
132 QNetworkReply* const reply = qobject_cast<QNetworkReply*>(QObject::sender());
133 if (!reply) {
134 qCWarning(TerrainQueryInterfaceLog) << "null reply";
135 return;
136 }
137
138 if (reply->error() != QNetworkReply::NoError) {
139 qCWarning(TerrainQueryInterfaceLog) << "error:url:data" << reply->error() << reply->url() << reply->readAll();
140 reply->deleteLater();
142 return;
143 }
144
145 reply->deleteLater();
146
147 qCDebug(TerrainQueryInterfaceLog) << "success (base class handler - response not processed)";
148}
149
150void TerrainOnlineQuery::_requestError(QNetworkReply::NetworkError code)
151{
152 if (code != QNetworkReply::NoError) {
153 QNetworkReply* const reply = qobject_cast<QNetworkReply*>(QObject::sender());
154 if (!reply) {
155 qCWarning(TerrainQueryInterfaceLog) << "error:" << code << "(null reply)";
156 return;
157 }
158 qCWarning(TerrainQueryInterfaceLog) << "error:url:data" << reply->error() << reply->url() << reply->readAll();
159 }
160}
161
162void TerrainOnlineQuery::_sslErrors(const QList<QSslError> &errors)
163{
164 for (const QSslError &error : errors) {
165 qCWarning(TerrainQueryInterfaceLog) << "SSL error:" << error.errorString();
166
167 const QSslCertificate &certificate = error.certificate();
168 if (!certificate.isNull()) {
169 qCWarning(TerrainQueryInterfaceLog) << "SSL Certificate problem:" << certificate.toText();
170 }
171 }
172}
Error error
#define QGC_LOGGING_CATEGORY(name, categoryStr)
TerrainOfflineQuery(QObject *parent=nullptr)
void requestCarpetHeights(const QGeoCoordinate &swCoord, const QGeoCoordinate &neCoord, bool statsOnly) override
void requestCoordinateHeights(const QList< QGeoCoordinate > &coordinates) override
void requestPathHeights(const QGeoCoordinate &fromCoord, const QGeoCoordinate &toCoord) override
QNetworkAccessManager * _networkManager
virtual void _requestError(QNetworkReply::NetworkError code)
TerrainOnlineQuery(QObject *parent=nullptr)
virtual void _sslErrors(const QList< QSslError > &errors)
Base class for offline/online terrain queries.
TerrainQuery::QueryMode _queryMode
void pathHeightsReceived(bool success, double distanceBetween, double finalDistanceBetween, const QList< double > &heights)
void signalPathHeights(bool success, double distanceBetween, double finalDistanceBetween, const QList< double > &heights)
void signalCoordinateHeights(bool success, const QList< double > &heights)
void signalCarpetHeights(bool success, double minHeight, double maxHeight, const QList< QList< double > > &carpet)
void carpetHeightsReceived(bool success, double minHeight, double maxHeight, const QList< QList< double > > &carpet)
virtual void requestPathHeights(const QGeoCoordinate &fromCoord, const QGeoCoordinate &toCoord)
virtual void requestCoordinateHeights(const QList< QGeoCoordinate > &coordinates)
void coordinateHeightsReceived(bool success, const QList< double > &heights)
virtual void requestCarpetHeights(const QGeoCoordinate &swCoord, const QGeoCoordinate &neCoord, bool statsOnly)
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)
void configureProxy(QNetworkAccessManager *manager)
Set up default proxy configuration on a network manager.