2012-01-11 11 views
6

Estoy averiguando cómo hacer una intersección (unión espacial) entre el punto y los polígonos de shapefiles. Mi idea es obtener los puntos más cercanos y los puntos que coinciden completamente dentro de los polígonos. En ARGIS hay una función para la opción de coincidencia llamada CLOSEST y han definido por: "La característica en las características de unión que está más cerca de una característica de destino coincide". Es posible que dos o más características de unión estén a la misma distancia del objetivo característica. Cuando se produce esta situación, una de las funciones de unión se selecciona al azar como la función de coincidencia ".¿Cómo recoger la información del polígono asociado más cercano a puntos usando R?

Tengo una función para intersectar puntos en polígonos, fue amablemente aportada por Lyndon Estes en la lista r-sig-geo y el código funciona muy bien cuando todos los polígonos han llenado toda el área. El segundo caso se conoce como distancia de unión espacial y en ArcGIS se conoce como INTERSECT cuando match_option está más CERCANO, como lo hace ArcGIS. Por lo tanto, puede modificar la distancia mínima entre el punto y el polígono cuando el área no está ocupada por todos los polígonos.

He aquí los datos y la función de la primera INTERSECT:

library(rgeos) 
library(sp) 
library(maptools) 
library(rgdal) 
library(sp) 
xy.map <- readShapeSpatial("http://www.udec.cl/~jbustosm/points.shp") 
manzana.map <- readShapeSpatial("http://www.udec.cl/~jbustosm/manzanas_from.shp") 

IntersectPtWithPoly <- function(x, y) { 
# Extracts values from a SpatialPolygonDataFrame with SpatialPointsDataFrame, and appends table (similar to 
# ArcGIS intersect) 
# Args: 
# x: SpatialPoints*Frame 
# y: SpatialPolygonsDataFrame 
# Returns: 
# SpatialPointsDataFrame with appended table of polygon attributes 

    # Set up overlay with new column of join IDs in x 
    z <- overlay(y, x) 

    # Bind captured data to points dataframe 
    x2 <- cbind(x, z) 

    # Make it back into a SpatialPointsDataFrame 
    # Account for different coordinate variable names 
    if(("coords.x1" %in% colnames(x2)) & ("coords.x2" %in% colnames(x2))) { 
    coordinates(x2) <- ~coords.x1 + coords.x2 
    } else if(("x" %in% colnames(x2)) & ("x" %in% colnames(x2))) { 
    coordinates(x2) <- ~x + y 
    } 

    # Reassign its projection if it has one 
    if(is.na(CRSargs([email protected])) == "FALSE") { 
    [email protected] <- [email protected] 
    } 
    return(x2) 
} 


test<-IntersectPtWithPoly (xy.map,manzana.map) 

compartir algunas ideas con Lyndon, me dijo esto:


creo que la cosa más fácil de hacer sería pon un buffer alrededor de cada uno de los puntos (puedes especificar 50 m si está en coordenadas proyectadas), convirtiéndolos en polígonos, y luego tu tarea se convierte en una intersección de dos objetos de polígono diferentes.

No he hecho este tipo de operaciones en R, pero sospecho que podría encontrar su respuesta con las siguientes funciones:

library(sp) 
?over 

library(rgeos) 
?gBuffer 
?gIntersects 

Sugiero poner un subconjunto de los datos que ilustran el problema, y entonces tal vez alguien más que tenga una mejor idea en las intersecciones/superposiciones de polígono a polígono podría sugerir el método.

debe hacerse en el radio de los puntos que se encuentran en el shapefile para hacer que entren en el polígono más cercano.

Sé que estas funciones podrían ayudar a lograrlo.

library(sp) 
?over 

library(rgeos) 
?gBuffer 
?gIntersects 

estoy trabajando en él, por lo que cualquier comentario o ayuda, sería muy apreciada!

+2

Publicación cruzada en http://gis.stackexchange.com/questions/18726/spatial-distance-join-between-polygon-and-points-using-r. Esto parece una opción válida, pero significa, Pantaleon, que esperamos que haga un esfuerzo para resumir las respuestas de * ambos * sitios en los hilos que ha comenzado en * cada * sitio. – whuber

+0

Ok, gracias. ¡Soy bastante nuevo en esto! –

Respuesta

1

Tengo que es posible hacer superposiciones de polígono a polígono usando sp y rgeos. Tendrás que cargar rgeos después de cargar sp.

library(rgeos) 
over(polygon1, polygon2) 
+2

¿Tal vez podría agregar un enlace a la pregunta sobre gis.stackexchange? Supongo que ahí tienes esta respuesta ... –

Cuestiones relacionadas