从大韩民国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

你有什么建议我做错了吗?先感谢您 !

最佳答案

这是一个经典的(程序员)错误,您已假定坐标为X-Y或东西向顺序。但是,如果您查看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"]]

它的坐标是东北或y-x,因此如果将代码修改为:
Coordinate in = new Coordinate(coordinateY, coordinateX);

您将得到正确的答案,我得到(40.00997217325207 131.0999927804759)

09-25 20:16