为什么distHaversine会为某些坐标对返回NaN?

时间:2017-08-25 21:27:58

标签: r geospatial distance

我正在尝试计算坐标列表中所有可能坐标对之间的距离。但是,我很惊讶地获得了一些坐标的NaN,你绝对应该能够计算它们之间的距离。

我的坐标是十进制经度和纬度。我正在使用R.中的geodist包中的distHaversine函数。

以下是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而不是以不同的方式计算矩阵(我知道该怎么做)。

感谢您的帮助!

1 个答案:

答案 0 :(得分: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

pointDistance包中的raster函数(以及与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