7#include <QtCore/QDateTime>
8#include <QtCore/QTimer>
13 : QGeoPositionInfoSource(parent)
14 , _updateTimer(new QTimer(this))
18 _lastPosition.setTimestamp(QDateTime::currentDateTime());
19 _lastPosition.setCoordinate(QGeoCoordinate(47.3977420, 8.5455941, 488.));
20 _lastPosition.setAttribute(QGeoPositionInfo::Attribute::Direction, kHeading);
21 _lastPosition.setAttribute(QGeoPositionInfo::Attribute::GroundSpeed, kHorizontalVelocityMetersPerSec);
22 _lastPosition.setAttribute(QGeoPositionInfo::Attribute::VerticalSpeed, kVerticalVelocityMetersPerSec);
26 _updateTimer->setSingleShot(
false);
27 (void) connect(_updateTimer, &QTimer::timeout,
this, &SimulatedPosition::_updatePosition);
47 emit errorOccurred(QGeoPositionInfoSource::UpdateTimeoutError);
50void SimulatedPosition::_updatePosition()
52 const int intervalMsecs = _updateTimer->interval();
54 const QGeoCoordinate coord = _lastPosition.coordinate();
55 const qreal horizontalDistance = kHorizontalVelocityMetersPerSec * (1000. /
static_cast<qreal
>(intervalMsecs));
56 const qreal verticalDistance = kVerticalVelocityMetersPerSec * (1000. /
static_cast<qreal
>(intervalMsecs));
58 _lastPosition.setCoordinate(coord.atDistanceAndAzimuth(horizontalDistance, kHeading, verticalDistance));
59 emit positionUpdated(_lastPosition);
62void SimulatedPosition::_vehicleAdded(
Vehicle* vehicle)
75void SimulatedPosition::_vehicleHomePositionChanged(QGeoCoordinate homePosition)
77 if (homePosition.isValid()) {
78 _lastPosition.setCoordinate(homePosition);
79 if (_homePositionChangedConnection) {
80 (void) disconnect(_homePositionChangedConnection);
81 _homePositionChangedConnection = QMetaObject::Connection();
#define QGC_LOGGING_CATEGORY(name, categoryStr)
void vehicleAdded(Vehicle *vehicle)
int minimumUpdateInterval() const final
void requestUpdate(int timeout=5000) final
void startUpdates() final
QGeoCoordinate homePosition()
void homePositionChanged(const QGeoCoordinate &homePosition)