(Библиотека Geotools) Как преобразовать корейские координаты (EPSG:5179) в координаты в десятичных градусах (EPSG:4326)
У меня проблема при преобразовании из системы координат Кореи 2000 (EPSG:5179) в десятичную степень (EPSG:4326).
Мы разрабатываем географическую информационную систему для корейской компании. Мы использовали библиотеку Geotools для реализации нескольких бэкэндов. Однако сейчас у меня проблема с преобразованием EPSG: 5179 в EPSG:4326. Например: при использовании нескольких онлайн-конвертеров, таких как https://epsg.io/transform#s_srs=5179&t_srs=4326 при попытке конвертировать корейскую координату: x: 1307285 y: 2229260
ожидаемые результаты (в десятичном формате): x: 131.0999928 y: 40.0099722
Так что теперь я пытаюсь использовать библиотеку Geotools для того же преобразования, используя эту документацию http://docs.geotools.org/stable/userguide/library/api/jts.html
Мой пример теста:
public void testProjectedKoreanCoordinatesToDecimalDegree() throws FactoryException, TransformException {
//EPSG:5179 -> EPSG:4326 CONVERSION
CoordinateReferenceSystem sourceCRS = CRS.decode("EPSG:5179");
CoordinateReferenceSystem targetCRS = CRS.decode("EPSG:4326");
double coordinateX = 1307285;
double coordinateY = 2229260;
Coordinate in = new Coordinate(coordinateX, coordinateY);
Coordinate out = in;
MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS);
Coordinate result = JTS.transform(in, out, transform);
DegreeCoordinates degreeCoordinates = DegreeCoordinates.fromJTSCoordinate(result);
double expectedLongitude = 131.0999928;
double expectedLatitude = 40.0099721;
assertEquals(expectedLongitude, degreeCoordinates.getLongitude(), 0.00001);
assertEquals(expectedLatitude, degreeCoordinates.getLatitude(), 0.00001);
}
Так что тест не пройден при первом сравнении координат, фактический результат: долгота: 140.340217725
когда долгота должна быть 131.0999928
У вас есть предложения, что я делаю не так? Заранее спасибо!
1 ответ
Это классическая (программистская) ошибка, вы предположили, что ваши координаты в порядке XY или Восток-Север. Но если вы посмотрите на определение EPSG:5179, вы увидите:
PROJCS["Korea 2000 / Unified CS",
GEOGCS["Korea 2000",
DATUM["Geocentric datum of Korea",
SPHEROID["GRS 1980", 6378137.0, 298.257222101, AUTHORITY["EPSG","7019"]],
TOWGS84[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
AUTHORITY["EPSG","6737"]],
PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]],
UNIT["degree", 0.017453292519943295],
AXIS["Geodetic latitude", NORTH],
AXIS["Geodetic longitude", EAST],
AUTHORITY["EPSG","4737"]],
PROJECTION["Transverse_Mercator", AUTHORITY["EPSG","9807"]],
PARAMETER["central_meridian", 127.5],
PARAMETER["latitude_of_origin", 38.00000000000001],
PARAMETER["scale_factor", 0.9996],
PARAMETER["false_easting", 1000000.0],
PARAMETER["false_northing", 2000000.0],
UNIT["m", 1.0],
AXIS["Northing", NORTH],
AXIS["Easting", EAST],
AUTHORITY["EPSG","5179"]]
что его координаты северо-восточные или yx, поэтому если вы измените свой код так:
Coordinate in = new Coordinate(coordinateY, coordinateX);
вы получите правильный ответ, я получаю (40.00997217325207 131.0999927804759)
,