3

是否存在任何用于 Java 的开源或“免费”库,我可以在其中执行从一个空间系统到另一个空间系统的坐标转换?

我找到了 Opengeo http://opengeo.org/,但它是一个用于各种空间事物的庞大而全面的库。

有没有更小的存在?我需要从 MGA56 转换为 WGS84。

4

3 回答 3

4

有一个完全用 Java 编写的轻量级库。

Coordinate Transformation Suite(缩写 CTS)是一个库,用于使用众所周知的大地测量算法和参数集执行坐标转换。

CTS 处理 4257 个坐标参考系统 (3910 EPSG)。

该项目的源代码位于:

https://github.com/irstv/CTS

于 2013-12-11T13:43:50.153 回答
3

一个简单的解决方案是PROJ.4,但它没有 Java 绑定,因此使用它可能有点棘手。一个更完整(但可能比您想要的更大)的解决方案是GeoTools。但是快速搜索发现了Java Map Projection Library,它似乎是 PROJ.4 的 Java 端口。我会试一试。

由于您似乎需要进行基准面移动,而不仅仅是投影,因此您将需要某种坐标系数据库。最容易掌握的是 EPSG 数据库——PROJ.4 带有一个 EPSG 映射文件,对于大多数用途来说应该足够好。

看起来 MGA56 是EPSG: 28356 ,当然 WGS84 是EPSG:4326

于 2009-11-05T02:24:17.047 回答
1

我需要在 WGS84(GPS 投影)和 EPSG 27700(英国国家电网)之间来回转换,我发现 geotrellis 库最准确和可用。它是用 Scala 编写的,但显然您可以在 Java 中使用该库。这是我使用的 Maven 依赖项:

        <dependency>
            <groupId>org.locationtech.geotrellis</groupId>
            <artifactId>geotrellis-proj4_2.12</artifactId>
            <version>2.3.1</version>
        </dependency>

这是一些示例代码:

       CRS epsg27700 = CRS.fromEpsgCode(27700);
        CRS wgs84 = CRS.fromEpsgCode(4326);

        var toWgs84 = Transform.apply(epsg27700, wgs84);
        var fromWgs84 = Transform.apply(wgs84, epsg27700);

        Tuple2<Object, Object> southWestInWgs84 = toWgs84.apply(-90_619.29, 10_097.13);
        System.out.println("South-West corner in WGS 84: " + southWestInWgs84._1() + "," + southWestInWgs84._2());
        Tuple2<Object, Object> southWestBackToEpsg27700 = fromWgs84.apply(southWestInWgs84._1(), southWestInWgs84._2());
        System.out.println("South-West corner back to EPSG 27700: " + southWestBackToEpsg27700._1() + "," + southWestBackToEpsg27700._2());

产生这个输出:

WGS 84 中的西南角:-8.820000046234389,49.7899999643445

西南角返回 EPSG 27700:-90619.2888566542,10097.128186725415

于 2019-09-18T15:29:02.333 回答