Newer
Older
1
2
3
4
5
6
7
8
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
/****************************************************************************
*
* (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.
*
****************************************************************************/
#include "AirMapAdvisories.h"
#include "AirMapManager.h"
#define ADVISORY_UPDATE_DISTANCE 500 //-- 500m threshold for updates
using namespace airmap;
AirMapAdvisories::AirMapAdvisories(AirMapSharedState& shared, QObject *parent)
: AirspaceAdvisoryProvider(parent)
, _valid(false)
, _shared(shared)
{
}
void
AirMapAdvisories::setROI(const QGeoCoordinate& center, double radiusMeters)
{
//-- If first time or we've moved more than ADVISORY_UPDATE_DISTANCE, ask for updates.
if(!_lastRoiCenter.isValid() || _lastRoiCenter.distanceTo(center) > ADVISORY_UPDATE_DISTANCE) {
_lastRoiCenter = center;
_requestAdvisories(center, radiusMeters);
}
}
void
AirMapAdvisories::_requestAdvisories(const QGeoCoordinate& coordinate, double radiusMeters)
{
qCDebug(AirMapManagerLog) << "Advisories Request";
if (!_shared.client()) {
qCDebug(AirMapManagerLog) << "No AirMap client instance. Not updating Advisories";
_valid = false;
emit advisoryChanged();
return;
}
_advisories.clear();
_valid = false;
Status::GetStatus::Parameters params;
params.longitude = coordinate.longitude();
params.latitude = coordinate.latitude();
params.weather = false;
params.buffer = radiusMeters;
_shared.client()->status().get_status_by_point(params, [this, coordinate](const Status::GetStatus::Result& result) {
if (result) {
qCDebug(AirMapManagerLog) << _advisories.size() << "Advisories Received";
_advisories = result.value().advisories;
_advisory_color = result.value().advisory_color;
if(_advisories.size()) {
_valid = true;
qCDebug(AirMapManagerLog) << "Advisory Info: " << _advisories.size() << _advisories[0].airspace.name().data();
}
} else {
qCDebug(AirMapManagerLog) << "Advisories Request Failed";
_valid = false;
}
emit advisoryChanged();
});
}