1

我有一个使用纬度和经度的距离公式:

distance = EARTH_MILES_RADIUS
    * Math.acos(Math.sin(lat1 / RADIAN_CONV)
    * Math.sin(lat2 / RADIAN_CONV)
    + Math.cos(lat1 / RADIAN_CONV)
    * Math.cos(lat2 / RADIAN_CONV)
    * Math.cos((lng2 - lng1) / RADIAN_CONV));

lat1,lng1,lat2,lng2 是双原语。它们以双重原语的形式出现在我面前,对此我无能为力。

问题是,当我有一对相同的经度或纬度时,公式有时会返回 NaN。我相信这是因为我取的数字的反余弦值略大于 1,而实际上它应该正好是 1。如果这些点也是对映的,我可能会遇到问题,它们可能略小于 - 1.

我怎样才能最好地解决这个问题?

4

3 回答 3

1

检查代码中两个非常接近(理想情况下相等)的值。例如:

boolean doubleApproxEqual(double a, double b) {
    double PRECISION = 0.000001;
    if (Math.abs(a-b) < PRECISION) //not sure what the name of the function is
                                   //cannot be bothered to check
        return true;
    return false;
}

如果你得到一个 True,做 cos(1.0) 或其他

于 2011-04-20T03:16:55.247 回答
1

如果你确实像我认为的那样计算大圆距离,你应该使用文森蒂公式而不是你所拥有的。

http://en.wikipedia.org/wiki/Great-circle_distance

于 2011-04-20T03:21:24.670 回答
0

简单地检查是否相等就足以解决我的问题:

if (lat1 == lat2 && lng1 == lng2) ...
于 2011-08-11T00:22:21.340 回答