我使用了这段代码,但它不起作用:
需要两个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 :(得分:21)
经度和纬度以度(0-360)给出。如果要将度数转换为弧度(0-2π),则需要除以360并乘以2π(或等效地,乘以π/ 180 )。但是,在您的代码中,乘以180 /π。
即改变
double d2r = (180 / Math.PI);
到
double d2r = Math.PI / 180;
答案 1 :(得分:9)
看一下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
我为我的一个项目写了那个库。
答案 2 :(得分:8)
来自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); return 6366000*tt; } //
答案 3 :(得分:2)
两点(以及许多其他有用的东西)之间的距离可以在http://www.movable-type.co.uk/scripts/latlong.html
找到答案 4 :(得分:1)
http://www.androidsnippets.com/distance-between-two-gps-coordinates-in-meter 显示双d2r =(180 / Math.PI);
答案 5 :(得分:0)
可以使用Esri Geometry库计算距离:geodesicDistanceOnWGS84。
我认为JTS还有一种计算距离的方法。