2013-10-01 20 views
6

Ho un SpatialLinesDataFrame con strade e ho una lista di coordinate GPS. Quello che devo fare è estrarre i 10 nomi delle strade più vicine per ogni singola coordinata GPS.SpatialLinesDataFrame: come calcolare il valore min. distanza tra un punto e una linea

Esiste una funzione/pacchetto in R che calcoli la distanza tra una linea e un punto per SpatialLinesDataFrame? Non riesco a vedere nulla che possa aiutare in "sp".

C'è una domanda correlata: Calculating the distance between polygon and point in R, ma voglio trovare la distanza tra un oggetto linea e un punto, non poligono/punto, punto/punto.

+0

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

+0

La risposta collegata è utile, ma mostra solo come calcolare la distanza tra un punto e un poligono. –

risposta

12

È possibile utilizzare rgeos::gDistance() con byid=TRUE per ottenere una matrice di distanze da ciascun punto a ciascuna linea. Da lì, è relativamente facile per estrarre gli ID dei 10 righe più vicino ad ogni punto:

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 Cool. Sono contento che ha funzionato, e sempre felice di indirizzare la gente verso ** rgeos **. –

Problemi correlati