我有一个带有街道的 SpatialLinesDataFrame,我有一个 GPS 坐标列表。我需要做的是为每个单独的 GPS 坐标获取 10 个最近的街道名称。
R 中是否有一个函数/包可以计算 SpatialLinesDataFrame 的线和点之间的距离?我看不到任何对“sp”有帮助的东西。
有一个相关的问题:计算 R 中多边形和点之间的距离,但我想找到线对象和点之间的距离,而不是多边形/点,点/点。
我有一个带有街道的 SpatialLinesDataFrame,我有一个 GPS 坐标列表。我需要做的是为每个单独的 GPS 坐标获取 10 个最近的街道名称。
R 中是否有一个函数/包可以计算 SpatialLinesDataFrame 的线和点之间的距离?我看不到任何对“sp”有帮助的东西。
有一个相关的问题:计算 R 中多边形和点之间的距离,但我想找到线对象和点之间的距离,而不是多边形/点,点/点。
您可以使用rgeos::gDistance()
withbyid=TRUE
来获取从每个点到每条线的距离矩阵。从那里,提取离每个点最近的 10 行的 id 相对容易:
library(sp)
library(rgeos)
## Create a SpatialPoints and a SpatialLines object
example("SpatialPoints-class", ask=FALSE, echo=FALSE)
example("SpatialLines-class", ask=FALSE, echo=FALSE)
## Compute the matrix of distances between them.
(m <- gDistance(S, Sl, byid=TRUE))
# 1 2 3 4 5
# a 0.000000 0.0 2.757716 1.414214 2.757716
# b 1.788854 0.5 3.640055 1.000000 3.605551
## And then use it to extract the ids of the 10 (or in this case 1) lines
## closest to each point.
## apply(m, 2, function(X) rownames(m)[order(X)][1:10]) ## Finds 10 closest
apply(m, 2, function(X) rownames(m)[order(X)][1]) ## Finds single closest
# 1 2 3 4 5
# "a" "a" "a" "b" "a"