是否存在任何用于 Java 的开源或“免费”库,我可以在其中执行从一个空间系统到另一个空间系统的坐标转换?
我找到了 Opengeo http://opengeo.org/,但它是一个用于各种空间事物的庞大而全面的库。
有没有更小的存在?我需要从 MGA56 转换为 WGS84。
是否存在任何用于 Java 的开源或“免费”库,我可以在其中执行从一个空间系统到另一个空间系统的坐标转换?
我找到了 Opengeo http://opengeo.org/,但它是一个用于各种空间事物的庞大而全面的库。
有没有更小的存在?我需要从 MGA56 转换为 WGS84。
有一个完全用 Java 编写的轻量级库。
Coordinate Transformation Suite(缩写 CTS)是一个库,用于使用众所周知的大地测量算法和参数集执行坐标转换。
CTS 处理 4257 个坐标参考系统 (3910 EPSG)。
该项目的源代码位于:
一个简单的解决方案是PROJ.4,但它没有 Java 绑定,因此使用它可能有点棘手。一个更完整(但可能比您想要的更大)的解决方案是GeoTools。但是快速搜索发现了Java Map Projection Library,它似乎是 PROJ.4 的 Java 端口。我会试一试。
由于您似乎需要进行基准面移动,而不仅仅是投影,因此您将需要某种坐标系数据库。最容易掌握的是 EPSG 数据库——PROJ.4 带有一个 EPSG 映射文件,对于大多数用途来说应该足够好。
我需要在 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