我如何计算Java中两个gps点之间的距离?

Posted

技术标签:

【中文标题】我如何计算Java中两个gps点之间的距离?【英文标题】:How can i calculate the distance between two gps points in Java? 【发布时间】:2011-04-12 13:06:05 【问题描述】:

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

需要两个 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();

【问题讨论】:

如果地球是一个完美的球体,您的三角法方法将非常有效。然而,它实际上是一个椭球体,所以从地表到地核的半径是可变的,这取决于你在地球上的位置。要获得准确的距离测量,您需要获得一个可以解决此问题的坐标系库。假设一个球体对于你所做的任何事情来说可能足够接近,但如果你需要它非常准确,你需要找到一个好的库。 复制自:[***.com/questions/3694380/…[1]:***.com/questions/3694380/… 【参考方案1】:

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

即改变

double d2r = (180 / Math.PI);

进入

double d2r = Math.PI / 180;

【讨论】:

【参考方案2】:

看看Geocalc

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 公里

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

【讨论】:

【参考方案3】:

来自http://www.androidsnippets.com/distance-between-two-gps-coordinates-in-meter的解决方案。

仅当这些点足够接近以至于您可以忽略地球不是规则形状时才有效。

私人双 gps2m(浮动 lat_a,浮动 lng_a,浮动 lat_b,浮动 lng_b) 浮动PK =(浮动)(180/3.14169); 浮动 a1 = lat_a / pk; 浮动 a2 = lng_a / pk; 浮动 b1 = lat_b / pk; 浮动 b2 = lng_b / pk; 浮点数 t1 = FloatMath.cos(a1)*FloatMath.cos(a2)*FloatMath.cos(b1)*FloatMath.cos(b2); 浮点数 t2 = FloatMath.cos(a1)*FloatMath.sin(a2)*FloatMath.cos(b1)*FloatMath.sin(b2); 浮点数 t3 = FloatMath.sin(a1)*FloatMath.sin(b1); 双 tt = Math.acos(t1 + t2 + t3); 返回 6366000*tt; //

见Distance between two GPS coordinates in meter。

【讨论】:

【参考方案4】:

两点之间的距离(以及许多其他有用的东西)可以在以下位置找到:http://www.movable-type.co.uk/scripts/latlong.html

【讨论】:

【参考方案5】:

http://www.androidsnippets.com/distance-between-two-gps-coordinates-in-meter 表明 double d2r = (180 / Math.PI);

【讨论】:

【参考方案6】:

可以使用 Esri Geometry 库计算距离:geodesicDistanceOnWGS84。

我假设 JTS 也有计算距离的方法。

【讨论】:

以上是关于我如何计算Java中两个gps点之间的距离?的主要内容,如果未能解决你的问题,请参考以下文章

python 计算两个GPS点之间的距离。

计算gps点之间的步行距离

C、计算两个GPS位置之间的距离?

计算两个 GPS 坐标之间的距离

你如何计算GPS JAVA中两点之间的距离? [复制]

中海达GPS怎么测量2个点之间的距离