geotools 计算两个经纬度点之间的距离

geotools 计算两个经纬度点之间的距离


最近研究geotools,发现网上的直接搜索相关实现比较少,所以贴出示例代码,方便大家寻找。

主要的maven依赖

<dependency>
  <groupId>org.geotools</groupId>
  <artifactId>gt-referencing</artifactId>
  <version>${geotools.version}</version>
</dependency>
<dependency>
  <groupId>org.geotools</groupId>
  <artifactId>gt-epsg-hsql</artifactId>
  <version>${geotools.version}</version>
</dependency>
<dependency>
  <groupId>org.geotools</groupId>
  <artifactId>gt-epsg-extension</artifactId>
  <version>${geotools.version}</version>
</dependency>

代码实现

	// 84坐标系构造GeodeticCalculator
	GeodeticCalculator geodeticCalculator = new GeodeticCalculator(DefaultGeographicCRS.WGS84);
	// 起点经纬度
	geodeticCalculator.setStartingGeographicPoint(120,0);
	// 末点经纬度
	geodeticCalculator.setDestinationGeographicPoint(121,0);
	// 计算距离,单位:米
	double orthodromicDistance = geodeticCalculator.getOrthodromicDistance();
	System.out.println(orthodromicDistance);

点击跳转geotools官方链接

### 使用 GeoTools 计算两个地理坐标之间距离 为了计算两个地理坐标之间距离,可以利用 `GeoTools` 库中的功能来实现这一目标。下面是一个具体的例子说明如何操作: 首先,创建一个新的 Maven 或 Gradle 项目并添加必要的依赖项以引入 GeoTools。 对于 Maven 用户,在 pom.xml 文件中加入如下配置: ```xml <dependency> <groupId>org.geotools</groupId> <artifactId>gt-main</artifactId> <version>25.0</version> </dependency> ``` 接着编写 Java 代码完成两距离的测量工作: ```java import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.GeometryFactory; import org.locationtech.jts.geom.Point; import org.opengis.referencing.FactoryException; import org.opengis.referencing.crs.CoordinateReferenceSystem; import org.opengis.referencing.operation.MathTransform; import org.opengis.referencing.operation.TransformException; public class DistanceCalculator { public static double calculateDistance(double lon1, double lat1, double lon2, double lat2) throws FactoryException, TransformException { GeometryFactory geometryFactory = new GeometryFactory(); // 创建第一个对象 Coordinate coord1 = new Coordinate(lon1, lat1); Point point1 = geometryFactory.createPoint(coord1); // 创建第二个对象 Coordinate coord2 = new Coordinate(lon2, lat2); Point point2 = geometryFactory.createPoint(coord2); // 定义WGS84坐标系作为输入参数 String wkt = "GEOGCS[\"WGS 84\",DATUM[\"World Geodetic System 1984\",SPHEROID[\"WGS 84\",6378137.0,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0.0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943295],AXIS[\"Geodetic latitude\",NORTH],AXIS[\"Geodetic longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]"; CoordinateReferenceSystem crs = CRS.parseWKT(wkt); MathTransform transformToMeterCRS = CRS.findMathTransform(crs, DefaultEngineeringCRS.CARTESIAN); // 将经纬度转换成米制单位下的坐标值 DirectPosition2D pos1 = new DirectPosition2D(crs, lon1, lat1); DirectPosition2D targetPos1 = new DirectPosition2D(); transformToMeterCRS.transform(pos1, targetPos1); DirectPosition2D pos2 = new DirectPosition2D(crs, lon2, lat2); DirectPosition2D targetPos2 = new DirectPosition2D(); transformToMeterCRS.transform(pos2, targetPos2); // 构建新的几何体用于计算欧氏距离 GeometryFactory factoryInMeters = new GeometryFactory(new PrecisionModel(), 26918); // NAD83 / UTM zone 18N (m) Point pnt1InMeters = factoryInMeters.createPoint(new Coordinate(targetPos1.x, targetPos1.y)); Point pnt2InMeters = factoryInMeters.createPoint(new Coordinate(targetPos2.x, targetPos2.y)); return pnt1InMeters.distance(pnt2InMeters)[^1]; } } ``` 上述方法实现了基于 WGS84 坐标系统的两地之间直线距离(即最短路径)的计算,并返回结果以米为单位表示的距离长度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值