【发布时间】:2011-04-20 03:10:57
【问题描述】:
我有一个使用纬度和经度的距离公式:
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.
我怎样才能最好地解决这个问题?
【问题讨论】:
-
如果你想学习更好的Java大圆距离和方位计算实现,这里是UNICAR NETCDF库svn.unidata.ucar.edu/repos/common/java/trunk/src/main/java/ucar/…
Copyright notice from UNICAR on NetCDF: These applications are copyrighted by UCAR and are intended to be freely available with very minimal restriction. -
重新格式化的代码;如果不正确,请恢复。
-
@eee 我在链接代码中看到他们有
if ((lat1 == lat2) && (lon1 == lon2))在这种情况下距离设置为零,所以也许这是最好的解决方案。也许在一定精度内检查相等性是不必要的(puddingfox 的解决方案)。这是我在我的系统上尝试过的解决方案,效果很好,但我不确定它是否适用于所有情况。
标签: java floating-point geospatial trigonometry double-precision