diff --git a/src/PositionManager/PositionManager.cpp b/src/PositionManager/PositionManager.cpp index 0a15dbd..536fb05 100644 --- a/src/PositionManager/PositionManager.cpp +++ b/src/PositionManager/PositionManager.cpp @@ -81,9 +81,12 @@ void QGCPositionManager::_positionUpdated(const QGeoPositionInfo &update) if (update.isValid() && update.hasAttribute(QGeoPositionInfo::HorizontalAccuracy)) { // Note that gcsPosition filters out possible crap values if (qAbs(update.coordinate().latitude()) > 0.001 && - qAbs(update.coordinate().longitude()) > 0.001 && - update.attribute(QGeoPositionInfo::HorizontalAccuracy) <= MinHorizonalAccuracyMeters) { - newGCSPosition = update.coordinate(); + qAbs(update.coordinate().longitude()) > 0.001 ) { + _gcsPositionHorizontalAccuracy = update.attribute(QGeoPositionInfo::HorizontalAccuracy); + if (_gcsPositionHorizontalAccuracy <= MinHorizonalAccuracyMeters) { + newGCSPosition = update.coordinate(); + } + emit gcsPositionHorizontalAccuracyChanged(); } } if (newGCSPosition != _gcsPosition) { diff --git a/src/PositionManager/PositionManager.h b/src/PositionManager/PositionManager.h index 4c6575e..5654640 100644 --- a/src/PositionManager/PositionManager.h +++ b/src/PositionManager/PositionManager.h @@ -27,6 +27,8 @@ public: Q_PROPERTY(QGeoCoordinate gcsPosition READ gcsPosition NOTIFY gcsPositionChanged) Q_PROPERTY(qreal gcsHeading READ gcsHeading NOTIFY gcsHeadingChanged) + Q_PROPERTY(qreal gcsPositionHorizontalAccuracy READ gcsPositionHorizontalAccuracy + NOTIFY gcsPositionHorizontalAccuracyChanged) enum QGCPositionSource { Simulated, @@ -37,6 +39,7 @@ public: QGeoCoordinate gcsPosition (void) { return _gcsPosition; } qreal gcsHeading (void) const{ return _gcsHeading; } + qreal gcsPositionHorizontalAccuracy(void) const { return _gcsPositionHorizontalAccuracy; } QGeoPositionInfo geoPositionInfo (void) const { return _geoPositionInfo; } void setPositionSource (QGCPositionSource source); int updateInterval (void) const; @@ -54,12 +57,14 @@ signals: void gcsPositionChanged(QGeoCoordinate gcsPosition); void gcsHeadingChanged(qreal gcsHeading); void positionInfoUpdated(QGeoPositionInfo update); + void gcsPositionHorizontalAccuracyChanged(); private: int _updateInterval = 0; QGeoPositionInfo _geoPositionInfo; QGeoCoordinate _gcsPosition; qreal _gcsHeading = qQNaN(); + qreal _gcsPositionHorizontalAccuracy = std::numeric_limits::infinity(); QGeoPositionInfoSource* _currentSource = nullptr; QGeoPositionInfoSource* _defaultSource = nullptr;