19 votos

Relleno automático de agujeros en polígonos con QGIS

¿Existe alguna opción en QGIS para rellenar automáticamente los agujeros de los polígonos estableciendo parámetros como, por ejemplo, el área máxima o la distancia entre los límites?

Quiero borrar/rellenar agujeros muy "finos"/pequeños.

20voto

Mue Puntos 2469

Uso de QGIS 2.10.1-Pisa con Tratamiento versión 2.10.2, hay un par de herramientas disponibles en la sección Caja de herramientas de procesamiento :

  • Rellenar agujeros en la que puede especificar el superficie máxima .
  • Borrar agujeros que se aplicaría a toda la capa de entrada.

Para QGIS 3.x El Borrar agujeros combina ambas funcionalidades. Opcionalmente, puede especificar un área máxima de agujero a borrar. Si se deja como 0,0, la herramienta borrará todos los agujeros de cualquier tamaño.

18voto

Ana Puntos 41

Me encontré con el mismo problema que el tuyo con este shapefile, teniendo muchos huecos entre polígonos.

Original file with gaps

Para resolver el problema, podría utilizar una ligera modificación del método de tshiffle:

  1. En primer lugar, realice la diferencia entre su archivo y un polígono que cubra toda su extensión.

Extent_polygon

Difference_tool

Esta acción creará un nuevo shapefile consistente en un solo polígono, por lo que deberá explotarlo en partes individuales. Para ello, puede utilizar Vector/Geometry Tools/Multipart to singleparts tool.

Difference_result

Multi_to_single

A continuación, elimine la entidad externa. Ahora tienes, en un nuevo shapefile, varios polígonos que cubren los huecos de tu cobertura original.

gaps_covered

  1. Realiza una Unión entre los datos iniciales y las partes individuales. Utilice la herramienta SAGA, ya que la opción predeterminada de QGIS crea duplicados en la base de datos.

Union

  1. Todos los huecos aparecerán ahora como registros vacíos en la base de datos (para el ejemplo 72 filas). Ordene su tabla utilizando un campo de área y tome el valor del polígono más pequeño del fichero original. En este caso, 0,13645 hectáreas.

database

  1. Por último, utilice la herramienta "Eliminar polígonos en astilla", con la configuración que se muestra en la imagen.

enter image description here

  1. El resultado final no presenta lagunas.

enter image description here

7voto

Tooony Puntos 1212

Puede que haya soluciones más elegantes, pero a mí siempre me ha funcionado.

1) Crear polígonos de "relleno de agujeros". Para ello, dibuje un polígono gigante más grande que el original y utilice la herramienta "diferencia". Si dibujas un polígono mucho más grande tendrás todos los polígonos de "relleno" más un único polígono más grande que rodea la forma original. Elimine ese polígono grande, manteniendo los polígonos de "relleno de agujeros".

2) Fusione los polígonos de "relleno de agujeros" con el shapefile original. Si sólo desea rellenar los agujeros que se ajustan a un determinado criterio (es decir, por debajo de X número de kilómetros cuadrados) se puede filtrar para que aquí.

3) Disolver el polígono recién fusionado en un campo común.

6voto

user3118171 Puntos 1

En python / shapely, esto puede rellenar su polígono:

import shapely
from shapely.geometry import Polygon
filled_shape = Polygon(shape_with_holes.exterior)

2voto

Andrea Censi Puntos 1

He visto algunas explicaciones que siguen el mismo camino que las de gtapko y tshiffle, pero ninguna me funcionó porque las geometrías no válidas hacían que la herramienta de diferencias no funcionara. Por lo tanto, se me ocurrió una solución de mi propia que no es 100% automatizado, pero es manejable. Probablemente alguien ya lo haya resuelto, pero me arriesgaré:

1) Crear un ID en la capa original dañada

Crear un atributo ID es sencillo, pero también lo es mi solución, así que voy a repasarla.

En primer lugar, debe abrir la tabla de atributos y, a continuación, ir a la sección Calculadora de campo que es un botón parecido a un ábaco. Allí se le dará la opción de crear un nuevo campo o actualizar uno ya existente. En la imagen de arriba estoy creando uno nuevo llamado "ID". La fórmula está justo al final de la imagen. (Perdón por tener mi QGIS configurado en otro idioma. Dado que el diseño y las fórmulas son exactamente las mismas en todas las versiones lingüísticas, no creo que nos estorbe aquí).

2) Convertir los polígonos en líneas

Este paso se encuentra en Vectores > Geometría del menú. Su forma convertida debe tener este aspecto:

Justo después de convertir los polígonos en línea, tendrás que hacer exactamente lo contrario, es decir...

3) Convertir líneas en polígonos

Las opciones están una al lado de la otra. Una vez más, no hay que tener en cuenta la barrera lingüística.

4) Alégrate La razón por la que hiciste los pasos 2 y 3 es porque ahora estás seguro de que esas líneas serán consideradas como polígonos, lo que significa que ahora tienen su propia línea en la Tabla de Atributos. Si lo compruebas, tendrá este aspecto:

El primero es SIEMPRE todo el polígono (créeme, he borrado un par de cientos de líneas hoy...) y el resto son las líneas sueltas del medio. Puedes activar la edición y prepararte para la acción. Si decides probar esto, dos cosas que debes tener en cuenta son: organizar tu tabla ID-wise De esta forma te aseguras de que no se te escapa nada y utilizas shift para seleccionar grupos de datos, como en cualquier otro programa.

Soy consciente de que este no es el la crème de la crème de resolución de problemas de QGIS, pero si se enfrenta a una situación en la que las herramientas no funcionan debido a la geometría inválida esta línea crear (incluso traté de disolver por el ID, pero no funcionó), entonces esto podría ser una salida.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X