diff --git a/src/core/positioning/internalgnssreceiver.cpp b/src/core/positioning/internalgnssreceiver.cpp index d6f187f2ca..d092d3b145 100644 --- a/src/core/positioning/internalgnssreceiver.cpp +++ b/src/core/positioning/internalgnssreceiver.cpp @@ -177,7 +177,7 @@ void InternalGnssReceiver::handleSatellitesInUseUpdated( const QList( mSatellitesID.size() ), QChar( 'A' ), mSatellitesID, mSatelliteInformationValid, mLastGnssPositionInformation.verticalSpeed(), mLastGnssPositionInformation.magneticVariation(), diff --git a/src/core/positioning/positioningsource.cpp b/src/core/positioning/positioningsource.cpp index a4f3e660c6..b5661617f9 100644 --- a/src/core/positioning/positioningsource.cpp +++ b/src/core/positioning/positioningsource.cpp @@ -326,7 +326,7 @@ void PositioningSource::lastGnssPositionInformationChanged( const GnssPositionIn lastGnssPositionInformation.vdop(), lastGnssPositionInformation.hacc(), lastGnssPositionInformation.vacc(), - lastGnssPositionInformation.utcDateTime().isValid() ? lastGnssPositionInformation.utcDateTime() : QDateTime::currentDateTimeUtc(), + lastGnssPositionInformation.utcDateTime(), lastGnssPositionInformation.fixMode(), lastGnssPositionInformation.fixType(), lastGnssPositionInformation.quality(), diff --git a/src/core/tracker.cpp b/src/core/tracker.cpp index 0651d72619..eae40b3807 100644 --- a/src/core/tracker.cpp +++ b/src/core/tracker.cpp @@ -306,16 +306,17 @@ void Tracker::processPositionInformation( const GnssPositionInformation &positio if ( !mIsActive && !mIsReplaying ) return; - mLastDevicePositionTimestampMSecsSinceEpoch = positionInformation.utcDateTime().toMSecsSinceEpoch(); + mLastDevicePositionTimestampMSecsSinceEpoch = positionInformation.utcDateTime().isValid() ? positionInformation.utcDateTime().toMSecsSinceEpoch() : QDateTime::currentDateTimeUtc().toMSecsSinceEpoch(); double measureValue = 0.0; switch ( mMeasureType ) { case Tracker::SecondsSinceStart: - measureValue = positionInformation.utcDateTime().toSecsSinceEpoch() - mStartPositionTimestamp.toSecsSinceEpoch(); + if ( positionInformation.utcDateTime().isValid() && mStartPositionTimestamp.isValid() ) + measureValue = positionInformation.utcDateTime().toSecsSinceEpoch() - mStartPositionTimestamp.toSecsSinceEpoch(); break; case Tracker::Timestamp: - measureValue = positionInformation.utcDateTime().toSecsSinceEpoch(); + measureValue = positionInformation.utcDateTime().isValid() ? positionInformation.utcDateTime().toSecsSinceEpoch() : QDateTime::currentDateTimeUtc().toSecsSinceEpoch(); break; case Tracker::GroundSpeed: measureValue = positionInformation.speed(); diff --git a/src/core/utils/expressioncontextutils.cpp b/src/core/utils/expressioncontextutils.cpp index ca0815bc5e..a620860651 100644 --- a/src/core/utils/expressioncontextutils.cpp +++ b/src/core/utils/expressioncontextutils.cpp @@ -44,7 +44,9 @@ QgsExpressionContextScope *ExpressionContextUtils::positionScope( const GnssPosi const QgsGeometry point = QgsGeometry( new QgsPoint( positionInformation.longitude(), positionInformation.latitude(), positionInformation.elevation() ) ); addPositionVariable( scope, QStringLiteral( "coordinate" ), QVariant::fromValue( point ), positionLocked ); - addPositionVariable( scope, QStringLiteral( "timestamp" ), positionInformation.utcDateTime(), positionLocked ); + addPositionVariable( scope, QStringLiteral( "timestamp" ), + positionInformation.utcDateTime().isValid() ? positionInformation.utcDateTime() : QDateTime::currentDateTimeUtc(), + positionLocked ); addPositionVariable( scope, QStringLiteral( "direction" ), positionInformation.direction(), positionLocked ); // Speed direction addPositionVariable( scope, QStringLiteral( "ground_speed" ), positionInformation.speed(), positionLocked ); addPositionVariable( scope, QStringLiteral( "orientation" ), positionInformation.orientation(), positionLocked ); // Compass/magnetometer orientation diff --git a/src/core/utils/fileutils.cpp b/src/core/utils/fileutils.cpp index f2fdc38ba5..d01faa3d16 100644 --- a/src/core/utils/fileutils.cpp +++ b/src/core/utils/fileutils.cpp @@ -373,8 +373,12 @@ void FileUtils::addImageMetadata( const QString &imagePath, const GnssPositionIn metadata["Exif.GPSInfo.GPSSpeedRef"] = "K"; } - metadata["Exif.GPSInfo.GPSDateStamp"] = positionInformation.utcDateTime().date(); - metadata["Exif.GPSInfo.GPSTimeStamp"] = positionInformation.utcDateTime().time(); + // slight change in behaviour, but more correct + if ( positionInformation.utcDateTime().isValid() ) + { + metadata["Exif.GPSInfo.GPSDateStamp"] = positionInformation.utcDateTime().date(); + metadata["Exif.GPSInfo.GPSTimeStamp"] = positionInformation.utcDateTime().time(); + } metadata["Exif.GPSInfo.GPSSatellites"] = QString::number( positionInformation.satellitesUsed() ).rightJustified( 2, '0' ); diff --git a/src/core/utils/positioningutils.cpp b/src/core/utils/positioningutils.cpp index f18f53ff30..1cf274b5e6 100644 --- a/src/core/utils/positioningutils.cpp +++ b/src/core/utils/positioningutils.cpp @@ -74,7 +74,7 @@ GnssPositionInformation PositioningUtils::averagedPositionInformation( const QLi double verticalSpeed = std::numeric_limits::quiet_NaN(); double magneticVariation = std::numeric_limits::quiet_NaN(); - QDateTime utcDateTime = positionsInformation.last().utcDateTime(); + QDateTime utcDateTime = positionsInformation.last().utcDateTime().isValid() ? positionsInformation.last().utcDateTime() : QDateTime::currentDateTimeUtc(); QList satellitesInView = positionsInformation.at( 0 ).satellitesInView(); int satellitesUsed = satellitesInView.size();