Estoy trabajando en un proyecto en el que participa, que reúne varios temas dando vueltas difícil encontrar partes de una imagen. La salida de los usuarios es bastante impresionante.
Genial, derecho?
Sin embargo, lo que quiero es obtener el área de la imagen que tiene 1, 2, 3, 4, etc. los usuarios de la selección. Y estoy usando R para el análisis con el sp, raster, y maptools paquetes (con un poco de rgeos tiro en cuando es necesario). Esencialmente, mi flujo de trabajo es 1) crear un único polígono de cada entrada del usuario (de hecho tengo la pista de cada selección individual por usuario, pero parecía más fácil de combinar en un único SpatialPolygon por usuario) 2) combinación de todos ellos juntos en un solo Objeto SpatialPolygonsDataFrame 3) Rasterizar el objeto mediante la función contar 4) Evaluar el área de la trama con n número de usuarios de seleccionarlo
Aquí está la salida de SpatialPolygonsDataFrame a jugar con
Esto funciona muy bien, pero es slooow debido a la rasterización. Siento que debería ser capaz de hacer algo con el SpatialPolygons objeto. Y he probado un par de cosas con la unión, gIntersects, gUnion, y se cruzan. Sin embargo, me siguen saliendo errores como los siguientes
Error in RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, drop_lower_td, "rgeos_difference") :
TopologyException: Input geom 1 is invalid: Self-intersection at or near point
Justo lo suficiente. A menudo un determinado usuarios SpatialPolygons no son válidos cuando me probarlos mediante gIsValid. Mirando, por ejemplo, sólo los dos primeros, esto se vuelve obvio que hay muchos superposición de puntos.
Usted puede ver los puntos de intersección de una manera bastante clara. Además, en poly2 (el azul) no parece ser un poco de auto-intersección, causando gIsValid para devolver false.
También he intentado unionSpatialPolygons (con avoidRGEOS=T), lo que crea un objeto único
unionSpatialPolygons(polysData[1:2,],
IDs=names(polysData[1:2,]@polygons))
Pero las fronteras todavía se superponen como en la imagen de arriba, en lugar de ser una suave polígono exterior de la frontera - es decir, los polígonos no son disueltos juntos. A continuación, el uso de nuevas funciones en este nuevo SpatialPolygons objeto, tengo el mismo problemas.
Así que, ¿hay una manera de utilizar los polígonos en lugar de ir a los rásteres? Seguro que haría mi vida más rápido, lo cual sería excelente. Me siento como este debe ser un problema común con una rueda inventado que todavía tengo que encontrar. Los pensamientos?