Skip to content

Commit 6fed7f6

Browse files
authored
Fix minor position issues on iOS (#4366)
1 parent 4846648 commit 6fed7f6

3 files changed

Lines changed: 7 additions & 24 deletions

File tree

app/position/positionkit.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ QString PositionKit::positionCrs3DGeoidModelName()
5050
return mVerticalCrs.description();
5151
}
5252

53-
// for internal providers return EGM96 model
54-
if ( mPositionProvider->type() == QStringLiteral( "internal" ) && !mPosition.isMock )
53+
// for internal providers return EGM96 model if it's not mock, and we haven't got orthometric height
54+
if ( mPositionProvider->type() == QStringLiteral( "internal" ) && !mPosition.isMock && !std::isnan( mPosition.elevation_diff ) )
5555
{
5656
return QgsCoordinateReferenceSystem::fromEpsgId( 5773 ).description();
5757
}

app/position/positiontransformer.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,8 @@ GeoPosition PositionTransformer::processInternalIosPosition( QGeoPositionInfo &g
122122
QgsPoint geoidPosition;
123123

124124
const bool isInternalProviderEllipsoidAltitude = !isMockedLocation && isEllipsoidalAltitude;
125-
const bool isMockedProviderEllipsoidAltitude = isMockedLocation && isEllipsoidalAltitude;
126-
127-
if ( isInternalProviderEllipsoidAltitude || ( isMockedProviderEllipsoidAltitude && !mSkipElevationTransformation ) )
125+
// with mocked position we expect ellipsoid elevation
126+
if ( isInternalProviderEllipsoidAltitude || ( isMockedLocation && !mSkipElevationTransformation ) )
128127
{
129128
geoidPosition = InputUtils::transformPoint(
130129
mSourceCrs,
@@ -153,7 +152,7 @@ GeoPosition PositionTransformer::processInternalIosPosition( QGeoPositionInfo &g
153152
// - on iOS - it would return MSL altitude, but we have a custom patch in vcpkg to return
154153
// ellipsoid altitude, if it's available (so we do not rely on geoid model of unknown quality/resolution),
155154
// or we get orthometric altitude from mocked location, but the altitude separation is unknown
156-
if ( isEllipsoidalAltitude && !mSkipElevationTransformation )
155+
if ( isInternalProviderEllipsoidAltitude || ( isMockedLocation && !mSkipElevationTransformation ) )
157156
{
158157
const double ellipsoidAltitude = geoPosition.coordinate().altitude();
159158
const double geoidSeparation = ellipsoidAltitude - geoidPosition.z();

app/test/testposition.cpp

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -702,30 +702,14 @@ void TestPosition::testPositionTransformerInternalIosPosition()
702702
QVERIFY( !geoPosition.hasAttribute( QGeoPositionInfo::VerticalSpeed ) );
703703
QVERIFY( !geoPosition.hasAttribute( QGeoPositionInfo::MagneticVariation ) );
704704

705-
706-
// ellipsoid elevation
707-
geoPosition.setAttribute( QGeoPositionInfo::VerticalSpeed, 1 );
708-
// mocked
709-
geoPosition.setAttribute( QGeoPositionInfo::MagneticVariation, 1 );
710-
// transform with pass through disabled, position is mocked and ellipsoid
711-
newPosition = positionTransformer.processInternalIosPosition( geoPosition );
712-
713-
QVERIFY( qgsDoubleNear( newPosition.elevation, 127.53574931171875 ) );
714-
QVERIFY( qgsDoubleNear( newPosition.elevation_diff, 43.764250688281265 ) );
715-
QVERIFY( newPosition.isMock );
716-
QVERIFY( !geoPosition.hasAttribute( QGeoPositionInfo::VerticalSpeed ) );
717-
QVERIFY( !geoPosition.hasAttribute( QGeoPositionInfo::MagneticVariation ) );
718-
719-
720705
// mocked
721706
geoPosition.setAttribute( QGeoPositionInfo::MagneticVariation, 1 );
722707
// transform with pass through disabled, position is mocked and orthometric
723708
newPosition = positionTransformer.processInternalIosPosition( geoPosition );
724709

725-
QCOMPARE( newPosition.elevation, 171.3 );
726-
QCOMPARE( newPosition.elevation_diff, std::numeric_limits<double>::quiet_NaN() );
710+
QCOMPARE( newPosition.elevation, 127.53574931171875 );
711+
QCOMPARE( newPosition.elevation_diff, 43.764250688281265 );
727712
QVERIFY( newPosition.isMock );
728-
QVERIFY( !geoPosition.hasAttribute( QGeoPositionInfo::VerticalSpeed ) );
729713
QVERIFY( !geoPosition.hasAttribute( QGeoPositionInfo::MagneticVariation ) );
730714

731715

0 commit comments

Comments
 (0)