r语言 - 为什么distHaversine为某些坐标对返回NaN?



我正在尝试计算坐标列表中所有可能的坐标对之间的距离。但是,我令人惊讶的是,对于某些坐标对,您绝对应该能够计算出它们之间的距离。

我的坐标是十进制经度和纬度。我正在使用 R 中大地地理分区包中的 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.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

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

最新更新