【发布时间】: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();
}
【问题讨论】:
-
如果地球是一个完美的球体,您的三角法方法将非常有效。然而,它实际上是一个椭球体,所以从地表到地核的半径是可变的,这取决于你在地球上的位置。要获得准确的距离测量,您需要获得一个可以解决此问题的坐标系库。假设一个球体对于你所做的任何事情来说可能足够接近,但如果你需要它非常准确,你需要找到一个好的库。
标签: java gps coordinates distance geo