Rimuovere piccoli spazi (schegge) tra i poligoni? [chiuso]


51

Ho una serie di poligoni che rappresentano i distretti amministrativi. I distretti sono stati digitalizzati a mano e ci sono piccoli spazi (schegge) tra i poligoni in cui i poligoni dovrebbero toccarsi.

Come posso fare in modo che i poligoni si uniscano, rimuovendo gli spazi?

Preferisce QGIS, ma ArcGIS e la programmazione generale sono anche opzioni.

Risposte:


27

Usa Elimina (Licenza ArcInfo richiesta)

Elimina i poligoni fondendoli con i poligoni vicini che hanno l'area più grande o il bordo condiviso più lungo. Elimina è spesso usato per rimuovere piccoli poligoni del nastro che sono il risultato di operazioni di sovrapposizione, come Intersect o Union.

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

inserisci qui la descrizione dell'immagine

ArcGIS 10 Utenti Nota C'è una NUOVA funzionalità nelle Opzioni per questo strumento.

È ora possibile preservare il POLIGONO o POLILINE originale con l'opzione> caratteristiche_ex (opzionale) Una classe di polilinea o un poligono di input o un livello che definisce i confini poligonali, o parti di essi, che non devono essere eliminati.


3
Funziona nel caso dello zoo? Sembra che non ci siano scaglie nel set di dati, ma solo spazi tra i poligoni.
underdark

3
Ho usato questo strumento con successo per rimuovere gli spazi tra i poligoni. Tuttavia, esiste un problema con l'utilizzo di questo strumento. Quando rompe i poligoni durante il geoprocessing, generalizza i poligoni appena creati. Quindi, le curve non saranno così lisce, ma avranno linee "frastagliate" nette. YMMV.
amasephy

3
@underdark Un buon punto. Tuttavia, si potrebbe sempre introdurre i frammenti tramite un'unione dei dati con un poligono circostante monolitico (come il riquadro di selezione del set di dati). Una domanda interessante è come "Elimina" sceglie in quali poligoni unire le scaglie. Ciò potrebbe distorcere i risultati (anche se dubito che la distorsione sarebbe importante nella maggior parte delle applicazioni). In questa particolare situazione, una soluzione ideale sarebbe in qualche modo dividere i frammenti o fare una media degli errori.
whuber

Una delle opzioni dello strumento è quella di unire il nastro con il poligono vicino con il bordo più lungo (opzione predefinita) o l'area più grande.
Kenbuja,

4
Se non si dispone di una licenza ArcInfo, è disponibile uno script su arcscripts.esri.com/details.asp?dbid=14672 che lo automatizza tramite Python. L'ho usato con successo qualche anno fa.
Stephen Lead,

20

Per fare ciò manualmente in QGIS, vai su Settings|Project Properties...Nella Generalscheda in basso è Snapping options...Controlla il livello che vuoi agganciare, imposta la modalità to vertexe imposta la tolleranza su un valore inferiore alla distanza più breve tra due punti che hai. Se non sei sicuro, imposta le unità su pixelse la tolleranza su qualcosa di simile a 5 in modo che se ci sono alcuni dettagli difficili puoi ingrandire e assicurarti di non scattare con il vertice sbagliato.

Quindi modifica il tuo livello vettoriale, seleziona lo strumento nodo e sposta i punti erranti nelle loro controparti.

Farlo automaticamente è un po 'più complicato. AFAIK QGIS non ha un plugin per automatizzarlo, e sebbene PostGIS sia basato su GEOS che ha funzioni di aggancio, non sono esposti a PostGIS. Potrebbe essere possibile scrivere una query per controllare ogni punto di un poligono per i vicini entro la distanza di schiocco, ma che attualmente è oltre il mio spirito su cui espandersi.

GRASS ha v.clean.snap a cui è possibile accedere tramite QGIS, ma c'è il passaggio aggiuntivo per la creazione di un set di dati GRASS.


Puoi sempre usare la casella degli strumenti di elaborazione QGIS e applicare v.clean.snap direttamente al tuo file di forma.
SAnderka,

v.clean.snap non è disponibile. ho usato v.clean e quindi selezionato lo strumento di snap e ha dato un livello vuoto. La documentazione dice che lo snap è di unire le linee al vertice. Voglio unire il vertice ad un altro vertice entro la soglia.
Neogeomat,

17

Se hai familiarità con QGIS: nel trunk QGIS 1.9 (può essere installato come qgis.dev tramite il programma di installazione OSGEO, vedi la homepage di qgis) è una nuova funzione nel menu vettoriale chiamata "Elimina poligoni del nastro", che fa esattamente quello che volere. È possibile selezionare i poligoni problematici e unirli ai poligoni adiacenti in base a un confine comune o a una propulsione di area. Provalo!


3
Per aggiornare questa risposta, in QGIS 2.18.1 'Elimina poligoni del nastro' è disponibile nel pacchetto stabile e si trova in Vector -> Strumenti di geoprocessing.
Valerie Anderson,

Questo vale per i poligoni del nastro vagante esistenti tra quelli principali, non nel caso di spazi tra i poligoni.
Stragu,

15

Se sei un utente QGIS di quanto ottieni tutta la potenza di GRASS, in quanto si tratta di un GIS completamente topologico. All'interno di QGIS attivare il plug-in GRASS, creare una posizione / mapset in cui importare i dati.

Apri il mapset e importa il tuo livello sporco con v.in.ogr: gioca con i due parametri avanzati "soglia di aggancio per i confini" e "dimensione minima dell'area da importare".

È inoltre possibile utilizzare le opzioni fornite dal modulo v.clean.


10

ArcGIS ha regole di topologia che ti aiuteranno a identificare e correggere le lacune nei tuoi dati come ciò a cui ti riferisci. Per creare regole di topologia è necessario disporre di una licenza ArcEditor o ArcInfo e archiviare la classe di funzionalità in un set di dati di funzionalità in un geodatabase personale o file.

Molto probabilmente vorrai implementare la regola " Non devono avere lacune ". Dopo aver creato la base di regole con tutte le regole che ritieni necessarie, vorrai convalidare la topologia che identificherà tutti gli errori nei tuoi dati.

Quindi, utilizzando la finestra di ispezione errori e lo strumento Correggi errori topologia , è possibile selezionare singolarmente o in blocco gli errori che si desidera correggere e il modo in cui si desidera correggerli (ovvero creare nuovi poligoni per riempire i vuoti o unirli con poligoni più grandi nelle vicinanze) .


7

C'è una funzione "Elimina poligoni del nastro" nella casella degli strumenti di QGIS 2.12 (Lyon). Sono sicuro che è anche in una versione precedente.


2

Bene, sto usando una funzione PostGIS (che uso direttamente sul mio QGIS) che esegue uno snap ricorsivo per risolvere questo problema. I risultati sono abbastanza buoni, richiede solo una buona quantità di valori di tolleranza per ottenere i migliori risultati. Se sei disposto a provare, controllalo (nel mio caso le geometrie sono tutte multi, quindi lo st_multi nel mio esecuzione):

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;

1

Non è una soluzione perfetta, ma una di queste due cose funziona per me nella maggior parte dei casi:

  1. In QGIS, salva il layer in formato GEOJSON. Ma prima di salvare, nella finestra di dialogo "Salva livello come", imposta la precisione delle coordinate su 3 (15 è l'impostazione predefinita). Ciò avrà l'effetto di unire vertici molto vicini tra loro.

  2. Vai su Mapshaper , carica il file e premi "semplifica". Nell'angolo in alto a sinistra ti dirà quante intersezioni di linee trova e ti darà la possibilità di correggerle. Trovo che questa correzione funzioni circa la metà delle volte.


0

Non l'ho usato, ma ET Geowizards , che porta molti strumenti di elaborazione ArcEditor e ArcInfo solo alla licenza di livello ArcView (aka ArcGIS Standard), ha una procedura guidata Elimina che "Elimina i poligoni indesiderati (scaglie) unendoli nei poligoni vicini o eliminandoli " . Il toolkit della procedura guidata ti riporterà $ 250 usd ( listino prezzi ).


0

Ho affrontato lo stesso problema, che esplorando gli strumenti ho risolto abbastanza facilmente anche se non conosco la logica. ! [Negli strumenti, vai alla casella degli strumenti Gestione dati, vai alla Classe funzionalità ed esegui lo script Integrate facendo doppio clic] [1]

nella finestra Script selezionare la classe di funzionalità che presenta problemi e nella tolleranza XY aggiungere il valore misurando la distanza con l'aiuto dello strumento di misura in più punti e ottenere un valore medio inserire quel valore nell'ambiente di tolleranza e applicare il problema. non ora come ma risolto con una precisione del 90% circa. ! [inserisci la descrizione dell'immagine qui] [2]

Ho provato tutti gli altri metodi descritti nelle risposte precedenti, ma è stato difficile e ingombrante ottenere le correzioni automatizzate per gli spazi tra i poligoni adiacenti.


1
Se incolli un link alle immagini a cui ti riferisci, posso aggiungerle.
djq
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.