mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-15 00:04:00 -04:00
add trandform context to QgsBearingUtils::bearingTrueNorth
This commit is contained in:
parent
0a9f019f27
commit
eb42afed9b
@ -24,6 +24,7 @@ Utilities for calculating bearings and directions.
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
static double bearingTrueNorth( const QgsCoordinateReferenceSystem &crs,
|
static double bearingTrueNorth( const QgsCoordinateReferenceSystem &crs,
|
||||||
|
const QgsCoordinateTransformContext &transformContext,
|
||||||
const QgsPointXY &point );
|
const QgsPointXY &point );
|
||||||
%Docstring
|
%Docstring
|
||||||
Returns the direction to true north from a specified point and for a specified
|
Returns the direction to true north from a specified point and for a specified
|
||||||
|
@ -125,7 +125,7 @@ void QgsDecorationNorthArrow::render( const QgsMapSettings &mapSettings, QgsRend
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
mRotationInt = QgsBearingUtils:: bearingTrueNorth( mapSettings.destinationCrs(), context.extent().center() );
|
mRotationInt = QgsBearingUtils:: bearingTrueNorth( mapSettings.destinationCrs(), mapSettings.transformContext(), context.extent().center() );
|
||||||
}
|
}
|
||||||
catch ( QgsException & )
|
catch ( QgsException & )
|
||||||
{
|
{
|
||||||
|
@ -463,10 +463,11 @@ void QgsLayoutItemPicture::updateMapRotation()
|
|||||||
{
|
{
|
||||||
QgsPointXY center = mRotationMap->extent().center();
|
QgsPointXY center = mRotationMap->extent().center();
|
||||||
QgsCoordinateReferenceSystem crs = mRotationMap->crs();
|
QgsCoordinateReferenceSystem crs = mRotationMap->crs();
|
||||||
|
QgsCoordinateTransformContext transformContext = mLayout->project()->transformContext();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
double bearing = QgsBearingUtils::bearingTrueNorth( crs, center );
|
double bearing = QgsBearingUtils::bearingTrueNorth( crs, transformContext, center );
|
||||||
rotation += bearing;
|
rotation += bearing;
|
||||||
}
|
}
|
||||||
catch ( QgsException &e )
|
catch ( QgsException &e )
|
||||||
|
@ -17,16 +17,15 @@
|
|||||||
|
|
||||||
#include "qgsbearingutils.h"
|
#include "qgsbearingutils.h"
|
||||||
#include "qgscoordinatereferencesystem.h"
|
#include "qgscoordinatereferencesystem.h"
|
||||||
|
#include "qgscoordinatetransformcontext.h"
|
||||||
#include "qgspointxy.h"
|
#include "qgspointxy.h"
|
||||||
#include "qgscoordinatetransform.h"
|
#include "qgscoordinatetransform.h"
|
||||||
#include "qgsexception.h"
|
#include "qgsexception.h"
|
||||||
|
|
||||||
double QgsBearingUtils::bearingTrueNorth( const QgsCoordinateReferenceSystem &crs, const QgsPointXY &point )
|
double QgsBearingUtils::bearingTrueNorth( const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &transformContext, const QgsPointXY &point )
|
||||||
{
|
{
|
||||||
// step 1 - transform point into WGS84 geographic crs
|
// step 1 - transform point into WGS84 geographic crs
|
||||||
Q_NOWARN_DEPRECATED_PUSH
|
QgsCoordinateTransform transform( crs, QgsCoordinateReferenceSystem::fromEpsgId( 4326 ), transformContext );
|
||||||
QgsCoordinateTransform transform( crs, QgsCoordinateReferenceSystem::fromEpsgId( 4326 ) );
|
|
||||||
Q_NOWARN_DEPRECATED_POP
|
|
||||||
|
|
||||||
if ( !transform.isValid() )
|
if ( !transform.isValid() )
|
||||||
{
|
{
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#define QGSBEARINGUTILS_H
|
#define QGSBEARINGUTILS_H
|
||||||
|
|
||||||
class QgsCoordinateReferenceSystem;
|
class QgsCoordinateReferenceSystem;
|
||||||
|
class QgsCoordinateTransformContext;
|
||||||
class QgsPointXY;
|
class QgsPointXY;
|
||||||
|
|
||||||
#include "qgis_core.h"
|
#include "qgis_core.h"
|
||||||
@ -39,6 +40,7 @@ class CORE_EXPORT QgsBearingUtils
|
|||||||
* vertical. An exception will be thrown if the bearing could not be calculated.
|
* vertical. An exception will be thrown if the bearing could not be calculated.
|
||||||
*/
|
*/
|
||||||
static double bearingTrueNorth( const QgsCoordinateReferenceSystem &crs,
|
static double bearingTrueNorth( const QgsCoordinateReferenceSystem &crs,
|
||||||
|
const QgsCoordinateTransformContext &transformContext,
|
||||||
const QgsPointXY &point );
|
const QgsPointXY &point );
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -16,6 +16,7 @@ import qgis # NOQA switch sip api
|
|||||||
|
|
||||||
from qgis.core import (QgsBearingUtils,
|
from qgis.core import (QgsBearingUtils,
|
||||||
QgsCoordinateReferenceSystem,
|
QgsCoordinateReferenceSystem,
|
||||||
|
QgsCoordinateTransformContext,
|
||||||
QgsPointXY
|
QgsPointXY
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -32,26 +33,28 @@ class TestQgsBearingUtils(unittest.TestCase):
|
|||||||
|
|
||||||
# short circuit - already a geographic crs
|
# short circuit - already a geographic crs
|
||||||
crs = QgsCoordinateReferenceSystem.fromEpsgId(4326)
|
crs = QgsCoordinateReferenceSystem.fromEpsgId(4326)
|
||||||
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(0, 0)), 0)
|
transformContext = QgsCoordinateTransformContext()
|
||||||
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(44, 0)), 0)
|
|
||||||
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(44, -43)), 0)
|
|
||||||
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(44, 43)), 0)
|
|
||||||
|
|
||||||
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(44, 200)), 0)
|
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(0, 0)), 0)
|
||||||
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(44, -200)), 0)
|
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(44, 0)), 0)
|
||||||
|
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(44, -43)), 0)
|
||||||
|
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(44, 43)), 0)
|
||||||
|
|
||||||
|
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(44, 200)), 0)
|
||||||
|
self.assertEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(44, -200)), 0)
|
||||||
|
|
||||||
# no short circuit
|
# no short circuit
|
||||||
crs = QgsCoordinateReferenceSystem.fromEpsgId(3111)
|
crs = QgsCoordinateReferenceSystem.fromEpsgId(3111)
|
||||||
self.assertAlmostEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(2508807, 2423425)), 0.06, 2)
|
self.assertAlmostEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(2508807, 2423425)), 0.06, 2)
|
||||||
|
|
||||||
# try a south-up crs
|
# try a south-up crs
|
||||||
crs = QgsCoordinateReferenceSystem.fromEpsgId(2053)
|
crs = QgsCoordinateReferenceSystem.fromEpsgId(2053)
|
||||||
self.assertAlmostEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(29, -27.55)), -180.0, 1)
|
self.assertAlmostEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(29, -27.55)), -180.0, 1)
|
||||||
|
|
||||||
# try a north pole crs
|
# try a north pole crs
|
||||||
crs = QgsCoordinateReferenceSystem.fromEpsgId(3575)
|
crs = QgsCoordinateReferenceSystem.fromEpsgId(3575)
|
||||||
self.assertAlmostEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(-780770, 652329)), 129.9, 1)
|
self.assertAlmostEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(-780770, 652329)), 129.9, 1)
|
||||||
self.assertAlmostEqual(QgsBearingUtils.bearingTrueNorth(crs, QgsPointXY(513480, 873173)), -149.5, 1)
|
self.assertAlmostEqual(QgsBearingUtils.bearingTrueNorth(crs, transformContext, QgsPointXY(513480, 873173)), -149.5, 1)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user