Introduce MapGrid and MapDatum enums

- Added `MapGrid` enum to define grid types and associated projection methods.
- Added `MapDatum` enum to represent geodetic datums with relevant parameters and calculations.
This commit is contained in:
Jan Meinl
2026-05-14 20:39:41 +02:00
parent e52e082bcd
commit 02d4935e01
2 changed files with 88 additions and 0 deletions
@@ -0,0 +1,58 @@
package dev.coph.flightscore.backend.map;
public enum MapDatum {
WGS84("World Geodetic System 1984", 6378137.0, 298.257223563, 0.0, 0.0),
ETRS89("European Terrestrial Reference System 1989", 6378137.0, 298.257222101, 0.0, 0.0),
NAD83("North American Datum 1983", 6378137.0, 298.257222101, 0.0, 0.0),
CH1903("Swiss MN03", 6377397.155, 299.1528128, 600000.0, 200000.0),
CH1903_PLUS("Swiss MN95", 6377397.155, 299.1528128, 2600000.0, 1200000.0),
OGB1936("OSGB 1936 / British National Grid", 6377563.396, 299.3249646, 400000.0, -100000.0),
LKS94("Lithuania 1994", 6378137.0, 298.257222101, 500000.0, 0.0),
SWEREF99("Swedish Reference Frame 1999", 6378137.0, 298.257222101, 150000.0, 0.0),
TWD67("Taiwan Datum 1967", 6378160.0, 298.25, 250000.0, 0.0),
TWD97("Taiwan Datum 1997", 6378137.0, 298.257222101, 250000.0, 0.0),
AGD1966("Australian Geodetic Datum 1966", 6378160.0, 298.25, 500000.0, 10000000.0),
ED50("European Datum 1950", 6378388.0, 297.0, 500000.0, 0.0);
private final String displayName;
private final double semiMajorAxis;
private final double inverseFlattening;
private final double falseEasting;
private final double falseNorthing;
MapDatum(String displayName, double semiMajorAxis, double inverseFlattening, double falseEasting, double falseNorthing) {
this.displayName = displayName;
this.semiMajorAxis = semiMajorAxis;
this.inverseFlattening = inverseFlattening;
this.falseEasting = falseEasting;
this.falseNorthing = falseNorthing;
}
public String displayName() {
return displayName;
}
public double semiMajorAxis() {
return semiMajorAxis;
}
public double inverseFlattening() {
return inverseFlattening;
}
public double falseEasting() {
return falseEasting;
}
public double falseNorthing() {
return falseNorthing;
}
public double flattening() {
return 1.0 / inverseFlattening;
}
public double semiMinorAxis() {
return semiMajorAxis * (1.0 - flattening());
}
}
@@ -0,0 +1,30 @@
package dev.coph.flightscore.backend.map;
public enum MapGrid {
LAT_LONG("Lat/Long", "Geographic"),
UTM("Universal Transverse Mercator", "Transverse Mercator"),
SWISS_GRID("Swiss Grid", "Oblique Mercator"),
BRITISH_NATIONAL_GRID("British National Grid", "Transverse Mercator"),
LITHUANIA_TM("Lithuania TM", "Transverse Mercator"),
SWEREF_99_TM("SWEREF 99 TM", "Transverse Mercator"),
TWD67_TM2("TWD67 TM2", "Transverse Mercator"),
TWD97_TM2("TWD97 TM2", "Transverse Mercator"),
BNG_OGB_7("BNG OGB-7", "Transverse Mercator"),
BNG_OGB_M("BNG OGB-M", "Transverse Mercator");
private final String displayName;
private final String projectionType;
MapGrid(String displayName, String projectionType) {
this.displayName = displayName;
this.projectionType = projectionType;
}
public String displayName() {
return displayName;
}
public String projectionType() {
return projectionType;
}
}