Siguiendo una respuesta acerca de intersectar polígonos con líneas para dividir un polígono en unidades de polígono más pequeñas (en QGIS), quería intentar lo mismo en R. Sin embargo, ¡no puedo encontrar un método que funcione!
over()
no tiene un método para polígonos que se intersectan con líneas; encontré gIntersection()
de rgeos, pero falla:
require(sp)
require(rgeos)
poly <- readShapePoly("polygon.shp")
lines <- readShapeLines("lines.shp")
chopped <- gIntersection(poly, lines)
Dando como resultado:
Error en RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, "rgeos_intersection") :
UnsupportedOperationException: GeometryGraph::add(Geometry *): unknown geometry type: N4geos4geom18GeometryCollectionE
Actualización: Aquí hay un enlace a los archivos en cuestión.
Actualización 2: PaulG señala que funciona y después de actualizar rgeos y R me deshice del error anterior. Gracias PaulG ...
Sin embargo, gIntersection da como resultado un objeto SpatialLines independientemente de si ingreso (poly, lines) o (lines, poly) - mientras que la operación que hice en QGIS (o Arc, en los viejos tiempos) dividirá un polígono con las líneas y dará como resultado un objeto de polígono, no de línea.
Entonces, ¿cómo divido mi polígono con las líneas y obtengo polígonos como resultado?
0 votos
Creo que sería más fácil si pudieras publicar una copia de los archivos de forma en cuestión para que podamos hacer nuestras propias pruebas. Por cierto, ¿está también cargado maptools?
0 votos
He encontrado que
rgeos::gIntersection()
también es bastante quisquilloso sobre la naturaleza del objetoSpatial*
que le pasas. También he resuelto mensajes de error muy crípticos de esta función utilizando el parámetrobyid=TRUE
. No estoy seguro si esto funcionará en tu caso.0 votos
@R.K. - sí, maptools también cargado; se ha actualizado con enlace a archivos.
0 votos
@PaulG: Lo intenté con byid=TRUE también sin éxito.
0 votos
Es probable que se deba al formato de tu objeto
Spatial*
. Intenta crear un objetoSpatialLines
y un objetoSpatialPolygons
desde cero y compara lo que tienes ahí con el objeto que cargas usandoreadShapePoly()
. Podría ser algo como IDs no continuos o atributos de agujeros.0 votos
@Simbamangu Acabo de utilizar tus archivos para ejecutar el script anterior, y encontré que la línea debería cambiarse por:
poly <- readShapePoly("poly.shp")
. No hay archivospolygon.*
en el zip que proporcionaste. Luego funcionó para mí, realizando la intersección como se esperaba. ¿Podría ser el error tan simple como cargar el archivo de forma equivocada? (Estoy usando el paquetergeos
versión 0.2-1 en R 2.14.2)0 votos
@PaulG - no, lo que sucedió es que lo renombré incorrectamente cuando archivé los archivos; en mi caso se llama polygon.shp, así que no es ese el problema. Voy a probar tu sugerencia de intentar construir algunas formas directamente (estas fueron creadas por QGIS) o usar otra fuente, a ver qué obtengo.
0 votos
@PaulG - después de leer cuidadosamente tus comentarios, descubrí que estaba en rgeos 0.1-5 y actualicé todo (R a 2.15 / rgeos a 0.2-5). gIntersection funciona, pero no como me gustaría (ver edición arriba).
0 votos
@Simbamangu no parece que
gIntersection()
realmente hará lo que deseas. Si tus líneas, formando una rejilla, se convirtieran en polígonos, podría funcionar, pero probablemente no es lo que deseas. Te sugiero que preguntes esto ya sea en StackOverflow donde más personas relacionadas con R espacial se encuentran, o en la lista R-sig-geo donde llegarás a los arquitectos dergeos
y herramientas relacionadas.0 votos
Por lo general, intersecto polígonos y líneas con qgis y es muy rápido. Usando R, hoy estoy intentando intersectar un objeto sp con 24500 líneas con otro objeto sp, un gridpolygon. El proceso comenzó a las 19:12 LT y ahora son las 20:08 y todavía no ha terminado. Estos son los comandos de aquí. library(rgdal) library(raster) library(rgeos) library(dismo) ingrid <- intersect(mylines, gridpolygon) No estoy seguro si ayudará, estoy buscando un comando similar en R, pero está tardando demasiado tiempo. Podrías intentar la respuesta de [@johanvdw](gis.stackexchange.com/a/23973/1