(Библиотека Geotools) Как преобразовать корейские координаты (EPSG: 5179) в координаты в десятичных градусах (EPSG: 4326) - PullRequest
0 голосов
/ 25 января 2019

У меня проблема при преобразовании из системы координат Кореи 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 Ответ

0 голосов
/ 27 января 2019

Это классическая (программистская) ошибка, вы предположили, что ваши координаты в порядке 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).

...