Rgeos elimina los valores asociados cuando se cruzan polígonos


11

Estoy tratando de intersectar dos SpatialPolygonsDataFrames y obtener un SpatialPolygonsDataFrame como resultado. Desafortunadamente, al usar la gIntersectionfunción from rgeos(que funciona de manera impresionante rápidamente para intersecar los polígonos), parece que no puedo recuperar los marcos de datos asociados. Considere el siguiente ejemplo:

> fracPoly <- gIntersection( toSingle, fromSingle )
> class(toSingle)
[1] "SpatialPolygonsDataFrame"
> class(fromSingle)
[1] "SpatialPolygonsDataFrame"
> class(fracPoly)
[1] "SpatialPolygons"

Puedo escribir una función de contenedor que maneja la transferencia de data.frames, pero será un pequeño problema hacer la verificación correcta y antes de hacerlo esperaba que alguien pudiera confirmar que no hay una mejor manera o señalarme hacia otra función (u opción for gIntersection) que me permitiría retener el asociado data.frames.

Actualizar

En una reflexión posterior, esto puede ser un comportamiento muy deliberado por parte de gIntersection. Después de todo, de los dos SPDF, ¿qué marco de datos pasan? Por lo tanto, es posible que tenga que escribir un contenedor que combine los dos.


1
¿Cómo está cargando sus polígonos - readShape * o readOGR? Obtengo un comportamiento extraño con gIntersection dependiendo de la biblioteca que he usado para cargar SPDF, que no he llegado al fondo.
Simbamangu

@Simbamangu Interesante. Estoy usando readShapePoly y luego fusionándome en un marco de datos ...
Ari B. Friedman

gIntersection DEBE dar los data.frames combinados para las áreas superpuestas: si ejecuto Vector | Geoprocesamiento | Intersecar en QGIS, la salida es un conjunto de atributos combinados para la superposición, y QGIS no usa la misma biblioteca GEOS para operaciones espaciales como ¿esta?
Simbamangu

Bueno, si debería, entonces estoy perplejo. Ya reescribí mi código para fusionar los data.frames a mano y volver a insertarlos, por lo que no voy a pasar más tiempo en esto por ahora. Pero la sugerencia de que la lectura de la función en el archivo shape es útil.
Ari B. Friedman

1
Esto claramente no es una respuesta, pero no tengo suficientes puntos para dejar un comentario ... Ari, me preguntaba si compartirías tu porción de código para extraer las variables siguiendo las funciones de superposición de rgeos. Tengo problemas para envolver la cabeza en torno a una buena manera de retener de varios rgeos las operaciones de la identificación de polígonos originales, como gUnion ...
jed.a.long

Respuestas:


2

Para algún proyecto tenía la misma necesidad. Mucho más que mantener el data.frame, tuvimos que establecer un código adicional para administrar el tipo de geometría de salida, y proceder a una limpieza (por ejemplo, colecciones de geometría limpia), para tener un geoproceso de intersección completo. En caso de que aún necesite hacer tal tarea en R, puede probar el paquete RFigisGeo :

#install RFigisGeo
require(devtools) 
install_github("RFigisGeo", "openfigis")
require(RFigisGeo)

#compute intersection
result <- getIntersection(features1, features2)

Parece que tanto sus respuestas como las de @ berndv resolverían mi problema. ¡Gracias! Marcar este desde que vino primero.
Ari B. Friedman

10

El comportamiento de gIntersection es no pasar ningún dato intersectado por diseño:

Como no hay coincidencias generales entre los objetos espaciales intersectados, cualquier operación arbitraria en los atributos requiere suposiciones sobre intenciones desconocidas del usuario. Es por eso que no se deben pasar ranuras de datos ...

... El diseño de gIntesection () no es intencional, porque solo el usuario puede saber qué hacer con los atributos de las entidades que tienen sus geometrías cambiadas. Diferentes usuarios pueden hacer diferentes suposiciones, pero no hay una solución general más allá de pasar a través de las ID de las geometrías de intersección, como se hace en el mecanismo row.names ().

Para mi sorpresa, el paquete ráster tiene una función de intersección , que simplemente se cruza y entrega los datos también.

El paquete ráster tiene algunas funciones que extienden rgeos al intentar también manejar datos de atributos. En este caso, vea raster :: intersect Y la lista de funciones aquí:? "Raster-package" (sección XIV)

La información completa que obtuve sobre esto: http://r-sig-geo.2731867.n2.nabble.com/Intended-usage-of-gIntersection-td7587120.html


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.