【问题标题】:(Geotools library) How to convert Korean coordinates (EPSG:5179) to Decimal Degree coordinates (EPSG:4326)(Geotools 库)如何将韩国坐标 (EPSG:5179) 转换为十进制度坐标 (EPSG:4326)
【发布时间】:2019-06-19 02:17:24
【问题描述】:

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

你有什么建议我做错了吗?提前谢谢你!

【问题讨论】:

    标签: java coordinates coordinate-systems geotools epsg


    【解决方案1】:

    这是一个典型的(程序员)错误,您假设您的坐标是 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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-30
      • 2016-09-28
      • 2019-06-04
      • 2011-11-26
      • 1970-01-01
      • 2020-04-06
      • 2021-04-19
      • 2017-07-02
      相关资源
      最近更新 更多