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

article/2025/11/3 12:48:04

场景

Java+GeoTools(开源的Java GIS工具包)快速入门-实现读取shp文件并显示:

Java+GeoTools(开源的Java GIS工具包)快速入门-实现读取shp文件并显示_霸道流氓气质的博客-CSDN博客

在上面实现Java中集成Geotools之后,需求是将WKT数据转换成其他坐标系的WKT。

比如说将EPSG:4524的坐标系转换成EPSG:2334的坐标系数据。

当然如果是数据量较少,可以直接从WKT中复制出来单个点的数据在EPSG的官网进行转换。

EPSG.io: Coordinate Systems Worldwide

但是如果数据量较大,需要通过代码遍历的方式去转换大量数据。

注:

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

实现

1、用到ESPG的转换需要添加依赖

        <dependency><groupId>org.geotools</groupId><artifactId>gt-epsg-hsql</artifactId><version>24-SNAPSHOT</version></dependency>

否则会提示:

No code "EPSG:4524" from authority "EPSG" found for object of type "EngineeringCRS"

上面也讲过需要设置geotools的仓库,所以完整的pom需要添加的内容

        <!-- GeoTools begin--><dependency><groupId>org.geotools</groupId><artifactId>gt-shapefile</artifactId><version>24-SNAPSHOT</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-swing</artifactId><version>24-SNAPSHOT</version></dependency><!-- GeoTools epsg  need --><dependency><groupId>org.geotools</groupId><artifactId>gt-epsg-hsql</artifactId><version>24-SNAPSHOT</version></dependency></dependencies><repositories><repository><id>osgeo</id><name>OSGeo Release Repository</name><url>https://repo.osgeo.org/repository/release/</url><snapshots><enabled>false</enabled></snapshots><releases><enabled>true</enabled></releases></repository><repository><id>osgeo-snapshot</id><name>OSGeo Snapshot Repository</name><url>https://repo.osgeo.org/repository/snapshot/</url><snapshots><enabled>true</enabled></snapshots><releases><enabled>false</enabled></releases></repository></repositories><!-- GeoTools end-->

2、然后新建类

import org.geotools.geometry.jts.JTS;
import org.geotools.referencing.CRS;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
import org.locationtech.jts.io.WKTWriter;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.crs.CRSAuthorityFactory;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.TransformException;public class WKTTransform {public static void main(String[] args) throws ParseException, FactoryException, TransformException {//要转换的wktString oldWKT = "LINESTRING (37360817.569479 5127237.510467304, 37360830.13825466 5127118.315033647)";WKTReader wktReader = new WKTReader();//读取wkt为Geometry 几何对象Geometry oldGeometry = wktReader.read(oldWKT);//获取CRS权威工厂CRSAuthorityFactory crsAuthorityFactory = CRS.getAuthorityFactory(true);//创建sourceCRSCoordinateReferenceSystem sourceCRS = crsAuthorityFactory.createCoordinateReferenceSystem("EPSG:4524");//创建targetCRSCoordinateReferenceSystem targetCRS = crsAuthorityFactory.createCoordinateReferenceSystem("EPSG:2334");//获取MathTransformMathTransform mathTransform = CRS.findMathTransform(sourceCRS, targetCRS, true);//转换Geometry transform = JTS.transform(oldGeometry, mathTransform);//Geometry几何对象转换为WKTString newWKT = new WKTWriter().write(transform);System.out.println(newWKT);}
}

详细说明见代码实现。

相关api参考官方api文档

Overview (Geotools modules 30-SNAPSHOT API)

运行代码输出结果

注意这里转换的数据,将同样的坐标在EPSG网站上转换后对比

发现会存在0.00级别的误差数据。

3、如果以上0.00级别的误差都不能容忍的话,可以采用以下方式。

看一下epsg.io官网坐标系转换的接口,发现是无需任何鉴权,比如上面的转换对应的是get请求。

https://epsg.io/srs/transform/37360817.569479,5127237.510467304.json?key=default&s_srs=4524&t_srs=2334

所以另一种方式就是从WKT获取所有坐标,然后调用上面espg.io的接口进行转换,然后再将转换后的数据转成WKT。

具体流程自行实现。


http://chatgpt.dhexx.cn/article/tcsJwBk0.shtml

相关文章

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

场景 JavaGeoTools实现WKT数据根据EPSG编码进行坐标系转换&#xff1a; JavaGeoTools实现WKT数据根据EPSG编码进行坐标系转换_霸道流氓气质的博客-CSDN博客 上面使用GeoTools实现坐标系转换。 VueOpenlayersproj4实现坐标系转换: VueOpenlayersproj4实现坐标系转换_霸道流…

ENU、EPSG坐标系科普(三维重建)

ENU和EPSG实际上代表了两个不同的概念&#xff0c;这两者并不是直接对比的。 1. ENU坐标系&#xff1a;ENU坐标系是一种本地切面坐标系&#xff0c;用于表示与地理位置相关的空间数据。在ENU坐标系中&#xff0c;E代表东&#xff08;East&#xff09;&#xff0c;N代表北&…

什么是EPSG CODE

EPSG 是European Petroleum Survey Group (欧洲石油调查小组)的缩写&#xff0c;欧洲石油调查小组成立于1986年&#xff0c;并在2005年重组为国际石油和天然气生产商协会&#xff0c;即OGP(Internation Association of Oil & Gas Producers)。 该组织发布了一个坐标参照系…

openLayers 坐标转换 EPSG:3857和EPSG:4326区别

fromLonLat() 方法是继承自ol.proj 这个类。fromLonLat 将坐标从经度/纬度转换为其他投影。 import { fromLonLat } from "ol/proj"; 在 openlayers 中创建map时候会有个view 属性&#xff0c;该属性下面会存在一个center属性。这个属性就是设置中心位置的坐标。如果…

openlayers6【十】EPSG:3857和EPSG:4326区别详解

文章目录 1. 写在前面2. 什么是EPSG:3857坐标系&#xff08;投影坐标&#xff09;3. 什么是EPSG:4326 坐标系&#xff08;地理坐标&#xff09;4. EPSG:4326和EPSG:3857区别&#xff08;重点&#xff09; 1. 写在前面 在我之前写的文章中&#xff0c;其实已经涉及到了这一点&a…

EPSG竟然是个“石油组织”?

概述 作为一名GISer的你一定在各大GIS软件内见到过EPSG这个名称&#xff0c;或者至少在各种教程、文献内见到过这个名词。这里便为大家介绍一下EPSG到底是什么&#xff0c;有什么作用以及怎么使用。 什么是EPSG EPSG全称European Petroleum Survey Group&#xff0c;EPSG是其…

地理信息epsg:4326 和epsg:3857

我们先来看看各自的坐标系,查询网址http://epsg.io 可以看到这两种投影是属于同一坐标系&#xff0c;就是wgs84。需要明确一点的是投影是想用不同的方式展示地图&#xff0c;由于地球是个不规则的椭圆&#xff0c;在做不同地区的地图的时候为了显示其对应的地理特征&#xff0c…

【EPS概述】

目录 一、EPS分类二、EPS基本原理三、EPS控制策略弱磁控制滑膜观测器直接转矩控制&#xff08;DTC&#xff09; 一、EPS分类 C-EPS:转向管柱助力式P-EPS&#xff1a;小齿轮助力式R-EPS&#xff1a;齿条式助力式 二、EPS基本原理 各种类型EPS系统的组成和工作原理基本相同&am…

GIS-坐标系-EPSG(二次整理)

中国地图-坐标系 EPSG的英文全称是European Petroleum Survey Group&#xff0c;中文名称为欧洲石油调查组织。 比如对于中国来讲&#xff0c;以地球的几何球心为中心的地图就是EPSG:4479&#xff0c;以地球的椭球焦点为中心就是EPSG:4480&#xff0c;此外还有EPSG:4490&…

ESPG(European Petroleum Survey Group)

数据转换器&#xff08;栅格&#xff09; &#xff0c;数据转换器&#xff08;矢量&#xff09;转换数据时经常会看到EPSG的坐标系标识。那么什么是EPSG呢&#xff1f; ESPG&#xff08;European Petroleum Survey Group&#xff09;坐标系是一种用于地球表面测量和地理信息处…

生成小程序二维码(草料)

网站&#xff1a;草料二维码 格式&#xff1a;路径参数&#xff08;参数值后台生成&#xff09; 方式&#xff1a;可以单个&#xff1b;可以批量。 eg&#xff1a;pages/index/indexsign7BBCCC0rnqSyrXd5ZVoY78AAAAAAAAAA 步骤&#xff1a; 1. 确定生成二维码跳转的路径和参数值…

微信小程序分享朋友圈生成海报

微信小程序实现分享到朋友圈 分享朋友圈现在大家的通用做法就是通过Canvas生成一张图片后进行保存&#xff0c;然后自行转发朋友圈。最近项目有这个需求, 于是就记录一下。&#xff08;老规矩&#xff0c;我的博客复制粘贴就好使&#xff09; 如果想要海报上的二维码扫码完直…

微信小程序动态生成小程序码(云函数)

最近的需求是需要用户扫描指定二维码进去填写表单之类的需求&#xff08;暗骂提需求的人&#xff09; 看了下文档&#xff0c;嘿开发团队还真懂我们、 果断上手&#xff0c;然后问题又来了&#xff0c;这个返回值是二进制啊&#xff0c;好办&#xff01;&#xff01; 看代码 …

在线生成小程序码,微信生成带参数小程序码

一、 微信小程序码是什么 小程序码是微信自己推出的二维码&#xff0c; 可以通过扫描小程序码&#xff0c; 直接进入到对应的小程序页面。 普通的二维码是正方形的&#xff0c; 而小程序码是圆形&#xff0c; 更加容易让用户识别出来。 二、 在线生成微信小程序码 1&#xff09…

制作自己的微信小程序要怎么做?

现在不少人都想要制作自己的微信小程序&#xff0c;不管是企业还是商家都在咨询相关的问题。那么制作自己的微信小程序要怎么做&#xff1f;流程和费用分别又是怎么样的呢&#xff1f;下面个大家一起来看看。 步骤一&#xff1a;要有自己的小程序账号 首先我们需要有自己的小…

微信小程序公众平台如何生成小程序码

在微信小程序开放平台生成&#xff1a; 1.电脑打开链接下拉注册微信小程序开放平台:https://mp.weixin.qq.com/cgi-bin/wx 2.注册界面我就不多讲了&#xff0c;看着流程注册验证手机号&#xff0c;邮箱号什么的 3.注册后&#xff0c;打开登陆界面 https://mp.weixin.qq.com/ 进…

创建微信小程序

创建微信小程序。 这篇博客包括两个内容 1.创建微信小程序 2.查看微信小程序的Appid以及生成密钥 1.创建微信小程序 &#xff08;1&#xff09;.https://mp.weixin.qq.com/cgi-bin/wx微信小程序官网网址 进入微信小程序官网后&#xff0c;页面的最下面有个 “注册按钮” --&…

微信小程序生成带动态参数二维码

首先说一下我的使用场景&#xff0c;用户可根据id生成这一条记录的二维码&#xff0c;其他人扫码直接跳转到小程序&#xff0c;显示这条记录的具体信息。 分两步&#xff1a;第一在微信公众号后台配置&#xff0c;第二利用canvas前端实现二维码展示&#xff0c;并接收参数做下…

生成无限制微信小程序码

生成无限制的微信小程序码&#xff0c;主要是通过后端请求微信的接口&#xff0c;然后微信会把小程序码返回来。 本文不讲详细的方法了&#xff0c;只讲其中的一些关键点&#xff0c;官方文档也附上去了&#xff0c;结合这些点看官方文档会比较方便。 方法&#xff1a; 获取…

微信生成小程序码

微信生成小程序码扫描唤醒小程序(2) 我做的是 _**带参数无限个数小程序码**,有什么问题或者错误,请及时指出! (有些问题我还没有搞懂!但是代码能跑,小程序码能跳转!)微信官方文档地址 微信公众平台配置说明 配置微信小程序后台(至今也不能跳转到开发版)&#xff0c;登陆微信公…