Skip to content

Commit eb42afe

Browse files
authored
add trandform context to QgsBearingUtils::bearingTrueNorth
1 parent 0a9f019 commit eb42afe

File tree

6 files changed

+22
-16
lines changed

6 files changed

+22
-16
lines changed

python/core/qgsbearingutils.sip.in

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Utilities for calculating bearings and directions.
2424
public:
2525

2626
static double bearingTrueNorth( const QgsCoordinateReferenceSystem &crs,
27+
const QgsCoordinateTransformContext &transformContext,
2728
const QgsPointXY &point );
2829
%Docstring
2930
Returns the direction to true north from a specified point and for a specified

src/app/qgsdecorationnortharrow.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ void QgsDecorationNorthArrow::render( const QgsMapSettings &mapSettings, QgsRend
125125
{
126126
try
127127
{
128-
mRotationInt = QgsBearingUtils:: bearingTrueNorth( mapSettings.destinationCrs(), context.extent().center() );
128+
mRotationInt = QgsBearingUtils:: bearingTrueNorth( mapSettings.destinationCrs(), mapSettings.transformContext(), context.extent().center() );
129129
}
130130
catch ( QgsException & )
131131
{

src/core/layout/qgslayoutitempicture.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -463,10 +463,11 @@ void QgsLayoutItemPicture::updateMapRotation()
463463
{
464464
QgsPointXY center = mRotationMap->extent().center();
465465
QgsCoordinateReferenceSystem crs = mRotationMap->crs();
466+
QgsCoordinateTransformContext transformContext = mLayout->project()->transformContext();
466467

467468
try
468469
{
469-
double bearing = QgsBearingUtils::bearingTrueNorth( crs, center );
470+
double bearing = QgsBearingUtils::bearingTrueNorth( crs, transformContext, center );
470471
rotation += bearing;
471472
}
472473
catch ( QgsException &e )

src/core/qgsbearingutils.cpp

+3-4
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,15 @@
1717

1818
#include "qgsbearingutils.h"
1919
#include "qgscoordinatereferencesystem.h"
20+
#include "qgscoordinatetransformcontext.h"
2021
#include "qgspointxy.h"
2122
#include "qgscoordinatetransform.h"
2223
#include "qgsexception.h"
2324

24-
double QgsBearingUtils::bearingTrueNorth( const QgsCoordinateReferenceSystem &crs, const QgsPointXY &point )
25+
double QgsBearingUtils::bearingTrueNorth( const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &transformContext, const QgsPointXY &point )
2526
{
2627
// step 1 - transform point into WGS84 geographic crs
27-
Q_NOWARN_DEPRECATED_PUSH
28-
QgsCoordinateTransform transform( crs, QgsCoordinateReferenceSystem::fromEpsgId( 4326 ) );
29-
Q_NOWARN_DEPRECATED_POP
28+
QgsCoordinateTransform transform( crs, QgsCoordinateReferenceSystem::fromEpsgId( 4326 ), transformContext );
3029

3130
if ( !transform.isValid() )
3231
{

src/core/qgsbearingutils.h

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#define QGSBEARINGUTILS_H
2020

2121
class QgsCoordinateReferenceSystem;
22+
class QgsCoordinateTransformContext;
2223
class QgsPointXY;
2324

2425
#include "qgis_core.h"
@@ -39,6 +40,7 @@ class CORE_EXPORT QgsBearingUtils
3940
* vertical. An exception will be thrown if the bearing could not be calculated.
4041
*/
4142
static double bearingTrueNorth( const QgsCoordinateReferenceSystem &crs,
43+
const QgsCoordinateTransformContext &transformContext,
4244
const QgsPointXY &point );
4345

4446
};

tests/src/python/test_qgsbearingutils.py

+13-10
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
from qgis.core import (QgsBearingUtils,
1818
QgsCoordinateReferenceSystem,
19+
QgsCoordinateTransformContext,
1920
QgsPointXY
2021
)
2122

@@ -32,26 +33,28 @@ def testTrueNorth(self):
3233

3334
# short circuit - already a geographic crs
3435
crs = QgsCoordinateReferenceSystem.fromEpsgId(4326)
35-
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(0, 0)), 0)
36-
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(44, 0)), 0)
37-
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(44, -43)), 0)
38-
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(44, 43)), 0)
36+
transformContext = QgsCoordinateTransformContext()
3937

40-
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(44, 200)), 0)
41-
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(44, -200)), 0)
38+
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(0, 0)), 0)
39+
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(44, 0)), 0)
40+
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(44, -43)), 0)
41+
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(44, 43)), 0)
42+
43+
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(44, 200)), 0)
44+
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(44, -200)), 0)
4245

4346
# no short circuit
4447
crs = QgsCoordinateReferenceSystem.fromEpsgId(3111)
45-
self.assertAlmostEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(2508807, 2423425)), 0.06, 2)
48+
self.assertAlmostEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(2508807, 2423425)), 0.06, 2)
4649

4750
# try a south-up crs
4851
crs = QgsCoordinateReferenceSystem.fromEpsgId(2053)
49-
self.assertAlmostEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(29, -27.55)), -180.0, 1)
52+
self.assertAlmostEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(29, -27.55)), -180.0, 1)
5053

5154
# try a north pole crs
5255
crs = QgsCoordinateReferenceSystem.fromEpsgId(3575)
53-
self.assertAlmostEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(-780770, 652329)), 129.9, 1)
54-
self.assertAlmostEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(513480, 873173)), -149.5, 1)
56+
self.assertAlmostEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(-780770, 652329)), 129.9, 1)
57+
self.assertAlmostEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(513480, 873173)), -149.5, 1)
5558

5659

5760
if __name__ == '__main__':

0 commit comments

Comments
 (0)