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

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

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

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

也就是说,改变

 double d2r = (180 / Math.PI); 

 double d2r = Math.PI / 180; 

看看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 km

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

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

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


 private double gps2m(float lat_a,float lng_a,float lat_b,float lng_b){
     float pk =(float)(180 / 3.14169);

     float a1 = lat_a / pk;
     float a2 = lng_a / pk;
     float b1 = lat_b / pk;
     float b2 = lng_b / pk;

     float t1 = FloatMath.cos(a1)* FloatMath.cos(a2)* FloatMath.cos(b1)* FloatMath.cos(b2);
     float t2 = FloatMath.cos(a1)* FloatMath.sin(a2)* FloatMath.cos(b1)* FloatMath.sin(b2);
     float t3 = FloatMath.sin(a1)* FloatMath.sin(b1);
     double tt = Math.acos(t1 + t2 + t3);

    返回6366000 * tt;
 }
 // 

以米为单位的两个GPS坐标之间的距离 。

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

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

我认为JTS还有一种计算距离的方法。