根据经纬度计算两点之间的距离;
-
导入maven
<dependency> <groupId>org.gavaghan</groupId> <artifactId>geodesy</artifactId> <version>1.1.3</version> </dependency>
-
代码实现:
package ams.commons.utils; import org.gavaghan.geodesy.Ellipsoid; import org.gavaghan.geodesy.GeodeticCalculator; import org.gavaghan.geodesy.GlobalCoordinates; import java.math.BigDecimal; public class DistanceUtils { /** * 根据经纬度,计算两点间的距离 * @param longitudeFrom 第一个点的经度 * @param latitudeFrom 第一个点的纬度 * @param longitudeTo 第二个点的经度 * @param latitudeTo 第二个点的纬度 * @return 返回距离 单位米 */ public static double getDistance(String longitudeFrom, String latitudeFrom, String longitudeTo, String latitudeTo) { GlobalCoordinates source = new GlobalCoordinates(Double.parseDouble(latitudeFrom), Double.parseDouble(longitudeFrom)); GlobalCoordinates target = new GlobalCoordinates(Double.parseDouble(latitudeTo), Double.parseDouble(longitudeTo)); return new GeodeticCalculator().calculateGeodeticCurve(Ellipsoid.Sphere, source, target).getEllipsoidalDistance(); } /** * 根据经纬度,计算两点间的距离 * @param longitudeFrom 第一个点的经度 * @param latitudeFrom 第一个点的纬度 * @param longitudeTo 第二个点的经度 * @param latitudeTo 第二个点的纬度 * @param accurate 保留小数点几位 * @return 返回距离 单位千米 */ public static double getDistance(String longitudeFrom, String latitudeFrom, String longitudeTo, String latitudeTo,int accurate) { double distance = getDistance(longitudeFrom, latitudeFrom, longitudeTo, latitudeTo); if (accurate < 0) { throw new RuntimeException("精确度必须是正整数或零"); } return new BigDecimal(distance).divide(new BigDecimal(1000),accurate, BigDecimal.ROUND_HALF_UP).doubleValue(); } }
-------------------日常记录----------------------