GPS计算距离使用GeoUtils库在印度运作良好,但在美国没有为Android工作

时间:2013-11-13 13:57:05

标签: android geolocation gps geocoding geopositioning

我的代码在印度很好用。此代码计算两个位置之间的近似距离。我使用了下面提到的代码。但如果我在美国运行相同的代码。然后,对于每个位置更新计算不同的距离。 我将源和目的地的纬度和经度传递给了这个功能。该应用程序在印度运行良好。但不适用于美国。在同一个地方它显示了不同的计算。 在此先感谢。任何帮助将不胜感激。

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;
    }  

2 个答案:

答案 0 :(得分:0)

公式是更大的圆公式 众所周知,它对于小距离不适用 原因是这部分:

Math.cos(deltaRad).  

这是一个非常小的值的余弦,它在数字上“病态”:它们在计算机上不能很好地工作。 (现在双精度,效果不太明显) 因此,对于小距离而言,胡子配方更适合。

如果您仍然遇到haversine distance公式的问题,那么显然您的输入数据就是问题所在。 (例如,如果没有适当的预过滤从GPS读取)

尽管使用更大的圆形变体可以提供正确的结果,但您的实施机会很高。您所声称的“正确距离”错误的可能性很高。

答案 1 :(得分:-1)

我使用的是一个非常相似的公式,从来没有任何抱怨。 我公式中的主要区别是deltaLonRad,我计算如下:

double deltaLonRad = Math.toRadians(lon2) - Math.toRadians(lon1);