Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions app/position/positionkit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ QString PositionKit::positionCrs3DGeoidModelName()
return mVerticalCrs.description();
}

// for internal providers return EGM96 model
if ( mPositionProvider->type() == QStringLiteral( "internal" ) && !mPosition.isMock )
// for internal providers return EGM96 model if it's not mock, and we haven't got orthometric height
if ( mPositionProvider->type() == QStringLiteral( "internal" ) && !mPosition.isMock && !std::isnan( mPosition.elevation_diff ) )
{
return QgsCoordinateReferenceSystem::fromEpsgId( 5773 ).description();
}
Expand Down
7 changes: 3 additions & 4 deletions app/position/positiontransformer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -122,9 +122,8 @@ GeoPosition PositionTransformer::processInternalIosPosition( QGeoPositionInfo &g
QgsPoint geoidPosition;

const bool isInternalProviderEllipsoidAltitude = !isMockedLocation && isEllipsoidalAltitude;
const bool isMockedProviderEllipsoidAltitude = isMockedLocation && isEllipsoidalAltitude;

if ( isInternalProviderEllipsoidAltitude || ( isMockedProviderEllipsoidAltitude && !mSkipElevationTransformation ) )
// with mocked position we expect ellipsoid elevation
if ( isInternalProviderEllipsoidAltitude || ( isMockedLocation && !mSkipElevationTransformation ) )
{
geoidPosition = InputUtils::transformPoint(
mSourceCrs,
Expand Down Expand Up @@ -153,7 +152,7 @@ GeoPosition PositionTransformer::processInternalIosPosition( QGeoPositionInfo &g
// - on iOS - it would return MSL altitude, but we have a custom patch in vcpkg to return
// ellipsoid altitude, if it's available (so we do not rely on geoid model of unknown quality/resolution),
// or we get orthometric altitude from mocked location, but the altitude separation is unknown
if ( isEllipsoidalAltitude && !mSkipElevationTransformation )
if ( isInternalProviderEllipsoidAltitude || ( isMockedLocation && !mSkipElevationTransformation ) )
{
const double ellipsoidAltitude = geoPosition.coordinate().altitude();
const double geoidSeparation = ellipsoidAltitude - geoidPosition.z();
Expand Down
20 changes: 2 additions & 18 deletions app/test/testposition.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -702,30 +702,14 @@ void TestPosition::testPositionTransformerInternalIosPosition()
QVERIFY( !geoPosition.hasAttribute( QGeoPositionInfo::VerticalSpeed ) );
QVERIFY( !geoPosition.hasAttribute( QGeoPositionInfo::MagneticVariation ) );


// ellipsoid elevation
geoPosition.setAttribute( QGeoPositionInfo::VerticalSpeed, 1 );
// mocked
geoPosition.setAttribute( QGeoPositionInfo::MagneticVariation, 1 );
// transform with pass through disabled, position is mocked and ellipsoid
newPosition = positionTransformer.processInternalIosPosition( geoPosition );

QVERIFY( qgsDoubleNear( newPosition.elevation, 127.53574931171875 ) );
QVERIFY( qgsDoubleNear( newPosition.elevation_diff, 43.764250688281265 ) );
QVERIFY( newPosition.isMock );
QVERIFY( !geoPosition.hasAttribute( QGeoPositionInfo::VerticalSpeed ) );
QVERIFY( !geoPosition.hasAttribute( QGeoPositionInfo::MagneticVariation ) );


// mocked
geoPosition.setAttribute( QGeoPositionInfo::MagneticVariation, 1 );
// transform with pass through disabled, position is mocked and orthometric
newPosition = positionTransformer.processInternalIosPosition( geoPosition );

QCOMPARE( newPosition.elevation, 171.3 );
QCOMPARE( newPosition.elevation_diff, std::numeric_limits<double>::quiet_NaN() );
QCOMPARE( newPosition.elevation, 127.53574931171875 );
QCOMPARE( newPosition.elevation_diff, 43.764250688281265 );
QVERIFY( newPosition.isMock );
QVERIFY( !geoPosition.hasAttribute( QGeoPositionInfo::VerticalSpeed ) );
QVERIFY( !geoPosition.hasAttribute( QGeoPositionInfo::MagneticVariation ) );


Expand Down
Loading