SpatialLinesDataFrame: how to calculate the min. distance between a point and a line

后端 未结 1 1150
独厮守ぢ
独厮守ぢ 2021-02-06 07:22

I have a SpatialLinesDataFrame with streets and I have a list of GPS coordinates. What I need to do is to get out the 10 closest street names for each individual GPS coordinate.

相关标签:
1条回答
  • 2021-02-06 07:45

    You could use rgeos::gDistance() with byid=TRUE to get a matrix of distances from each point to each line. From there, it's relatively easy to extract the ids of the 10 lines nearest to each point:

    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 讨论(0)
提交回复
热议问题