我有以下计算距离并以英里为单位返回的方法:
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();
}
(最好是在java代码中)
答案 0 :(得分:4)
您只需将最后一行更改为:
return new Double((Math.toDegrees(Math.acos(theDistance))) *
69.09*1.6093).intValue();
1英里= 1.6093公里
答案 1 :(得分:2)
由于该公式以英里为单位返回结果,因此只需将里程转换为公里
kilometers = miles * 1.609344
答案 2 :(得分:0)
我相信你正在寻找半身定制的公式:http://www.movable-type.co.uk/scripts/latlong.html
公式乘以地球半径,确定结果单位。
答案 3 :(得分:0)
您可以将代码更改为
return new Double((Math.toDegrees(Math.acos(theDistance))) * 111.12).intValue();
相当于已经表达的转化次数。
在计算纬度和经度的距离时,有另外的更好的公式。 Lambert's formula似乎非常出色,在数千公里的距离上精确到10米,并使用了您已经提供的一些代码。
答案 4 :(得分:0)
您计算的距离基于地球作为球体,这可能有助于比较近似 - 短距离。为了在更长距离(例如航空旅行)上获得更好的结果,我建议使用地理空间实用程序库(例如开源GeoTools)来考虑地球形状的椭球性质。
许多专业级Geo解决方案使用WGS-84作为模型,GeoTools支持该模型。
请记住 - 如果您的假设是错误的,那么获得100个小数位数的“准确度”并不重要! ;)