2013-10-01 59 views
6

我有一个SpatialLinesDataFrame与街道,我有一个GPS坐标列表。我需要做的是为每个单独的GPS坐标获得10个最接近的街道名称。SpatialLinesDataFrame:如何计算最小值。一个点和一条线之间的距离

R中是否有函数/包计算SpatialLinesDataFrame的直线和点之间的距离?我无法看到任何对'sp'有帮助的东西。

有一个相关的问题:Calculating the distance between polygon and point in R,但我想找到线对象和点之间的距离,而不是多边形/点,点/点。

+0

搜索:http://stackoverflow.com/questions/15294343/calculating-the-distance-between-polygon-and -point-in-r –

+0

链接的答案很有用,但仅显示如何计算一点与一个多边形之间的距离。 –

回答

12

您可以使用rgeos::gDistance()byid=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" 
+0

@Geza酷。很高兴能够工作,并且总是乐于将人们指向** rgeos **。 –

相关问题