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

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

Is there a function / package in R that will calculate the distance between a line and a point for a SpatialLinesDataFrame? I do not see anything that could help in the "sp".

There is a related question: Calculating the distance between a polygon and a point in R , but I want to find the distance between the line object and the point, not the polygon / point, point / point.

+6
source share
1 answer

You can use rgeos::gDistance() with byid=TRUE to get a matrix of distances from each point to each line. From there, it is relatively easy to extract the ides from the 10 lines closest 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" 
+12
source

Source: https://habr.com/ru/post/955059/


All Articles