Dado un objeto espacial en R, ¿cómo recorto todos sus elementos para que queden dentro de un cuadro delimitador?
Hay dos cosas que me gustaría hacer (idealmente, sabría cómo hacer ambas cosas, pero cualquiera de las dos es una solución aceptable para mi problema actual: restringir un archivo de forma poligonal a los Estados Unidos continentales).
Coloque cada elemento que no esté completamente dentro del cuadro delimitador. Esto parece
bbox()<-
ser la forma lógica, pero no existe tal método.Realice una operación de recorte verdadera, de modo que los elementos no infinitesimales (por ejemplo, polígonos, líneas) se corten en el límite .
sp::bbox
carece de un método de asignación, por lo que la única forma en que se me ocurre sería usarover
ogContains
/gCrosses
junto con un objeto SpatialPolygons que contiene un cuadro con las nuevas coordenadas del cuadro delimitador. Luego, al recortar un objeto de polígono, tendría que averiguar cuáles están contenidos frente a la cruz, y alterar las coordenadas de esos polígonos para que no excedan el cuadro. O algo asigIntersection
. ¿Pero seguramente hay una manera más simple?
Si bien sé que hay muchos problemas con los cuadros delimitadores , y que una superposición espacial a un polígono que define la región de interés suele ser preferible, en muchas situaciones, los cuadros delimitadores funcionan bien y son más simples.
gIntersection
y se me ocurrióError in RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, "rgeos_intersection") : TopologyException: no outgoing dirEdge found at 3 2.5
No hay tiempo para depurar hoy; escribió una versión descuidada y la arreglará en el futuro.Respuestas:
¡He creado una pequeña función para este mismo propósito y ha sido utilizada por otros con buenas críticas!
Esto debería solucionar tu problema. Más explicación está aquí: http://robinlovelace.net/r/2014/07/29/clipping-with-r.html
El polígono ficticio
b_poly
que se crea no tiene una cadena proj4, lo que da como resultado " Advertencia: spgeom1 y spgeom2 tienen diferentes cadenas proj4 ", pero esto es inofensivo.fuente
sp
,maptools
,rgdal
, yrgeos
cargado. ¿Tengo unError in .class1(object) : could not find function "extent"
problema con la versión R / paquete tal vez?library(raster)
en cuenta la línea en mi tutorial: robinlovelace.net/r/2014/07/29/clipping-with-r.html ¡ cuéntanos cómo te va! Salud.Aquí hay una versión límite descuidada (suficiente para satisfacer mis necesidades a tiempo para la mini-fecha límite mañana :-)):
Si necesita el cuadro delimitador para proyectar, la versión aquí agrega un
interpolate
argumento, de modo que el cuadro proyectado resultante sea curvo.fuente