Java利用Geotools实现不同坐标系之间坐标转换
目录
- Geotools
- maven配置
- 代码工具
- 使用示例
Geotools
文章图片
GeoTools 是一个开源的 Java GIS 工具包,可利用它来开发符合标准的地理信息系统。GeoTools 提供了 OGC (Open Geospatial Consortium) 规范的一个实现来作为他们的开发。
GeoTools 被许多项目使用,包括 Web 服务,命令行工具和桌面应用程序。
文章图片
核心功能
1.定义关键空间概念和数据结构的接口
- Java 拓扑套件(JTS)提供的集成几何支持
- 使用 OGC 过滤器编码规范的属性和空间过滤器
- 以多种文件格式和空间数据库访问 GIS 数据
- 坐标参考系统和转换支持
- 处理广泛的地图投影
- 根据空间和非空间属性过滤和分析数据
- 撰写和显示样式复杂的地图
- 供应商扩展,可以更好地控制文本标签和颜色混合
解析 / 编码技术提供了许多 OGC 标准的绑定,包括 GML,Filter,KML,SLD 和 SE。
6.GeoTools 插件:开放式插件系统,可让您教授库其他格式
用于 ImageIO-EXT 项目的插件,允许 GeoTools 从 GDAL 读取其他栅格格式
7.GeoTools 扩展
提供使用核心库的空间设施构建的其他功能。
文章图片
扩展提供图形和网络支持(用于查找最短路径),验证,Web 地图服务器客户端,用于 XML 解析和编码的绑定以及颜色调制器!
8.不支持 GeoTools
GeoTools 也是更广泛的社区的一部分,其工作区用于培养新人才和促进实验。
一些重点包括摇摆支持(在我们的教程中使用!),SWT,本地和 Web 流程支持,附加符号,附加数据格式,网格的生成以及 ISO Geometry 的一些实现。
maven配置 我们将首先定义我们希望使用的 GeoTools 的版本号。本工作手册是为 28-SNAPSHOT 编写的,尽管您可能希望尝试不同的版本。
对于生产, geotools.version应该使用 28 的稳定版本:
UTF-828-SNAPSHOT true
我们指定以下依赖项(您的应用程序需要的 GeoTools 模块):
org.geotools gt-main${geotools.version} org.geotools gt-epsg-hsql${geotools.version}
我们告诉 maven 从哪些存储库下载 jars:
osgeo OSGeo Release Repository https://repo.osgeo.org/repository/release/ false true osgeo-snapshot OSGeo Snapshot Repository https://repo.osgeo.org/repository/snapshot/ true false
代码工具
import lombok.extern.slf4j.Slf4j; import org.geotools.geometry.jts.JTS; import org.geotools.referencing.CRS; import org.locationtech.jts.geom.Coordinate; import org.opengis.referencing.FactoryException; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.referencing.operation.MathTransform; import org.opengis.referencing.operation.TransformException; import java.math.BigDecimal; @Slf4jpublic class GisUtil { public static void main(String[] args) throws FactoryException, TransformException {bjz54ToCgcs2000( 39440999.301,3631381.649); //bjz54ToCgcs2000( 39446227.146,3626791.679); } /*** @param x 源坐标x* @param y 源坐标y* @Description: 坐标系转换-北京54投影转国家2000投影*/public static Coordinate bjz54ToCgcs2000(double x ,double y){Coordinate tgtCoordinate= coordinateTransform(2415,4527, y, x); double tx=new BigDecimal(tgtCoordinate.x).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); double ty=new BigDecimal(tgtCoordinate.y).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); log.info(ty+","+tx); tgtCoordinate.setX(ty); tgtCoordinate.setY(tx); return tgtCoordinate; } public static Coordinate bjz54ToCgcs2000(Coordinate p){return bjz54ToCgcs2000(p.x, p.y); } /*** @param srcNo 源坐标系EPSG代号* @param targetNo 目标坐标系EPSG代号* @param x 源坐标x* @param y 源坐标y* @Description: 坐标系转换 */public static Coordinate coordinateTransform(int srcNo, int targetNo, double x , double y){Coordinate tar=new Coordinate(); try {CoordinateReferenceSystem src = https://www.it610.com/article/CRS.decode("EPSG:"+srcNo); CoordinateReferenceSystem target = CRS.decode("EPSG:"+targetNo); MathTransform transform = CRS.findMathTransform(src, target, true); Coordinate sour= new Coordinate(x, y); return JTS.transform(sour, tar, transform); } catch (FactoryException | TransformExceptione) {log.error(e.getMessage()); }return tar; }}
注:计算结果和测量软件的结果有2米的误差,用org.locationtech.proj4j工具包 计算的结果误差更大,有几十米。后续突出用pgis转换的办法误差在1毫米之间。
使用示例
@ApiOperation(value = "https://www.it610.com/article/坐标系转换北京54-国家2000")@GetMapping(value = "https://www.it610.com/bjz54ToCgcs2000")public ResponseDTObjz54ToCgcs2000(@RequestBody Coordinate dto){return ResponseDTO.succData(GisUtil.bjz54ToCgcs2000(dto)); }
【Java利用Geotools实现不同坐标系之间坐标转换】到此这篇关于Java利用Geotools实现不同坐标系之间坐标转换的文章就介绍到这了,更多相关Java Geotools坐标转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- java开发|Idea连接mysql时区错误问题永久解决
- Javascript类和继承
- 【Java中的线程】java.lang.Thread|【Java中的线程】java.lang.Thread 类分析
- Java on Azure Tooling 6月更新|Azure Toolkit for IntelliJ 与 Gradle插件
- java|基于DoS攻击能量分级的ICPS综合安全控制与通信协同设计
- Java后端|Spring Boot知识系列—Spring Boot整合日志框架【详解】
- Java入门基础|Java入门基础第4天《Java编程规范及编译源代码常见错误的解决方法》
- Java入门基础|Java入门基础第3天《使用记事本编写运行Java程序》
- Java入门基础|Java入门基础第2天《java jdk下载与安装教程》
- Java初学者到优秀程序员的全过程