如何在Java中计算两个GPS点之间的距离?

2022-09-02 00:57:36

我用了这个代码,但它不起作用:

需要两个GPS坐标之间的距离,如41.1212,11.2323,以公里为单位(Java)

double d2r = (180 / Math.PI);
double distance = 0;

try{
    double dlong = (endpoint.getLon() - startpoint.getLon()) * d2r;
    double dlat = (endpoint.getLat() - startpoint.getLat()) * d2r;
    double a =
        Math.pow(Math.sin(dlat / 2.0), 2)
            + Math.cos(startpoint.getLat() * d2r)
            * Math.cos(endpoint.getLat() * d2r)
            * Math.pow(Math.sin(dlong / 2.0), 2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    double d = 6367 * c;

    return d;

} catch(Exception e){
    e.printStackTrace();
}

答案 1

经度和纬度以度 (0-360) 为单位。如果要将度数转换为弧度(0-2π),则需要除以360并乘以2π(或等效地乘以π/180)。但是,在代码中,您将乘以 180/π

也就是说,改变

double d2r = (180 / Math.PI);

double d2r = Math.PI / 180;

答案 2

看看地理计算器

Coordinate lat = new GPSCoordinate(41, .1212);
Coordinate lng = new GPSCoordinate(11, .2323);
Point point = new Point(lat, lng);

lat = new DegreeCoordinate(51.4613418);
lng = new DegreeCoordinate(-0.3035466);
Point point2 = new Point(lat, lng);
System.out.println("Distance is " + EarthCalc.getDistance(point2, point) / 1000 + " km");

距离 1448.7325760822912 km

我为我的项目写了那个库。


推荐