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

news2024/11/24 12:52:07

场景

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 {

        //要转换的wkt
        String 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);
        //创建sourceCRS
        CoordinateReferenceSystem sourceCRS = crsAuthorityFactory.createCoordinateReferenceSystem("EPSG:4524");
        //创建targetCRS
        CoordinateReferenceSystem targetCRS = crsAuthorityFactory.createCoordinateReferenceSystem("EPSG:2334");
        //获取MathTransform
        MathTransform mathTransform = CRS.findMathTransform(sourceCRS, targetCRS, true);
        //转换
        Geometry transform = JTS.transform(oldGeometry, mathTransform);
        //Geometry几何对象转换为WKT
        String 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://www.coloradmin.cn/o/460407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络-如何寻找目标主机

视频参考链接&#xff1a;计算机网络-如何寻找目标计算机&#xff1f;_哔哩哔哩_bilibili 在互联网中如果使计算机A与计算机B如何进行通信&#xff0c;又是如何找到目标的计算机主机呢&#xff1f; 首先最简单的通信就是两台计算机中间加一根网线&#xff0c;那么这两台计算机…

算法基础—哈希表散列表的构建和处理冲突

1 哈希表的构建 1. 直接寻址法 取关键字或者关键字的某个线性函数值作为哈希地址,即H(Key)Key或者H(Key)a*Keyb(a,b为整数),这种散列函数也叫做自身函数.如果H(Key)的哈希地址上已经有值了,那么就往下一个位置找,知道找到H(Key)的位置没有值了就把元素放进去. 2. 数字分析法…

idea中导入spring源码;在spring源码中添加注释

标题&#xff1a;idea中导入spring源码;在spring源码中添加注释 我是跟着他操作的&#xff0c;下文是一些补充说明&#xff1a; 这个也可以借鉴 gradle下载链接【使用网盘下载】,不过有的没有&#xff0c; gradel下载链接&#xff1a;这个比较全 1.Spring源码编译环境 spr…

股票期货模拟交易有用吗?股票期货模拟交易心得

股票期货市场为了满足新用户的需求&#xff0c;有专门的股票期货模拟交易平台&#xff0c;大家可以在这个平台上进行股票期货的模拟交易&#xff0c;这样可以通过不断总结&#xff0c;丰富我们的知识。下面整理的股票期货模拟交易实验心得&#xff0c;从股票期货模拟交易与实盘…

远程 PC 访问软件

什么是远程电脑 远程电脑是物理上无法访问的计算机。不同分支机构中的漫游用户和员工的设备将是组织中 IT 管理员的远程计算机。 什么是远程 PC 访问 远程 PC 访问是一种控制物理无法触及的设备的功能。计算机、笔记本电脑、端点&#xff01;它们始终分散在全球各地的 IT 环…

【应用部署】Java项目从开发到部署生产完整流程

文章目录 背景一、开发环境二、项目搭建2.1 Maven创建项目2.1.1 创建maven项目2.1.2 引入依赖2.1.3 maven常用命令 三、SpringBoot基础配置四、项目打包4.1 打包jar4.2 打包war4.2.1 修改项目打包为war包4.2.2 排除内嵌的tomcat&#xff0c;引入外部tomcat4.2.3 添加servlet-ap…

数据库基础篇 《10.创建和管理表DDL》

目录 1. 基础知识 1.1 一条数据存储的过程 1.2 标识符命名规则 ​1.3 MySQL中的数据类型 ​ 2. 创建和管理数据库 2.1 创建数据库 2.2 使用数据库 2.3 修改数据库 2.4 删除数据库 3. 创建表 3.1 创建方式1 3.2 创建方式2 ​3.3 查看数据表结构 4. 修改表 4.1…

2023华为软件精英挑战赛,探寻软件人才与科技创新的最优解

作者 | 曾响铃 文 | 响铃说 今天&#xff0c;软件行业正呈现出江河入海一般的大汇流趋势。 一方面是技术的汇流&#xff0c;诸如人工智能等前沿技术与软件行业的深度融合&#xff0c;正全面颠覆软件产品的开发模式和服务逻辑。 另一方面则是行业的汇流&#xff0c;数字化浪…

PyEcharts数据可视化(1)——配置项

PyEcharts 学习连接 一、查看pyecharts版本 import pyecharts print(pyecharts.__version__)输出&#xff1a;1.9.0 二、绘制第一个图表 from pyecharts.charts import Bar bar Bar() # 创建柱形图对象 bar.add_xaxis(["衬衫","羊毛衫","雪纺衫…

创建路由React router(使用react-router dom V6版本)

React路由 隔了很长一段时间&#xff0c;重新捡起来React学习。 发现React的路由从原来的 Switch改成了Routes。nice&#xff0c;nice&#xff0c;nice&#xff01;&#xff01;&#xff01;&#xff01; 刚开始接触确实还是有一点生疏的。之前的关于【传参】【js跳转】【跳转模…

管理后台项目-06-用户管理角色管理模块

目录 1-路由信息搭建和api文件信息创建 2-用户管理模块 2.1-列表数据获取以及动态渲染 2.2-添加 | 修改 用户 2.3-删除-批量删除用户 2.4-分配角色 3-角色管理 3.1-修改角色 3.2-分配权限 1-路由信息搭建和api文件信息创建 我们先进行路由菜单的配置&#xff0c;在系统…

【测试开发】测试人的养成记,在这测试内卷乱世中突破测试开发...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 这几年&#xff0…

442. 数组中重复的数据|||41. 缺失的第一个正数|||485. 最大连续 1 的个数

442. 数组中重复的数据 题目 给你一个长度为 n 的整数数组 nums &#xff0c;其中 nums 的所有整数都在范围 [1, n] 内&#xff0c;且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数&#xff0c;并以数组形式返回。 你必须设计并实现一个时间复杂度为 O(n) 且仅…

Python如何连接Mysql及基本操作

1.什么要做python连接mysql&#xff0c;一般是解决什么问题的 做自动化测试时候&#xff0c;注册了一个新用户&#xff0c;产生了多余的数据&#xff0c;下次同一个账号就无法注册了&#xff0c;这种情况怎么办呢&#xff1f;自动化测试都有数据准备和数据清理的操作&#xff…

KDJB-1200继电保护定值校验仪器

一、产品概述 KDJB-1200 微机继电保护校验仪是在参照电力部颁发的《微机型继电保护试验装置技术条件(讨论稿)》的基础上&#xff0c;听取用户意见&#xff0c;总结目前国内同类产品优缺点&#xff0c;充分使用现代微电子技术和器件实现的一种新型小型化微机继电保护测试仪。 采…

《C++ Primer Plus》(第6版)第18章编程练习

《C Primer Plus》&#xff08;第6版&#xff09;第18章编程练习 《C Primer Plus》&#xff08;第6版&#xff09;第18章编程练习1. 函数average_list()2.3. sum_value()4. 使用lambda重新编写程序清单16.15 《C Primer Plus》&#xff08;第6版&#xff09;第18章编程练习 1…

mysql进阶-查询优化-慢查询日志

文章目录 一、什么是慢查询日志二、慢查询日志能干什么2.1 性能分析和优化2.2 诊断和排查问题2.3 数据分析和探索 三、慢查询日志实战3.1 永久开启开启慢查询日志3.2 临时开启慢查询日志3.4 常用命令 四、如何分析慢查询日志五、优化慢查询语句五、总结 一、什么是慢查询日志 …

这场SIG组开放工作会议为何吸引了那么多人的关注?

【中国&#xff0c;上海&#xff0c;2023年4月20日-21日】openEuler Developer Day 2023在线上和线下同步举办。本次大会由开放原子开源基金会指导&#xff0c;中国软件行业协会、openEuler社区、边缘计算产业联盟共同主办&#xff0c;以“万涓汇流&#xff0c;奔涌向前”为主题…

数据仓库与数据库之间的区别与联系

文章目录 一、数据库与数据仓库的区别 1.1、区别 1.2、ACID内容 二、原子性&#xff08;Atomicity&#xff09; 三、持久性&#xff08;Durability&#xff09; 四、隔离性&#xff08;Isolation&#xff09; 1、锁机制 2、脏读、不可重复读和幻读 2、事务隔离级别 五…

权限提升:溢出漏洞.(普通权限 提升 管理员权限.)

权限提升&#xff1a;溢出漏洞 权限提升简称提权&#xff0c;由于操作系统都是多用户操作系统&#xff0c;用户之间都有权限控制&#xff0c;比如通过 Web 漏洞拿到的是 Web 进程的权限&#xff0c;往往 Web 服务都是以一个权限很低的账号启动的&#xff0c;因此通过 Webshell …