2011-04-05 143 views
3

我有以下即计算距离,并返回其在英里方法:计算距离坐标公里与Java

public static int calcDistance(float latA, float longA, float latB, float longB) { 

    double theDistance = (Math.sin(Math.toRadians(latA)) * 
      Math.sin(Math.toRadians(latB)) + 
      Math.cos(Math.toRadians(latA)) * 
      Math.cos(Math.toRadians(latB)) * 
      Math.cos(Math.toRadians(longA - longB))); 

    return new Double((Math.toDegrees(Math.acos(theDistance))) * 69.09).intValue(); 
} 

需要什么,以改变该方法返回公里?

还有什么其他方式来计算A和B之间的距离?

(最好在Java代码中)

+3

1英里= 1.609344公里 – Andre 2011-04-05 20:02:34

+1

乘以1.6? – DHall 2011-04-05 20:02:44

回答

4

你只需要在最后一行改为:

return new Double((Math.toDegrees(Math.acos(theDistance))) * 
    69.09*1.6093).intValue(); 

1英里=1.6093公里

+0

1英里= 1.609344公里;-) – 2011-04-06 10:41:24

+0

纬度可能,但经度距离是不同的纬度(赤道1度不同于两极) – SJuan76 2012-12-21 08:58:31

2

由于该公式返回英里的结果,刚刚从英里转换为公里

kilometers = miles * 1.609344 
0

你可以改变你的代码说

return new Double((Math.toDegrees(Math.acos(theDistance))) * 111.12).intValue(); 

相当于已经表达的转化。

在计算经纬度距离时,还有其他更好的公式。 Lambert's formula看起来非常出色,在距离数千公里的距离上提供10米的精度,并使用您已经提供的一些代码。

0

您计算的距离是基于地球作为球体,这可能对比较近似的 - 短距离是很好的。为了在更长的距离上获得更好的效果(例如空中旅行),我会推荐一个地理空间实用程序库(例如开源GeoTools)来考虑事物,如地球形状的椭球本质。

许多专业级地理解决方案都使用WGS-84作为GeoTools支持的模型。

记住 - 如果您的假设错误,获得“精确度”的100位小数不会计算在内! ;)