计算方式
使用开源项目geodesy发行的jar包进行距离计算,十分便捷;
笔者将计算结果与某地图上两点测距结果进行比较,误差很小,所以计算结果也很准确。
开源项目:https://github.com/mgavaghan/geodesy
发行maven pom依赖:
1 2 3 4 5
| <dependency> <groupId>org.gavaghan</groupId> <artifactId>geodesy</artifactId> <version>1.1.3</version> </dependency>
|
代码
加载maven依赖后,新建以下Utils方法简单封装:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| 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 GpsDistanceUtils {
public static double getDistance(Double lonA, Double latA, Double lonB, Double latB,int newScale) { GlobalCoordinates source = new GlobalCoordinates(latA, lonA); GlobalCoordinates target = new GlobalCoordinates(latB, lonB); GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(Ellipsoid.Sphere, source, target); double distance = geoCurve.getEllipsoidalDistance(); BigDecimal distanceBig = new BigDecimal(distance).setScale(newScale, RoundingMode.UP); return distanceBig.doubleValue(); }
}
|
使用Utils方法计算距离:
1 2 3 4 5 6 7 8 9 10 11 12 13
| @Test public void test() {
double distance = GpsDistanceUtils.getDistance(121.495787, 31.244966, 121.506379, 31.245414,2); System.out.println("目标直线距离(m):" + distance);
}
|
输出:
结语
此开源项目工具包使用十分便捷且结果可靠;
读者如有更好的方法,欢迎分享。