在 R 中使用 sf 查找最近的特征

mwe*_*ber 8 r r-sf

我想使用 R 中的 sf 包在 R 中的一个简单特征数据框中找到与另一个简单特征数据框中一组点最近的多边形。我一直在“st_join”语句中使用“st_is_within_distance”,但是这将返回给定距离内的所有内容,而不仅仅是最近的特征。

以前,我使用了 'rge​​os' 包中的 'gDistance' 和这样的 'sp' 功能:

m = gDistance(a, b, byid = TRUE)
row = apply(m, 2, function(x) which(x == min(x)))
labels = unlist(b@data[row, ]$NAME)
a$NAME <- labels
Run Code Online (Sandbox Code Playgroud)

我想将这种使用 rgeos 和 sp 为一组点查找最近特征的方法转换为使用 sf。任何意见或建议非常感谢。

mwe*_*ber 10

看起来我的问题的解决方案已经发布 - https://gis.stackexchange.com/questions/243994/how-to-calculate-distance-from-point-to-linestring-in-r-using-sf -library-and-g——这种方法得到了我需要的sf点特征“a”和sf多边形特征“b”:

closest <- list()
for(i in seq_len(nrow(a))){
    closest[[i]] <- b[which.min(
    st_distance(b, a[i,])),]
}
Run Code Online (Sandbox Code Playgroud)

  • 如果要找到同一 sf 特征中所有点之间的最短距离,可以使用 `closest[[i]] &lt;- a[which.min(st_distance(a[-i,], a[i,]) ),]`。`-i` 从距离矩阵计算中删除当前行,因此您不会返回零。 (4认同)