如何计算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
http://www.androidsnippets.com/distance-between-two-gps-coordinates-in-meter显示双d2r =(180 / Math.PI);
可以使用Esri Geometry库计算距离: geodesicDistanceOnWGS84 。
我认为JTS还有一种计算距离的方法。