30 return formatAsPair( x, precision );
33 return formatXAsDegreesMinutesSeconds( x, precision, flags );
36 return formatXAsDegreesMinutes( x, precision, flags );
39 return formatXAsDegrees( x, precision, flags );
49 return formatAsPair( y, precision );
52 return formatYAsDegreesMinutesSeconds( y, precision, flags );
55 return formatYAsDegreesMinutes( y, precision, flags );
58 return formatYAsDegrees( y, precision, flags );
65 const QString formattedX =
formatX( point.
x(),
format, precision, flags );
66 const QString formattedY =
formatY( point.
y(),
format, precision, flags );
82 const QString formattedX = formatAsPair( x, precision );
83 const QString formattedY = formatAsPair( y, precision );
99 return QLocale().decimalPoint() == QLatin1Char(
',' ) ? QLatin1Char(
' ' ) : QLatin1Char(
',' );
102QString QgsCoordinateFormatter::formatAsPair(
double val,
int precision )
104 return std::isfinite( val ) ? QLocale().toString( val,
'f', precision ) : QObject::tr(
"infinite" );
107QString QgsCoordinateFormatter::formatXAsDegreesMinutesSeconds(
double val,
int precision, FormatFlags flags )
110 double wrappedX = std::fmod( val, 360.0 );
112 if ( wrappedX > 180.0 )
114 wrappedX = wrappedX - 360.0;
116 else if ( wrappedX < -180.0 )
118 wrappedX = wrappedX + 360.0;
121 const double precisionMultiplier = std::pow( 10.0, precision );
123 int degreesX = int( std::fabs( wrappedX ) );
124 const double floatMinutesX = ( std::fabs( wrappedX ) - degreesX ) * 60.0;
125 int intMinutesX = int( floatMinutesX );
126 double secondsX = ( floatMinutesX - intMinutesX ) * 60.0;
129 if ( std::round( secondsX * precisionMultiplier ) >= 60 * precisionMultiplier )
131 secondsX = std::max( secondsX - 60, 0.0 );
133 if ( intMinutesX >= 60 )
144 hemisphere = wrappedX < 0 ? QObject::tr(
"W" ) : QObject::tr(
"E" );
150 sign = QLocale().negativeSign();
155 if ( degreesX == 0 && intMinutesX == 0 && std::round( secondsX * precisionMultiplier ) == 0 )
162 if ( degreesX == 180 && intMinutesX == 0 && std::round( secondsX * precisionMultiplier ) == 0 )
173 minutesX = QString(
"%L1" ).arg( intMinutesX, 2, 10, QChar(
'0' ) );
174 const int digits = 2 + ( precision == 0 ? 0 : 1 + precision );
175 strSecondsX = QString(
"%L1" ).arg( secondsX, digits,
'f', precision, QChar(
'0' ) );
179 minutesX = QLocale().toString( intMinutesX );
180 strSecondsX = QLocale().toString( secondsX,
'f', precision );
183 return sign + QLocale().toString( degreesX ) + QChar( 176 ) +
184 minutesX + QChar( 0x2032 ) +
185 strSecondsX + QChar( 0x2033 ) +
189QString QgsCoordinateFormatter::formatYAsDegreesMinutesSeconds(
double val,
int precision, FormatFlags flags )
192 double wrappedY = std::fmod( val, 180.0 );
194 if ( wrappedY > 90.0 )
196 wrappedY = wrappedY - 180.0;
198 else if ( wrappedY < -90.0 )
200 wrappedY = wrappedY + 180.0;
203 const double precisionMultiplier = std::pow( 10.0, precision );
205 int degreesY = int( std::fabs( wrappedY ) );
206 const double floatMinutesY = ( std::fabs( wrappedY ) - degreesY ) * 60.0;
207 int intMinutesY = int( floatMinutesY );
208 double secondsY = ( floatMinutesY - intMinutesY ) * 60.0;
211 if ( std::round( secondsY * precisionMultiplier ) >= 60 * precisionMultiplier )
213 secondsY = std::max( secondsY - 60, 0.0 );
215 if ( intMinutesY >= 60 )
226 hemisphere = wrappedY < 0 ? QObject::tr(
"S" ) : QObject::tr(
"N" );
232 sign = QLocale().negativeSign();
237 if ( degreesY == 0 && intMinutesY == 0 && std::round( secondsY * precisionMultiplier ) == 0 )
249 strMinutesY = QString(
"%L1" ).arg( intMinutesY, 2, 10, QChar(
'0' ) );
250 const int digits = 2 + ( precision == 0 ? 0 : 1 + precision );
251 strSecondsY = QString(
"%L1" ).arg( secondsY, digits,
'f', precision, QChar(
'0' ) );
255 strMinutesY = QLocale().toString( intMinutesY );
256 strSecondsY = QLocale().toString( secondsY,
'f', precision );
259 return sign + QLocale().toString( degreesY ) + QChar( 176 ) +
260 strMinutesY + QChar( 0x2032 ) +
261 strSecondsY + QChar( 0x2033 ) +
265QString QgsCoordinateFormatter::formatXAsDegreesMinutes(
double val,
int precision, FormatFlags flags )
268 double wrappedX = std::fmod( val, 360.0 );
270 if ( wrappedX > 180.0 )
272 wrappedX = wrappedX - 360.0;
274 else if ( wrappedX < -180.0 )
276 wrappedX = wrappedX + 360.0;
279 int degreesX = int( std::fabs( wrappedX ) );
280 double floatMinutesX = ( std::fabs( wrappedX ) - degreesX ) * 60.0;
282 const double precisionMultiplier = std::pow( 10.0, precision );
285 if ( std::round( floatMinutesX * precisionMultiplier ) >= 60 * precisionMultiplier )
287 floatMinutesX = std::max( floatMinutesX - 60, 0.0 );
295 hemisphere = wrappedX < 0 ? QObject::tr(
"W" ) : QObject::tr(
"E" );
301 sign = QLocale().negativeSign();
306 if ( degreesX == 0 && std::round( floatMinutesX * precisionMultiplier ) == 0 )
313 if ( degreesX == 180 && std::round( floatMinutesX * precisionMultiplier ) == 0 )
319 const int digits = 2 + ( precision == 0 ? 0 : 1 + precision );
320 const QString strMinutesX = flags.testFlag(
FlagDegreesPadMinutesSeconds ) ? QString(
"%1" ).arg( floatMinutesX, digits,
'f', precision, QChar(
'0' ) )
321 : QLocale().toString( floatMinutesX,
'f', precision );
323 return sign + QLocale().toString( degreesX ) + QChar( 176 ) +
324 strMinutesX + QChar( 0x2032 ) +
328QString QgsCoordinateFormatter::formatYAsDegreesMinutes(
double val,
int precision, FormatFlags flags )
331 double wrappedY = std::fmod( val, 180.0 );
333 if ( wrappedY > 90.0 )
335 wrappedY = wrappedY - 180.0;
337 else if ( wrappedY < -90.0 )
339 wrappedY = wrappedY + 180.0;
342 int degreesY = int( std::fabs( wrappedY ) );
343 double floatMinutesY = ( std::fabs( wrappedY ) - degreesY ) * 60.0;
345 const double precisionMultiplier = std::pow( 10.0, precision );
348 if ( std::round( floatMinutesY * precisionMultiplier ) >= 60 * precisionMultiplier )
350 floatMinutesY = std::max( floatMinutesY - 60, 0.0 );
358 hemisphere = wrappedY < 0 ? QObject::tr(
"S" ) : QObject::tr(
"N" );
364 sign = QLocale().negativeSign();
369 if ( degreesY == 0 && std::round( floatMinutesY * precisionMultiplier ) == 0 )
377 const int digits = 2 + ( precision == 0 ? 0 : 1 + precision );
378 const QString strMinutesY = flags.testFlag(
FlagDegreesPadMinutesSeconds ) ? QString(
"%1" ).arg( floatMinutesY, digits,
'f', precision, QChar(
'0' ) )
379 : QLocale().toString( floatMinutesY,
'f', precision );
381 return sign + QLocale().toString( degreesY ) + QChar( 176 ) +
382 strMinutesY + QChar( 0x2032 ) +
386QString QgsCoordinateFormatter::formatXAsDegrees(
double val,
int precision, FormatFlags flags )
389 double wrappedX = std::fmod( val, 360.0 );
391 if ( wrappedX > 180.0 )
393 wrappedX = wrappedX - 360.0;
395 else if ( wrappedX < -180.0 )
397 wrappedX = wrappedX + 360.0;
400 const double absX = std::fabs( wrappedX );
402 const double precisionMultiplier = std::pow( 10.0, precision );
408 hemisphere = wrappedX < 0 ? QObject::tr(
"W" ) : QObject::tr(
"E" );
414 sign = QLocale().negativeSign();
419 if ( std::round( absX * precisionMultiplier ) == 0 )
426 if ( std::round( absX * precisionMultiplier ) == 180 * precisionMultiplier )
432 return sign + QLocale().toString( absX,
'f', precision ) + QChar( 176 ) + hemisphere;
435QString QgsCoordinateFormatter::formatYAsDegrees(
double val,
int precision, FormatFlags flags )
438 double wrappedY = std::fmod( val, 180.0 );
440 if ( wrappedY > 90.0 )
442 wrappedY = wrappedY - 180.0;
444 else if ( wrappedY < -90.0 )
446 wrappedY = wrappedY + 180.0;
449 const double absY = std::fabs( wrappedY );
451 const double precisionMultiplier = std::pow( 10.0, precision );
457 hemisphere = wrappedY < 0 ? QObject::tr(
"S" ) : QObject::tr(
"N" );
463 sign = QLocale().negativeSign();
468 if ( std::round( absY * precisionMultiplier ) == 0 )
474 return sign + QLocale().toString( absY,
'f', precision ) + QChar( 176 ) + hemisphere;
CoordinateOrder
Order of coordinates.
@ XY
Easting/Northing (or Longitude/Latitude for geographic CRS).
@ Default
Respect the default axis ordering for the CRS, as defined in the CRS's parameters.
@ YX
Northing/Easting (or Latitude/Longitude for geographic CRS).
#define BUILTIN_UNREACHABLE