8

我有一个带有街道的 SpatialLinesDataFrame,我有一个 GPS 坐标列表。我需要做的是为每个单独的 GPS 坐标获取 10 个最近的街道名称。

R 中是否有一个函数/包可以计算 SpatialLinesDataFrame 的线和点之间的距离?我看不到任何对“sp”有帮助的东西。

有一个相关的问题:计算 R 中多边形和点之间的距离,但我想找到线对象和点之间的距离,而不是多边形/点,点/点。

4

1 回答 1

14

您可以使用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" 
于 2013-10-02T01:11:42.560 回答