mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-07 00:15:48 -04:00
Add coordinate order argument to QgsCoordinateFormatter functions
This commit is contained in:
parent
0b8e6abb22
commit
bac45b308a
@ -72,7 +72,7 @@ Optional ``flags`` can be specified to control the output format.
|
|||||||
.. seealso:: :py:func:`formatX`
|
.. seealso:: :py:func:`formatX`
|
||||||
%End
|
%End
|
||||||
|
|
||||||
static QString format( const QgsPointXY &point, Format format, int precision = 12, FormatFlags flags = FlagDegreesUseStringSuffix );
|
static QString format( const QgsPointXY &point, Format format, int precision = 12, FormatFlags flags = FlagDegreesUseStringSuffix, Qgis::CoordinateOrder order = Qgis::CoordinateOrder::XY );
|
||||||
%Docstring
|
%Docstring
|
||||||
Formats a ``point`` according to the specified parameters.
|
Formats a ``point`` according to the specified parameters.
|
||||||
|
|
||||||
@ -81,12 +81,16 @@ The ``format`` argument indicates the desired display format for the coordinate.
|
|||||||
The ``precision`` argument gives the number of decimal places to include for coordinates.
|
The ``precision`` argument gives the number of decimal places to include for coordinates.
|
||||||
|
|
||||||
Optional ``flags`` can be specified to control the output format.
|
Optional ``flags`` can be specified to control the output format.
|
||||||
|
|
||||||
|
Since QGIS 3.26 the optional ``order`` argument can be used to control the order of the coordinates.
|
||||||
%End
|
%End
|
||||||
|
|
||||||
static QString asPair( double x, double y, int precision = 12 );
|
static QString asPair( double x, double y, int precision = 12, Qgis::CoordinateOrder order = Qgis::CoordinateOrder::XY );
|
||||||
%Docstring
|
%Docstring
|
||||||
Formats coordinates as an "``x``,``y``" pair, with optional decimal ``precision`` (number
|
Formats coordinates as an "``x``,``y``" pair, with optional decimal ``precision`` (number
|
||||||
of decimal places to include).
|
of decimal places to include).
|
||||||
|
|
||||||
|
Since QGIS 3.26 the optional ``order`` argument can be used to control the order of the coordinates.
|
||||||
%End
|
%End
|
||||||
|
|
||||||
static QChar separator( );
|
static QChar separator( );
|
||||||
|
@ -59,19 +59,38 @@ QString QgsCoordinateFormatter::formatY( double y, QgsCoordinateFormatter::Forma
|
|||||||
return QString(); //avoid warnings
|
return QString(); //avoid warnings
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QgsCoordinateFormatter::format( const QgsPointXY &point, QgsCoordinateFormatter::Format format, int precision, FormatFlags flags )
|
QString QgsCoordinateFormatter::format( const QgsPointXY &point, QgsCoordinateFormatter::Format format, int precision, FormatFlags flags, Qgis::CoordinateOrder order )
|
||||||
{
|
{
|
||||||
return QStringLiteral( "%1%2%3" ).arg( formatX( point.x(), format, precision, flags ),
|
const QString formattedX = formatX( point.x(), format, precision, flags );
|
||||||
QgsCoordinateFormatter::separator(),
|
const QString formattedY = formatY( point.y(), format, precision, flags );
|
||||||
formatY( point.y(), format, precision, flags ) );
|
|
||||||
|
switch ( order )
|
||||||
|
{
|
||||||
|
case Qgis::CoordinateOrder::Default:
|
||||||
|
case Qgis::CoordinateOrder::XY:
|
||||||
|
return QStringLiteral( "%1%2%3" ).arg( formattedX, QgsCoordinateFormatter::separator(), formattedY );
|
||||||
|
|
||||||
|
case Qgis::CoordinateOrder::YX:
|
||||||
|
return QStringLiteral( "%1%2%3" ).arg( formattedY, QgsCoordinateFormatter::separator(), formattedX );
|
||||||
|
}
|
||||||
|
BUILTIN_UNREACHABLE
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QgsCoordinateFormatter::asPair( double x, double y, int precision )
|
QString QgsCoordinateFormatter::asPair( double x, double y, int precision, Qgis::CoordinateOrder order )
|
||||||
{
|
{
|
||||||
QString s = formatAsPair( x, precision );
|
const QString formattedX = formatAsPair( x, precision );
|
||||||
s += QgsCoordinateFormatter::separator();
|
const QString formattedY = formatAsPair( y, precision );
|
||||||
s += formatAsPair( y, precision );
|
|
||||||
return s;
|
switch ( order )
|
||||||
|
{
|
||||||
|
case Qgis::CoordinateOrder::Default:
|
||||||
|
case Qgis::CoordinateOrder::XY:
|
||||||
|
return QStringLiteral( "%1%2%3" ).arg( formattedX, QgsCoordinateFormatter::separator(), formattedY );
|
||||||
|
|
||||||
|
case Qgis::CoordinateOrder::YX:
|
||||||
|
return QStringLiteral( "%1%2%3" ).arg( formattedY, QgsCoordinateFormatter::separator(), formattedX );
|
||||||
|
}
|
||||||
|
BUILTIN_UNREACHABLE
|
||||||
}
|
}
|
||||||
|
|
||||||
QChar QgsCoordinateFormatter::separator()
|
QChar QgsCoordinateFormatter::separator()
|
||||||
|
@ -96,14 +96,18 @@ class CORE_EXPORT QgsCoordinateFormatter
|
|||||||
* The \a precision argument gives the number of decimal places to include for coordinates.
|
* The \a precision argument gives the number of decimal places to include for coordinates.
|
||||||
*
|
*
|
||||||
* Optional \a flags can be specified to control the output format.
|
* Optional \a flags can be specified to control the output format.
|
||||||
|
*
|
||||||
|
* Since QGIS 3.26 the optional \a order argument can be used to control the order of the coordinates.
|
||||||
*/
|
*/
|
||||||
static QString format( const QgsPointXY &point, Format format, int precision = 12, FormatFlags flags = FlagDegreesUseStringSuffix );
|
static QString format( const QgsPointXY &point, Format format, int precision = 12, FormatFlags flags = FlagDegreesUseStringSuffix, Qgis::CoordinateOrder order = Qgis::CoordinateOrder::XY );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Formats coordinates as an "\a x,\a y" pair, with optional decimal \a precision (number
|
* Formats coordinates as an "\a x,\a y" pair, with optional decimal \a precision (number
|
||||||
* of decimal places to include).
|
* of decimal places to include).
|
||||||
|
*
|
||||||
|
* Since QGIS 3.26 the optional \a order argument can be used to control the order of the coordinates.
|
||||||
*/
|
*/
|
||||||
static QString asPair( double x, double y, int precision = 12 );
|
static QString asPair( double x, double y, int precision = 12, Qgis::CoordinateOrder order = Qgis::CoordinateOrder::XY );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the character used as X/Y separator, this is a `,` on locales that do not use
|
* Returns the character used as X/Y separator, this is a `,` on locales that do not use
|
||||||
|
@ -12,7 +12,11 @@ __copyright__ = 'Copyright 2015, The QGIS Project'
|
|||||||
|
|
||||||
import qgis
|
import qgis
|
||||||
from qgis.testing import unittest
|
from qgis.testing import unittest
|
||||||
from qgis.core import QgsCoordinateFormatter, QgsPointXY
|
from qgis.core import (
|
||||||
|
QgsCoordinateFormatter,
|
||||||
|
QgsPointXY,
|
||||||
|
Qgis
|
||||||
|
)
|
||||||
from qgis.PyQt.QtCore import QLocale
|
from qgis.PyQt.QtCore import QLocale
|
||||||
|
|
||||||
|
|
||||||
@ -51,11 +55,21 @@ class TestQgsCoordinateFormatter(unittest.TestCase):
|
|||||||
self.assertEqual(QgsCoordinateFormatter.asPair(20, 10, 2), '20.00,10.00')
|
self.assertEqual(QgsCoordinateFormatter.asPair(20, 10, 2), '20.00,10.00')
|
||||||
self.assertEqual(QgsCoordinateFormatter.asPair(20, -10, 2), '20.00,-10.00')
|
self.assertEqual(QgsCoordinateFormatter.asPair(20, -10, 2), '20.00,-10.00')
|
||||||
|
|
||||||
|
self.assertEqual(QgsCoordinateFormatter.asPair(20, -10, 2, order=Qgis.CoordinateOrder.XY), '20.00,-10.00')
|
||||||
|
self.assertEqual(QgsCoordinateFormatter.asPair(20, -10, 2, order=Qgis.CoordinateOrder.YX), '-10.00,20.00')
|
||||||
|
|
||||||
def testFormat(self):
|
def testFormat(self):
|
||||||
self.assertEqual(QgsCoordinateFormatter.format(QgsPointXY(20.1, 30.2), QgsCoordinateFormatter.FormatPair, 0), '20,30')
|
self.assertEqual(QgsCoordinateFormatter.format(QgsPointXY(20.1, 30.2), QgsCoordinateFormatter.FormatPair, 0), '20,30')
|
||||||
self.assertEqual(QgsCoordinateFormatter.format(QgsPointXY(20.1, 30.2), QgsCoordinateFormatter.FormatPair, 1), '20.1,30.2')
|
self.assertEqual(QgsCoordinateFormatter.format(QgsPointXY(20.1, 30.2), QgsCoordinateFormatter.FormatPair, 1), '20.1,30.2')
|
||||||
self.assertEqual(QgsCoordinateFormatter.format(QgsPointXY(20, 30), QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 0), '20°0′0″E,30°0′0″N')
|
self.assertEqual(QgsCoordinateFormatter.format(QgsPointXY(20, 30), QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 0), '20°0′0″E,30°0′0″N')
|
||||||
|
|
||||||
|
self.assertEqual(QgsCoordinateFormatter.format(QgsPointXY(20.1, 30.2), QgsCoordinateFormatter.FormatPair, 1, order=Qgis.CoordinateOrder.XY), '20.1,30.2')
|
||||||
|
self.assertEqual(QgsCoordinateFormatter.format(QgsPointXY(20.1, 30.2), QgsCoordinateFormatter.FormatPair, 1,
|
||||||
|
order=Qgis.CoordinateOrder.YX), '30.2,20.1')
|
||||||
|
self.assertEqual(
|
||||||
|
QgsCoordinateFormatter.format(QgsPointXY(20, 30), QgsCoordinateFormatter.FormatDegreesMinutesSeconds, 0, order=Qgis.CoordinateOrder.YX),
|
||||||
|
'30°0′0″N,20°0′0″E')
|
||||||
|
|
||||||
def testFormatXFormatDegreesMinutesSeconds(self):
|
def testFormatXFormatDegreesMinutesSeconds(self):
|
||||||
"""Test formatting x as DMS"""
|
"""Test formatting x as DMS"""
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user