¿Eliminar espacios pequeños (astillas) entre polígonos? [cerrado]

51

Tengo un conjunto de polígonos que representan distritos administrativos. Los distritos se digitalizaron a mano, y hay pequeños espacios (astillas) entre los polígonos donde los polígonos deben tocarse.

¿Cómo puedo hacer que los polígonos se junten y eliminen los espacios?

QGIS prefiere, pero ArcGIS y la programación general también son opciones.

zoo
fuente

Respuestas:

27

Usar Eliminar (se requiere licencia ArcInfo)

Elimina los polígonos fusionándolos con los polígonos vecinos que tienen el área más grande o el borde compartido más largo. Eliminar se utiliza a menudo para eliminar pequeños polígonos de astillas que son el resultado de operaciones de superposición, como Intersecar o Unión.

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00170000005p000000.htm

ingrese la descripción de la imagen aquí

Usuarios de ArcGIS 10 Note que hay una NUEVA Característica en las Opciones para esta Herramienta.

Ahora es posible preservar el POLYGON o POLYLINE original con la opción> ex_features (Opcional) Una clase o capa de entidad de polilínea o polígono de entrada que define los límites del polígono, o partes de los mismos, que no deben eliminarse.

Mapperz
fuente
3
¿Funciona eso en el caso del zoológico? Parece que no hay fragmentos en el conjunto de datos, solo espacios entre los polígonos.
oscuro
3
He usado esta herramienta con éxito para eliminar espacios entre polígonos. Sin embargo, hay un problema con el uso de esta herramienta. Cuando rompe los polígonos durante el geoprocesamiento, generaliza en exceso los polígonos recién creados. Por lo tanto, las curvas no serán tan suaves, sino que tendrán líneas agudas "irregulares". Ymmv.
amasephy
3
@underdark Buen punto. Sin embargo, uno siempre podría introducir los fragmentos mediante una unión de los datos con un polígono monolítico circundante (como el cuadro delimitador del conjunto de datos). Una pregunta interesante es cómo "Eliminar" elige en qué polígonos fusionar las astillas. Esto podría sesgar los resultados (aunque dudo que el sesgo sea importante en la mayoría de las aplicaciones). En esta situación particular, una solución ideal dividiría los fragmentos o promediaría los errores.
whuber
Una de las opciones de la herramienta es fusionar la astilla con el polígono vecino con el borde más largo (la opción predeterminada) o el área más grande.
kenbuja
44
Si no tiene una licencia ArcInfo, hay un script en arcscripts.esri.com/details.asp?dbid=14672 que automatiza esto a través de Python. Lo usé con éxito hace unos años.
Stephen Lead
20

Para hacer esto a mano en QGIS, vaya a Settings|Project Properties...En la Generalpestaña en la parte inferior, Snapping options...verifique la capa que desea ajustar, establezca el modo to vertexy establezca la tolerancia en un valor menor que la distancia más corta entre dos puntos que tiene. Si no está seguro, establezca las unidades pixelsy la tolerancia en algo así como 5, de modo que si hay algunos detalles complicados, puede acercar y asegurarse de no ajustar el vértice incorrecto.

Luego edite su capa vectorial, seleccione la herramienta de nodo y mueva los puntos errantes a sus contrapartes.

Hacerlo automáticamente es un poco más complicado. AFAIK QGIS no tiene un complemento para automatizarlo, y aunque PostGIS se basa en GEOS que tiene funciones de ajuste, no están expuestos a PostGIS. Puede ser posible escribir una consulta para verificar cada punto de un polígono para vecinos dentro de la distancia de ajuste, pero eso está más allá de mi ingenio para expandirlo.

GRASS tiene v.clean.snap al que puede acceder a través de QGIS, pero existe el paso adicional de crear un conjunto de datos de GRASS.

MerseyViking
fuente
Siempre puede usar la caja de herramientas de procesamiento de QGIS y aplicar v.clean.snap directamente a su shapefile.
SAnderka
v.clean.snap no está disponible. Utilicé v.clean y luego seleccioné la herramienta de ajuste y me dio una capa vacía. La documentación dice que snap es unir líneas al vértice. Quiero unir vértice a otro vértice dentro del umbral.
neogeomat
17

Si está familiarizado con QGIS: en el tronco 1.9 de QGIS (puede instalarse como qgis.dev a través del instalador OSGEO, consulte la página de inicio de qgis) hay una nueva función en el menú vectorial llamada "Eliminar polígonos de astilla", que hace exactamente lo que usted querer. Puede seleccionar los polígonos problemáticos y fusionarlos con polígonos adyacentes en función de un límite común o de un área de propulsión. ¡Pruébalo!

Zarapito
fuente
3
Para actualizar esta respuesta, en QGIS 2.18.1 'Eliminar polígonos de astilla' está disponible en el paquete estable y se encuentra en Vector -> Herramientas de geoprocesamiento.
Valerie Anderson
Esto se aplica a los polígonos dispersos existentes entre los principales, no en el caso de espacios entre polígonos.
stragu
15

Si eres un usuario de QGIS, obtienes todo el poder de GRASS, ya que es un SIG completamente topológico. Dentro de QGIS active el complemento GRASS, cree una ubicación / conjunto de mapas donde importar sus datos.

Abra el conjunto de mapas e importe su capa sucia con v.in.ogr: juegue con los dos parámetros avanzados "umbral de ajuste para límites" y "tamaño mínimo del área a importar".

También puede usar las opciones que proporciona el módulo v.clean.

Giovanni Manghi
fuente
10

ArcGIS tiene reglas de topología que lo ayudarán a identificar y corregir vacíos en sus datos, como a qué se refiere. Para crear Reglas de topología, necesitará una licencia ArcEditor o ArcInfo y almacenar su Clase de entidad en un Conjunto de datos de entidad en una geodatabase personal o de archivo.

Lo más probable es que desee implementar la regla " No debe tener huecos ". Una vez que haya creado la base de reglas con todas las reglas que considere necesarias, deseará validar la topología que identificará todos los errores en sus datos.

Luego, utilizando el Inspector de errores y la herramienta Reparar errores de topología , puede seleccionar individualmente o en masa los errores que desea corregir y cómo desea corregirlos (es decir, crear nuevos polígonos para llenar los vacíos o fusionarlos con polígonos más grandes cercanos) .

RyanDalton
fuente
7

Hay una función "Eliminar polígonos de astilla" en QGIS 2.12 (Lyon) Toolbox. Estoy seguro de que también está en alguna versión anterior.

dnltsk
fuente
2

Bueno, he estado usando una función PostGIS (la uso directamente en mi QGIS) que ejecuta un ajuste recursivo para resolver este problema. Los resultados son bastante buenos, solo exige una buena dosis de valores de tolerancia para obtener los mejores resultados. Si está dispuesto a intentarlo, verifíquelo (en mi caso las geometrías son todas múltiples, de ahí el st_multi en mi ejecución):

CREATE OR REPLACE FUNCTION dsgsnap(tabela text, snap float) RETURNS void AS 
        $BODY$
            DECLARE
            id int;
            BEGIN
                FOR id in execute('select id from '||tabela)
                LOOP
                    EXECUTE     
                'update '||tabela||' as classe set geom = st_multi(res.geom) 
                from 
                    (
                        select st_snap(a.geom, st_collect(b.geom), '||snap||') as geom, a.id as id 
                        from '||tabela||' a, '||tabela||' b 
                        where a.id != b.id and a.id = '||id||' 
                        group by a.id, a.geom
                    ) as res 
                where res.id = classe.id';
                END LOOP;
                RETURN;                        
            END
        $BODY$
        LANGUAGE plpgsql;
lcoandrade
fuente
1

No es una solución perfecta, pero una de estas dos cosas me funciona en la mayoría de los casos:

  1. En QGIS, guarde la capa en formato GEOJSON. Pero antes de guardar, en el cuadro de diálogo "guardar capa como", establezca la precisión de coordenadas en 3 (15 es el valor predeterminado). Esto tendrá el efecto de unir vértices muy cercanos entre sí.

  2. Ve a Mapshaper , sube el archivo y presiona "simplificar". En la esquina superior izquierda, le dirá cuántas intersecciones de línea encuentra y le dará la opción de arreglarlas. Creo que esta solución funciona la mitad del tiempo.

mgalka
fuente
0

No lo he usado, pero ET Geowizards , que trae muchas herramientas de procesamiento de ArcEditor y ArcInfo solo a la licencia de nivel ArcView (también conocido como ArcGIS Standard) tiene un asistente de eliminación que "elimina los polígonos (astillas) no deseados al fusionarlos en los polígonos vecinos o eliminándolos " . El kit de herramientas del asistente le costará $ 250 usd (lista de precios ).

wilkie mate
fuente
0

Me enfrenté al mismo problema, que al explorar las herramientas me resolví con bastante facilidad, aunque no conozco la lógica. ! [En las herramientas, vaya a la caja de herramientas Gestión de datos, vaya a Clase de entidad y ejecute el script Integrar haciendo doble clic] [1]

en la ventana Script seleccione la clase de entidad que tiene un problema y en la tolerancia XY agregue el vale midiendo la distancia con la ayuda de la herramienta de medición en varios puntos y obtenga un valor promedio, ponga ese valor en el entorno de tolerancia y aplique el problema. ahora no cómo sino resuelto con aproximadamente un 90% de precisión. ! [ingrese la descripción de la imagen aquí] [2]

Intenté todos los demás métodos descritos en las respuestas anteriores, pero fue difícil y engorroso obtener las correcciones automáticas para las brechas entre los polígonos adyacentes.

SM Farooqi
fuente
1
Si pega un enlace a las imágenes a las que se refiere, puedo agregarlas.
djq