1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Java:计算地球上两个经纬度坐标之间的距离-geodesy和geotools实现

Java:计算地球上两个经纬度坐标之间的距离-geodesy和geotools实现

时间:2019-01-22 12:46:44

相关推荐

Java:计算地球上两个经纬度坐标之间的距离-geodesy和geotools实现

目录

方式一:自定义公式计算方式二:geodesy计算距离方式三:geotools计算距离

两个点的经纬度

各种计算方式

方式一:自定义公式计算

package com.example.demo.util;public class GeoUtil {/*** 地球半径,单位m*/private static final double EARTH_RADIUS = 6378137;/*** 根据经纬度,计算两点间的距离** @param longitude1 第一个点的经度* @param latitude1 第一个点的纬度* @param longitude2 第二个点的经度* @param latitude2 第二个点的纬度* @return 返回距离,单位m*/public static double getDistance(double longitude1, double latitude1, double longitude2, double latitude2) {// 纬度double lat1 = Math.toRadians(latitude1);double lat2 = Math.toRadians(latitude2);// 经度double lng1 = Math.toRadians(longitude1);double lng2 = Math.toRadians(longitude2);// 纬度之差double a = lat1 - lat2;// 经度之差double b = lng1 - lng2;// 计算两点距离的公式double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(b / 2), 2)));// 弧长乘地球半径, 返回单位: 米return s * EARTH_RADIUS;}public static void main(String[] args) {double distance = GeoUtil.getDistance(113.805695, 22.678611, 113.826391, 22.716473);System.out.println(distance);// 4720.367727793572}}

方式二:geodesy计算距离

依赖

<!--用于计算两点之间的距离--><dependency><groupId>org.gavaghan</groupId><artifactId>geodesy</artifactId><version>1.1.3</version></dependency>

示例

package com.example.demo;import org.gavaghan.geodesy.Ellipsoid;import org.gavaghan.geodesy.GeodeticCalculator;import org.gavaghan.geodesy.GeodeticCurve;import org.gavaghan.geodesy.GlobalCoordinates;import org.junit.jupiter.api.Test;public class GeoTest {@Testpublic void testGetDistance3() {//创建GeodeticCalculator,调用计算方法,传入坐标系、经纬度用于计算距离GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(Ellipsoid.Sphere,new GlobalCoordinates(22.678611, 113.805695),new GlobalCoordinates(22.716473, 113.826391));System.out.println(geoCurve.getEllipsoidalDistance());// WGS84 4701.260219874908// Sphere 4715.085736444097}}

参考

计算两个坐标经纬度之间的距离(5种方式)

方式三:geotools计算距离

文档

/

依赖

<repositories><repository><id>osgeo</id><name>OSGeo Release Repository</name><url>/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>/repository/snapshot/</url><snapshots><enabled>true</enabled></snapshots><releases><enabled>false</enabled></releases></repository></repositories><dependencies><dependency><groupId>org.geotools</groupId><artifactId>gt-referencing</artifactId><version>27.2</version></dependency></dependencies>

注意:geotools不在central中央仓库,需要配置下载源

如果配置了镜像~/.m2/settings.xml,不能设置为*

<mirrors><mirror><id>aliyunmaven</id><mirrorOf>central</mirrorOf><name>阿里云公共仓库</name><url>/repository/public</url></mirror></mirrors>

代码示例

package com.example.demo.util;import org.geotools.referencing.GeodeticCalculator;import org.geotools.referencing.crs.DefaultGeographicCRS;public class DemoUtil {public static double getDistance(double longitude1, double latitude1, double longitude2, double latitude2) {// 84坐标系构造GeodeticCalculatorGeodeticCalculator geodeticCalculator = new GeodeticCalculator(DefaultGeographicCRS.WGS84);// 起点经纬度geodeticCalculator.setStartingGeographicPoint(longitude1, latitude1);// 末点经纬度geodeticCalculator.setDestinationGeographicPoint(longitude2, latitude2);// 计算距离,单位:米return geodeticCalculator.getOrthodromicDistance();}public static void main(String[] args) {double distance = DemoUtil.getDistance(113.805695, 22.678611, 113.826391, 22.716473);System.out.println(distance);// 4701.260219872655}}

参考

GeoTools依赖使用Maven下载失败解决办法记录

Java计算两个GPS坐标点之间的距离(可用于计算里程等)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。