使用JTS及其姐妹项目GeoTools进行坐标系转换

简介: 【6月更文挑战第7天】使用JTS及其姐妹项目GeoTools进行坐标系转换

这里创建了一个LineString对象并计算其长度。如果pointApointB代表的是经纬度坐标,并且你的坐标参考系(CRS)是基于度数的(比如WGS84,EPSG:4326),那么通过getLength()得到的结果将会是度数形式,如前所述,这并不直接等同于实际的地面距离。

若要将这个长度转换为实际的地面距离(以米为单位),你需要执行之前提到的经纬度到距离的转换。由于直接在当前代码片段中加入这一转换逻辑会使代码变得复杂,一个更优雅的方式是首先确保你的LineString是在一个适合计算距离的投影坐标系中。这通常涉及到坐标系的投影转换。

以下是一个简化的示例,说明如何使用JTS及其姐妹项目GeoTools进行坐标系转换,然后再计算线段长度。这个示例假设你要从WGS84(EPSG:4326)转换到一种适合测量距离的投影坐标系,比如UTM(Universal Transverse Mercator):

import org.geotools.geometry.jts.JTS;
import org.geotools.referencing.CRS;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.LineString;
import org.locationtech.jts.geom.GeometryFactory;
import com.vividsolutions.jts.io.ParseException;
import com.vividsolutions.jts.io.WKTReader;

public class DistanceCalculator {
   
    public static void main(String[] args) throws Exception {
   
        // 初始化
        GeometryFactory geometryFactory = new GeometryFactory();
        WKTReader wktReader = new WKTReader(geometryFactory);

        // 假设pointA和pointB是经纬度坐标
        String subway = "LINESTRING(" + pointA + "," + pointB + ")";
        LineString lineString = (LineString) wktReader.read(subway);

        // 定义源坐标系(WGS84)和目标坐标系(例如,一个适当的UTM区域)
        String sourceCRS = "EPSG:4326";
        String targetCRS = "EPSG:32632"; // 这里以UTM Zone 32N为例,请根据实际情况选择正确的UTM区域

        // 执行坐标系转换
        Geometry projectedLine = JTS.transform(lineString, CRS.decode(sourceCRS), CRS.decode(targetCRS));

        // 现在可以安全地计算实际距离
        double lengthInMeters = projectedLine.getLength();

        System.out.println("Distance in meters: " + lengthInMeters);
    }
}

这段代码引入了GeoTools库来处理坐标系的转换。注意,你需要添加GeoTools及其依赖到你的项目中。此外,确保targetCRS变量设置为你数据所在地区的正确UTM区域编号。这样,计算出的lengthInMeters就是以米为单位的实际地面距离了。

目录
相关文章
|
Java 开发工具
【GDAL-java的四个常用代码示例】
【GDAL-java的四个常用代码示例】
755 0
|
Java API 网络架构
关于 Spring Integration 你知道多少,包含集成MQTT案例讲述及源码3
关于 Spring Integration 你知道多少,包含集成MQTT案例讲述及源码
2649 0
关于 Spring Integration 你知道多少,包含集成MQTT案例讲述及源码3
|
存储 JSON 关系型数据库
基于GeoTools的GeoJson导入到PostGis实战
GeoJson是一种对各种地理数据结构进行编码的格式,基于json的地理空间信息数据交换格式。GeoJson对象可以用来表示几何,特征或者特征集合。支持地理点、线、面、多点、多线、多面及几何集合。GeoJson不是本文的重点,因此不再赘述。
2573 0
基于GeoTools的GeoJson导入到PostGis实战
|
传感器 JSON 监控
Springboot + oshi 实现对服务器硬件的监控
OSHI是一个免费的基于JNA的(本机)Java操作系统和硬件信息库。它不需要安装任何额外的本地库,旨在提供跨平台实现来检索系统信息,如操作系统版本、进程、内存和CPU使用情况、磁盘和分区、设备、传感器等。
1930 0
Springboot接口同时支持GET和POST请求
Springboot接口同时支持GET和POST请求
1708 0
|
数据可视化 前端开发 关系型数据库
基于Mybatis-Plus实现Geometry字段在PostGis空间数据库中的使用
本文讲解在mybatis-plus中操作geometry空间字段,同时实现查询和插入操作​。通过geojson,结合前端可视化组件即可完成​矢量数据的空间可视化。
3671 0
基于Mybatis-Plus实现Geometry字段在PostGis空间数据库中的使用
|
算法 Java Python
jts里的lineString.getLength()的单位是什么如何换算成距离
【6月更文挑战第7天】jts里的lineString.getLength()的单位是什么如何换算成距离
901 0
|
消息中间件 JSON Java
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
34919 1
|
存储 Java 数据挖掘
|
算法 JavaScript 前端开发
84坐标系、02坐标系、百度坐标之间相互转换算法
最近有同学反馈之前的坐标系转换有问题,对之前的工具类进行了修正。 一、地图坐标转换java工具类 包含84坐标系、02坐标系、百度地图、高德地图、腾讯地图坐标之间相互转换的算法 wgs84ToGcj02:将 WGS84 坐标系下的经纬度转换为 GCJ02 坐标系下的经纬度。 gcj02ToWgs84:将 GCJ02 坐标系下的经纬度转换为 WGS84 坐标系下的经纬度。 gcj02ToBd09:将 GCJ02 坐标系下的经纬度转换为 BD09 坐标系下的经纬度。 bd09ToGcj02:将 BD09 坐标系下的经纬度转换为 GCJ02 坐标系下的经纬度。
2272 0
84坐标系、02坐标系、百度坐标之间相互转换算法