我的代码在印度很好用。此代码计算两个位置之间的近似距离。我使用了下面提到的代码。但如果我在美国运行相同的代码。然后,对于每个位置更新计算不同的距离。 我将源和目的地的纬度和经度传递给了这个功能。该应用程序在印度运行良好。但不适用于美国。在同一个地方它显示了不同的计算。 在此先感谢。任何帮助将不胜感激。
public static double distanceKm(double lat1, double lon1, double lat2, double lon2) {
double lat1Rad = Math.toRadians(lat1);
double lat2Rad = Math.toRadians(lat2);
double deltaLonRad = Math.toRadians(lon2 - lon1);
return Math.acos(Math.sin(lat1Rad) * Math.sin(lat2Rad) + Math.cos(lat1Rad) * Math.cos(lat2Rad)
* Math.cos(deltaLonRad))
* 6371;
}
答案 0 :(得分:0)
公式是更大的圆公式 众所周知,它对于小距离不适用 原因是这部分:
Math.cos(deltaRad).
这是一个非常小的值的余弦,它在数字上“病态”:它们在计算机上不能很好地工作。 (现在双精度,效果不太明显) 因此,对于小距离而言,胡子配方更适合。
如果您仍然遇到haversine distance公式的问题,那么显然您的输入数据就是问题所在。 (例如,如果没有适当的预过滤从GPS读取)
尽管使用更大的圆形变体可以提供正确的结果,但您的实施机会很高。您所声称的“正确距离”错误的可能性很高。
答案 1 :(得分:-1)
我使用的是一个非常相似的公式,从来没有任何抱怨。 我公式中的主要区别是deltaLonRad,我计算如下:
double deltaLonRad = Math.toRadians(lon2) - Math.toRadians(lon1);