Tengo un gran Shapefile con 200,000 polígonos, pero el archivo es demasiado grande para la aplicación que lo usará. Me gustaría generalizar estos polígonos y crear un archivo mucho más pequeño.
He intentado hacer esto en QGIS usando la herramienta "Simplificar geometrías". He intentado esto en una porción muy pequeña de mi Shapefile y estoy contento con los resultados, pero tengo un pequeño problema que no sé cómo resolver. He adjuntado la imagen para mostrar el problema.
Los límites BLANCOS son límites antes de la simplificación. Los límites rojos son después de la simplificación. Las áreas problemáticas están rodeadas de color naranja. Como puede ver, los "límites simplificados" contienen algunas áreas que después de la simplificación no pertenecen a ninguno de los polígonos anteriores.
¿Cómo simplifico este Shapefile y mantengo límites comunes entre polígonos como una sola línea y elimino las áreas que se han creado después de la simplificación?
INFORMACIÓN ADICIONAL:
Después de seguir las instrucciones sugeridas
- Convertir polígonos en líneas
- Simplifica líneas
- Convertir líneas de nuevo a polígonos
Obtengo los siguientes resultados. Es un poco mejor que antes, pero aún obtengo áreas fuera de los polígonos originales (ver áreas blancas en la imagen a continuación).
@ Andrew sugirió que asocie cada línea con un polígono adyacente, pero no sé cómo hacerlo en QGIS.
Todavía estoy tratando de completar el proceso de simplificación de polígonos. He seguido las instrucciones sugeridas en esta publicación y cuando pensé que obtuve resultados aceptables apareció un problema más. A continuación se muestra el resumen de lo que hice con imágenes de resultados. Todos los pasos se han realizado utilizando la caja de herramientas PROCESAMIENTO en QGIS.
- Primero, convertí polígonos en líneas
- En segundo lugar, limpié las líneas usando la opción v.clean with break. Esto resultó en CAPA DE VECTOR LIMPIO y CAPA DE ERROR. La capa de error (puntos verdes en la imagen proporcionada) tiene un punto verde en cada intersección de línea. No sé lo que ésto significa.
- En tercer lugar, simplifiqué las líneas con la herramienta "SIMPLIFICAR GEOMETRÍA" (el resultado son líneas rojas en las imágenes). Comparando líneas rojas simplificadas y líneas naranjas originales, estoy contento con el resultado.
- Cuarto, quería convertir las líneas nuevamente en polígonos usando la herramienta "Poligonalizar" en "PROCESAMIENTO" y obtuve resultados que no esperaba (segunda imagen con un polígono sombreado de color oliva oscuro). Parece que el polígono conectó intersecciones de capa de error y creó un conjunto completamente diferente de polígonos que ignora las líneas simplificadas.
¿Alguien podría explicar qué salió mal aquí?
¿Por qué las líneas rojas simplificadas no se convirtieron correctamente en polígonos simplificados?
Como puede ver, no soy un experto en SIG, pero necesito hacerlo yo mismo. No sé si estoy demasiado lejos de la solución, pero es frustrante que pueda ver líneas simplificadas que encontré aceptables para lo que me gustaría hacer, pero no puedo convertirlas en polígonos.
Aquí hay dos imágenes con resultados de los últimos dos pasos del proceso:
v.generalize
es otra gran opción. Espero que esto ayude.Respuestas:
Obtuve un resultado bastante bueno usando GRASS v.generalize de Processing Toolbox usando los valores predeterminados:
Algunas líneas permanecen intactas.
fuente
Me metí en ese problema con Qgis2.16, pero no pude hacer que GRASS diera un resultado topológicamente correcto como @AndreJ.
Una buena solución es cambiar la tolerancia de ajuste v.in.ogr en los parámetros avanzados de la herramienta v.generalize.simplify . El valor predeterminado es -1, lo que evita el ajuste en GRASS.
Al poner un valor pequeño aquí (como 1e-05 m), se habilita el ajuste y GRASS reconoce los bordes compartidos de los polígonos. La simplificación proporciona una capa topológicamente correcta, sin agujeros.
Nota: Al establecer la tolerancia de ajuste a valores más altos, incluso es posible alterar los polígonos para que se puedan eliminar los muy delgados si lo desea. Siga esa operación con v.clean usando rmarea y un umbral lo suficientemente grande como para eliminar las sobras pequeñas, ¡y listo!
fuente
primero convierta su polígono en líneas
use v.clean para limpiar su topología (con la opción "break")
entonces simplificas tus líneas
Finalmente vuelves tus líneas a polígonos. (Usando polygonize)
EDITAR: para obtener los atributos de sus polígonos, la mejor manera, si no tiene polígonos multiparte en el conjunto de datos original , es obtener los centroides de los antiguos y de los polígonos simplificados y unirlos en función de la ubicación más cercana (los centroides deberían no se mueva mucho si solo modifica ligeramente sus límites)
fuente
Puede resolver el problema con un modelo de procesamiento (ex SEXTANTE) como este:
Versión de script:
Nota: la única limitación es que el campo común tiene que ser
ID
enJoin attributes table
, porque es el único campo de la producción deLines to polygons
. Es por eso que el campo común no es una entrada variable del modelo. Por lo tanto, unID
campo debe estar disponible en la capa de polígono de entrada.fuente