From 5b73a8dc7166c25b7b7fd528b4b40c45d32ad382 Mon Sep 17 00:00:00 2001 From: Gabriel Bolbotina Date: Thu, 19 Mar 2026 15:36:18 +0200 Subject: [PATCH 1/2] Modified the source CRS to be 2D instead of 3d for map position and point recording --- app/maptools/recordingmaptool.cpp | 2 +- app/position/mapposition.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/maptools/recordingmaptool.cpp b/app/maptools/recordingmaptool.cpp index d4e98e9bb..b6479e3b3 100644 --- a/app/maptools/recordingmaptool.cpp +++ b/app/maptools/recordingmaptool.cpp @@ -59,7 +59,7 @@ void RecordingMapTool::addPoint( const QgsPoint &point ) pointToAdd = mPositionKit->positionCoordinate(); QgsPoint transformed = InputUtils::transformPoint( - mPositionKit->positionCrs3D(), + mPositionKit->positionCrs2D(), mActiveLayer->crs(), mActiveLayer->transformContext(), pointToAdd diff --git a/app/position/mapposition.cpp b/app/position/mapposition.cpp index be6e18177..c13661c99 100644 --- a/app/position/mapposition.cpp +++ b/app/position/mapposition.cpp @@ -105,7 +105,7 @@ void MapPosition::recalculateMapPosition() { QgsPointXY srcPoint = QgsPointXY( geoposition.x(), geoposition.y() ); QgsPointXY mapPositionXY = InputUtils::transformPointXY( - mPositionKit->positionCrs3D(), + mPositionKit->positionCrs2D(), mMapSettings->destinationCrs(), mMapSettings->transformContext(), srcPoint From 27cb82358c950ff95d4b02ed8fda66e203f936a5 Mon Sep 17 00:00:00 2001 From: Gabriel Bolbotina Date: Mon, 23 Mar 2026 13:26:28 +0200 Subject: [PATCH 2/2] Modified transformPoint function to work for 2d and 3d position --- app/inpututils.cpp | 23 +++++++++++++++++------ app/maptools/recordingmaptool.cpp | 2 +- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/app/inpututils.cpp b/app/inpututils.cpp index 855e5b2c2..09dd763dd 100644 --- a/app/inpututils.cpp +++ b/app/inpututils.cpp @@ -900,14 +900,25 @@ QgsPoint InputUtils::transformPoint( const QgsCoordinateReferenceSystem &srcCrs, { if ( !ct.isShortCircuited() ) { - const QgsVector3D transformed = ct.transform( QgsVector3D( srcPoint.x(), srcPoint.y(), srcPoint.z() ) ); - fallbackOperationOccurred = ct.fallbackOperationOccurred(); - const QgsPoint pt( transformed.x(), transformed.y(), transformed.z(), srcPoint.m() ); - return pt; + // check if the CRS have vertical axis + if ( srcCrs.hasVerticalAxis() && destCrs.hasVerticalAxis() ) + { + const QgsVector3D transformed = ct.transform( QgsVector3D( srcPoint.x(), srcPoint.y(), srcPoint.z() ) ); + fallbackOperationOccurred = ct.fallbackOperationOccurred(); + const QgsPoint pt( transformed.x(), transformed.y(), transformed.z(), srcPoint.m() ); + return pt; + } + else + { + const QgsPointXY transformedXY = ct.transform( QgsPointXY( srcPoint.x(), srcPoint.y() ) ); + fallbackOperationOccurred = ct.fallbackOperationOccurred(); + const QgsPoint pt( transformedXY.x(), transformedXY.y(), srcPoint.z(), srcPoint.m() ); + return pt; + } } - - return srcPoint; } + + return srcPoint; } catch ( QgsCsException &cse ) { diff --git a/app/maptools/recordingmaptool.cpp b/app/maptools/recordingmaptool.cpp index b6479e3b3..d4e98e9bb 100644 --- a/app/maptools/recordingmaptool.cpp +++ b/app/maptools/recordingmaptool.cpp @@ -59,7 +59,7 @@ void RecordingMapTool::addPoint( const QgsPoint &point ) pointToAdd = mPositionKit->positionCoordinate(); QgsPoint transformed = InputUtils::transformPoint( - mPositionKit->positionCrs2D(), + mPositionKit->positionCrs3D(), mActiveLayer->crs(), mActiveLayer->transformContext(), pointToAdd