Java+proj4j实现根据EPSG编码进行坐标系转换

场景

Java+GeoTools实现WKT数据根据EPSG编码进行坐标系转换:

Java+GeoTools实现WKT数据根据EPSG编码进行坐标系转换_霸道流氓气质的博客-CSDN博客

上面使用GeoTools实现坐标系转换。

Vue+Openlayers+proj4实现坐标系转换:

Vue+Openlayers+proj4实现坐标系转换_霸道流氓气质的博客-CSDN博客

以及讲了在Vue中使用proj4js实现前端的坐标系转换。

除此之外还可以使用proj4j在java后端中根据epsg编码进行不同坐标系数据转换。

注:

博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主

实现

1、proj4j

用于坐标重投影的project .4库的Java端。

https://github.com/locationtech/proj4j

添加项目依赖

​
        <!-- https://mvnrepository.com/artifact/org.locationtech.proj4j/proj4j -->
        <dependency>
            <groupId>org.locationtech.proj4j</groupId>
            <artifactId>proj4j</artifactId>
            <version>1.2.3</version>
        </dependency>

​

2、新建转换类,比如还是跟上面一样实现EPSG:4524转EPSG:2334

import org.locationtech.proj4j.*;

public class HelloProj4J {
    public static void main(String[] args) {
        CRSFactory crsFactory = new CRSFactory();
        //源坐标系统
       
        //根据投影字符串参数获取坐标系统
        String SourceCRS= "4524";<BR>       StringSourceCRS_params="+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=GRS80 +units=m +no_defs";
        CoordinateReferenceSystem source = crsFactory.createFromParameters(SourceCRS, SourceCRS_params);

        //根据名称获取坐标系统
        //CoordinateReferenceSystem source = crsFactory.createFromName("epsg:4524");

        //目标坐标系统
       
        根据投影字符串参数获取坐标系统
        String TargetCRS= "2334";<BR>       StringTargetCRS_params="+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=IAU76 +units=m +no_defs";
        CoordinateReferenceSystem  target = crsFactory.createFromParameters(TargetCRS, TargetCRS_params);
       
        //根据名称获取坐标系统
        //CoordinateReferenceSystem  target =  crsFactory.createFromName("epsg:2334");

        //定义转换类
        CoordinateTransformFactory ctf = new CoordinateTransformFactory();
        CoordinateTransform transform = ctf.createTransform(source, target);

        //坐标系转换
        ProjCoordinate projCoordinate = new ProjCoordinate(37360817.569479, 5127237.510467304);
        //ProjCoordinate projCoordinate = new ProjCoordinate(119.0632442, 45.7414338);
        transform.transform(projCoordinate, projCoordinate);
        System.out.println("转换后x:"+projCoordinate.x);
        System.out.println("转换后y:"+projCoordinate.y);
    }
}

运行以上代码,与epsg网站转换效果对比

EPSG.io: Coordinate Systems Worldwide

3、注意这里获取坐标系统有两种方式

一种是直接通过名字

CoordinateReferenceSystem source = crsFactory.createFromName("epsg:4524");

一种是通过投影字符串参数以及自定义名字

        String SourceCRS = "4524";
       StringSourceCRS_params="+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=GRS80 +units=m +no_defs";
        CoordinateReferenceSystem source = crsFactory.createFromParameters(SourceCRS, SourceCRS_params);

投影字符串的获取方式和规则

参考上面proj4js的文章中。

将从epsg.io获取的proj.4的参数去掉后面的 +type=crs部分

截取到+no_defs以及前面的部分。

规则的由来是依据文档中示例转换的参数与官网同样参数做对比得出

否则proj4j会提示:type parameter is not supported

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
proj4js是一个基于JavaScript的地理投影库,能够实现不同地理坐标系之间的转换。要实现本地坐标与天地图的转换,首先需要加载proj4js库。 使用proj4js进行坐标转换的步骤如下: 1. 引入proj4js库。在HTML文件中添加以下代码: ```html <script src="https://cdn.bootcdn.net/ajax/libs/proj4js/2.6.0/proj4.min.js"></script> ``` 2. 定义本地坐标系。假设本地坐标系的坐标参考系统为EPSG:4326,也就是常见的WGS84坐标系。可以使用proj4js定义如下: ```javascript proj4.defs("EPSG:4326", "+proj=longlat +datum=WGS84 +no_defs"); ``` 3. 定义天地图坐标系。假设天地图的坐标参考系统为EPSG:3857,也就是常见的Web墨卡托投影。可以使用proj4js定义如下: ```javascript proj4.defs("EPSG:3857", "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs"); ``` 4. 进行坐标转换。假设本地坐标为[120, 30],可以使用proj4js进行转换: ```javascript var localCoord = [120, 30]; var tdtCoord = proj4("EPSG:4326", "EPSG:3857", localCoord); ``` 这样就完成了本地坐标与天地图坐标的转换转换后的坐标存储在tdtCoord变量中,可以根据需要进行使用。 需要注意的是,天地图使用的是Web墨卡托投影,而常见的WGS84坐标系是经纬度坐标。因此,在进行坐标转换时要确保使用的坐标系定义与实际情况一致,以确保转换的准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霸道流氓气质

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值