【发布时间】:2012-12-11 04:02:03
【问题描述】:
我有一个纬度和经度值列表,我正在尝试找出它们之间的距离。使用标准的大圆方法,我需要找到:
acos(sin(lat1)*sin(lat2) + cos(lat1)*cos(lat2) * cos(long2-long1))
然后将其乘以地球的半径,以我使用的单位表示。只要我们取 acos 的值在 [-1,1] 范围内,这就是有效的。如果它们稍微超出此范围,它将返回 NaN,即使差异是由于四舍五入造成的。
我遇到的问题是,有时,当两个纬度/经度值相同时,这会给我一个 NaN 错误。并非总是如此,即使对于同一对数字,但总是列表中的相同数字。例如,我让一个人停在沙漠的路上:
Time |lat |long
1:00PM|35.08646|-117.5023
1:01PM|35.08646|-117.5023
1:02PM|35.08646|-117.5023
1:03PM|35.08646|-117.5023
1:04PM|35.08646|-117.5023
当我计算连续点之间的距离时,例如,第三个值将始终为NaN,即使其他值不是。这似乎是 R 舍入的一个奇怪错误。
【问题讨论】:
-
该函数适用于向量;例如,我会使用 dist(lat(1:5), long(1:5),lat(2:6), long(2:6)) 作为函数 dist(lat1, long1, lat2,长2)。
-
@EricPostpischil 语言不同,没有提供适用于 R 的解决方案。
标签: r floating-point precision r-faq