我有一个使用纬度和经度的距离公式:
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。
我怎样才能最好地解决这个问题?
答案 0 :(得分: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;
}
如果你得到一个真的,做cos(1.0)或其他
答案 1 :(得分:1)
如果您确实按照我的想法计算了大圆距离,那么您应该使用Vincenty公式代替您拥有的公式。
答案 2 :(得分:0)
只需检查平等就足以解决我的问题了:
if (lat1 == lat2 && lng1 == lng2) ...