我正在尝试计算坐标列表中所有可能坐标对之间的距离。但是,我很惊讶地获得了一些坐标的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而不是以不同的方式计算矩阵(我知道该怎么做)。
感谢您的帮助!
答案 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