2017-08-25 51 views
1

我想要计算坐标列表中所有可能的坐标对之间的距离。然而,我很惊讶地得到一些坐标对的NaN,你应该可以计算出它们之间的距离。distHaversine为什么会为某些坐标对返回NaN?

我的坐标是十进制的经度和纬度。我在R.

这里使用distHaversine函数从geodist包是一对坐标为哪些distHaversine返回NaN的样品。我尝试了许多其他坐标对的代码,并且它能正常工作。

# Create long, lat matrix with two sets of coordinates 
coord_list <- matrix(c(2.5, -177.5, 5.5, -5.5), ncol=2) 
coord_list 

# Create a matrix with the distance between each pair of points (zero on the diagonals) 
dist <- apply(coord_list, 1, 
       FUN=function(X) { 
       distHaversine(X, coord_list) 
       }) 
dist 
# [,1] [,2] 
#[1,] 0 NaN 
#[2,] NaN 0 

在情况下,它相关的,我需要这些距离为用于空间加权回归的反距离加权矩阵。然而,我宁愿弄清楚为什么distHaversine偶尔会返回NaN,而不是以不同的方式计算矩阵(我知道该怎么做)。

感谢您的帮助!

+0

最小例如:'distHaversine(C(-177.5,-5.5),C(2.5,5.5))'这些点是对映体(即直接相对地球上的),但这样是'distHaversine(C(-177.5, - 5),c(2.5,5))'并且工作正常。报告软件缺陷? – Spacedman

+0

是啊,看起来像一个浮点精度错误。我通过电子邮件发送了维护人员... – Spacedman

+0

好吧,很高兴知道这不仅仅是我!谢谢! – bsauce

回答

0

感谢您的报告。这被固定在地球圈1.5-7。

我会用非常精确的geosphere::distGeo功能的geopshere::distHaversine代替(这是更对历史的兴趣)

要到达所有点所有点的距离,你可以使用distm功能

coords <- matrix(c(2.5, -177.5, 5.5, -5.5, 0, 0), ncol=2) 

library(geosphere) 
distm(coords) 

#   [,1]  [,2]  [,3] 
#[1,]  0.0 19395754 693590.1 
#[2,] 19395754.2  0 19703549.9 
#[3,] 693590.1 19703550  0.0 

或在rasterpointDistance函数(和相同的算法distGeo):

library(raster) 
pointDistance(coords, lonlat=TRUE) 

#   [,1]  [,2] [,3] 
#[1,]  0.0  NA NA 
#[2,] 19395754.2  0 NA 
#[3,] 693590.1 19703550 0 
相关问题