R中的最短距离

Shortest distance in R

我想知道如何为下面的代码计算两个属性(点)之间的最短距离。有两个shapefile文件,一个是points shapefile,另一个是roads shapefile。

为了测试,可以从以下网站下载两个 shapefile:https://github.com/JovaniSouza/JovaniSouza5/blob/master/Example.zip

library(sf)

roads <- st_read('Roads/Roads.shp')
pts <- st_read('Points/Points.shp') %>% 
  st_transform(crs=st_crs(roads))


plot(st_geometry(roads))
plot(st_geometry(pts), add = T, col = 'red', pch = 20)

示例

您可以只使用 st_distance 来获取距离矩阵并找到最小值。我写了一个可以处理所有这些的函数和 return 一个新的 sf data.frame。 data.frame 将包含称为 nearestdistance 的属性,它们分别是最近点的索引和到该点的距离。请注意,距离以反映您的投影的米为单位。您的数据有重复点,因此有些点没有显示距离。如果您不想要这些点,则必须删除重复项。

getNearest <- function(shp){
  dist <- as.data.frame(st_distance(shp))
  for (i in 1:ncol(dist)){
    rows <- seq(1:ncol(dist))
    rows <- rows[i != rows]
    shp[i, 'nearest'] <- which.min(dist[rows, i])
    shp[i, 'distance'] <- dist[which.min(dist[rows, i]), i]
  }
  return(shp)
}

pts2 <- getNearest(pts)

据我了解,您正在尝试测量沿道路到每个点及其最近点的距离。请在此处查看类似的工作流程: https://community.rstudio.com/t/distance-between-points-along-network-path/49596/2