java坐标变换

cig3rfwq  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(407)

java有没有开源或“免费”的库,我可以在其中执行从一个空间系统到另一个空间系统的坐标转换?
我找到了opengeohttp://opengeo.org/ 但它是一个巨大而全面的图书馆,里面有各种各样的空间事物。
有更小的吗?我需要从mga56转换到wgs84。

rbpvctlc

rbpvctlc1#

我需要在wgs84(gps投影)和EPSG27700(英国国家电网)之间来回转换,我发现GeoGrillis库是最精确和可用的。它是用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.789996964345
西南角返回epsg 27700:-90619.288856654210097.128186725415

n9vozmp4

n9vozmp42#

一个简单的解决方案是proj.4,但它没有java绑定,因此使用它可能有点棘手。一个更完整(但可能比你想要的更大)的解决方案是geotools。但是快速搜索发现了JavaMapProjection库,它似乎是proj.4的java端口。我想试试。
因为看起来你需要做一个基准移动,而不仅仅是一个投影,你需要有一些坐标系统数据库。最容易掌握的是epsg数据库——proj.4附带了一个epsgMap文件,对于大多数用途来说,它应该足够好了。
看起来mga56epsg:28356当然wgs84是epsg:4326.

zf9nrax1

zf9nrax13#

有一个完全用java编写的轻量级库。
坐标变换套件(简略cts)是一个库,用于使用众所周知的大地测量算法和参数集执行坐标变换。
cts处理4257坐标参考系(3910 epsg)。
本项目的源代码位于:
https://github.com/irstv/cts

相关问题