wgs84 és eov koordinátákat megjelenítő kártyák, eov magasság
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
enum Wgs84CoordinateFormat {
|
||||
decimalDegrees,
|
||||
degreesDecimalMinutes,
|
||||
degreesMinutesSeconds
|
||||
}
|
||||
|
||||
extension Wgs84CoordinateFormatLabel on Wgs84CoordinateFormat {
|
||||
String get label {
|
||||
switch (this) {
|
||||
case Wgs84CoordinateFormat.decimalDegrees:
|
||||
return 'Tizedes fok';
|
||||
case Wgs84CoordinateFormat.degreesDecimalMinutes:
|
||||
return 'Fok + tizedes perc';
|
||||
case Wgs84CoordinateFormat.degreesMinutesSeconds:
|
||||
return 'Fok - perc - másodperc';
|
||||
}
|
||||
}
|
||||
|
||||
String get shortLabel {
|
||||
switch (this) {
|
||||
case Wgs84CoordinateFormat.decimalDegrees:
|
||||
return 'DD';
|
||||
case Wgs84CoordinateFormat.degreesDecimalMinutes:
|
||||
return 'DM';
|
||||
case Wgs84CoordinateFormat.degreesMinutesSeconds:
|
||||
return 'DMS';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Wgs84CoordinateFormatter {
|
||||
static String formatLatitude(
|
||||
double? value,
|
||||
Wgs84CoordinateFormat format,
|
||||
) {
|
||||
return _format(
|
||||
value: value,
|
||||
format: format,
|
||||
positiveHemisphere: 'N',
|
||||
negativeHemisphere: 'S',
|
||||
);
|
||||
}
|
||||
|
||||
static String formatLongitude(
|
||||
double? value,
|
||||
Wgs84CoordinateFormat format,
|
||||
) {
|
||||
return _format(
|
||||
value: value,
|
||||
format: format,
|
||||
positiveHemisphere: 'E',
|
||||
negativeHemisphere: 'W',
|
||||
);
|
||||
}
|
||||
|
||||
static String _format({
|
||||
required double? value,
|
||||
required Wgs84CoordinateFormat format,
|
||||
required String positiveHemisphere,
|
||||
required String negativeHemisphere,
|
||||
}) {
|
||||
if (value == null || value.isNaN || value.isInfinite) {
|
||||
return '-';
|
||||
}
|
||||
|
||||
final hemisphere = value >= 0 ? positiveHemisphere : negativeHemisphere;
|
||||
final absValue = value.abs();
|
||||
|
||||
switch (format) {
|
||||
case Wgs84CoordinateFormat.decimalDegrees:
|
||||
return '${absValue.toStringAsFixed(8)}° $hemisphere';
|
||||
|
||||
case Wgs84CoordinateFormat.degreesDecimalMinutes:
|
||||
final deg = absValue.floor();
|
||||
final minutes = (absValue - deg) * 60.0;
|
||||
|
||||
return '$deg° ${minutes.toStringAsFixed(5)}′ $hemisphere';
|
||||
|
||||
case Wgs84CoordinateFormat.degreesMinutesSeconds:
|
||||
final deg = absValue.floor();
|
||||
final fullMinutes = (absValue - deg) * 60.0;
|
||||
final min = fullMinutes.floor();
|
||||
final sec = (fullMinutes - min) * 60.0;
|
||||
|
||||
return '$deg° $min′ ${sec.toStringAsFixed(3)}″ $hemisphere';
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user