6#include <QtCore/QDateTime>
7#include <QtCore/QTimer>
12 : QGeoPositionInfoSource(parent)
13 , _updateTimer(new QTimer(this))
17 _lastPosition.setTimestamp(QDateTime::currentDateTime());
18 _lastPosition.setCoordinate(QGeoCoordinate(47.3977420, 8.5455941, 488.));
19 _lastPosition.setAttribute(QGeoPositionInfo::Attribute::Direction, kHeading);
20 _lastPosition.setAttribute(QGeoPositionInfo::Attribute::GroundSpeed, kHorizontalVelocityMetersPerSec);
21 _lastPosition.setAttribute(QGeoPositionInfo::Attribute::VerticalSpeed, kVerticalVelocityMetersPerSec);
25 _updateTimer->setSingleShot(
false);
26 (void) connect(_updateTimer, &QTimer::timeout,
this, &SimulatedPosition::_updatePosition);
46 emit errorOccurred(QGeoPositionInfoSource::UpdateTimeoutError);
49void SimulatedPosition::_updatePosition()
51 const int intervalMsecs = _updateTimer->interval();
53 const QGeoCoordinate coord = _lastPosition.coordinate();
54 const qreal horizontalDistance = kHorizontalVelocityMetersPerSec * (1000. /
static_cast<qreal
>(intervalMsecs));
55 const qreal verticalDistance = kVerticalVelocityMetersPerSec * (1000. /
static_cast<qreal
>(intervalMsecs));
57 _lastPosition.setCoordinate(coord.atDistanceAndAzimuth(horizontalDistance, kHeading, verticalDistance));
58 emit positionUpdated(_lastPosition);
61void SimulatedPosition::_vehicleAdded(
Vehicle* vehicle)
74void SimulatedPosition::_vehicleHomePositionChanged(QGeoCoordinate homePosition)
76 if (homePosition.isValid()) {
77 _lastPosition.setCoordinate(homePosition);
78 if (_homePositionChangedConnection) {
79 (void) disconnect(_homePositionChangedConnection);
80 _homePositionChangedConnection = QMetaObject::Connection();
#define QGC_LOGGING_CATEGORY(name, categoryStr)
static MultiVehicleManager * instance()
void vehicleAdded(Vehicle *vehicle)
int minimumUpdateInterval() const final
void requestUpdate(int timeout=5000) final
void startUpdates() final
QGeoCoordinate homePosition()
void homePositionChanged(const QGeoCoordinate &homePosition)