首页 > 编程知识 正文

java计算坐标距离,根据经纬度计算两点间的距离java

时间:2023-05-05 20:41:26 阅读:211198 作者:3268

前言

最近有个需求是根据经纬度获取用户之间的距离,最初使用的是Redis中的GEO ,但是计算出来的距离和预期的偏差较大,所以寻求了另外的一种方式,通过geodesy来计算两个经纬度之间的距离,如果大家有谁使用了redis方式计算成功了欢迎评论给我,让我学习一下。

首先引入依赖 <dependency>  <groupId>org.gavaghan</groupId>  <artifactId>geodesy</artifactId>  <version>1.1.3</version></dependency> 距离计算工具类 import org.gavaghan.geodesy.Ellipsoid;import org.gavaghan.geodesy.GeodeticCalculator;import org.gavaghan.geodesy.GeodeticCurve;import org.gavaghan.geodesy.GlobalCoordinates;import java.math.BigDecimal;import java.math.RoundingMode;public class DistanceUtils { /** * 根据经纬度计算距离 * * @param lon1 经度1 * @param lat1 纬度1 * @param lon2 经度2 * @param lat2 纬度2 * @return 距离 (km) */ public static String getDistance(String lon1, String lat1, String lon2, String lat2) { GlobalCoordinates source = new GlobalCoordinates(Double.parseDouble(lat1), Double.parseDouble(lon1)); GlobalCoordinates target = new GlobalCoordinates(Double.parseDouble(lat2), Double.parseDouble(lon2)); GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(Ellipsoid.Sphere, source, target); double distance = geoCurve.getEllipsoidalDistance(); BigDecimal distanceBig = new BigDecimal(distance).setScale(2, RoundingMode.UP); distanceBig = distanceBig.multiply(new BigDecimal("0.001")).setScale(2, RoundingMode.UP); return distanceBig.toString().concat("km"); } public static void main(String[] args) { String lon1 = "119.6438888888889"; String lat1 = "37.966944444444444"; String lon2 = "119.63916666666667"; String lat2 = "37.9675"; System.out.println(getDistance(lon1, lat1, lon2, lat2)); }} 测试

运行main方法

结果

0.42km

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。