Come riempire automaticamente i buchi nei poligoni?


12

Esiste un'opzione in QGIS per riempire automaticamente i buchi nei poligoni impostando parametri, ad es. Area massima, distanza tra i bordi? Voglio eliminare / riempire i buchi che sono molto "sottili" / piccoli.


1
Sei interessato a buchi (anelli all'interno dei poligoni) o alla riduzione degli spazi tra poligoni separati?
Simbamangu,

Questa deve essere una soluzione basata su QGIS? In precedenza ho scritto un blog su come eseguire ciò utilizzando SQL spaziale in PostGIS ( geospatial.commons.gc.cuny.edu/2013/11/04/… ). Se non stai eseguendo PostGIS, probabilmente potrei adattarlo a SpatiaLite, che, se indovini, se stai usando QGIS, potresti già avere SpatiaLite nella tua toolchain.
Lee Hachadoorian,

Risposte:


11

Utilizzando QGIS 2.10.1-Pisa con la versione di elaborazione 2.10.2, ci sono un paio di strumenti disponibili dalla casella degli strumenti di elaborazione :

  • Strumento Riempi buchi che puoi specificare l' area massima .
  • Elimina lo strumento fori che verrebbe applicato all'intero livello di input.

Spero che questo ti aiuti!


1
Solo per verificare, il parametro area massima, ovvero la dimensione massima di un foro da riempire? Quindi in un progetto UTM di metro, se il massimo fosse 10.000, ciò significherebbe che il buco più grande da riempire sarebbe un ettaro e qualsiasi più grande di quello rimarrebbe?
BillW,

1
@BillW - Sì, credo che sia esattamente quello che fa :)
Joseph

11

Ho affrontato lo stesso problema del tuo con questo shapefile, avendo molti spazi tra i poligoni.

File originale con spazi vuoti

Per risolvere il problema, è possibile utilizzare una leggera modifica del metodo di tshiffle:

  1. Innanzitutto, esegui la differenza tra il tuo file e un poligono che copre tutta la sua estensione.

Extent_polygon

Difference_tool

Questa azione creerà un nuovo file di forma costituito da un solo poligono, quindi devi esploderlo in singole parti. Per questo, è possibile utilizzare lo strumento Vector / Geometry / Multipart to singleparts.

Difference_result

Multi_to_single

Successivamente, eliminare l'entità esterna. Ora hai, in un nuovo shapefile, diversi poligoni che coprono gli spazi della copertura originale.

gaps_covered

  1. Eseguire un'unione tra i dati iniziali e le singole parti. Utilizzare lo strumento SAGA, poiché l'opzione QGIS predefinita crea duplicati nel database.

Unione

  1. Tutti gli spazi vuoti ora appariranno come record vuoti nel database (per esempio 72 righe). Ordina la tabella utilizzando un campo area e prendi il valore dal poligono più piccolo nel file originale. In questo caso, 0,13645 ettari.

Banca dati

  1. Infine, usa lo strumento "Elimina poligoni del nastro", con le impostazioni mostrate nell'immagine.

inserisci qui la descrizione dell'immagine

  1. Il risultato finale non ha lacune.

inserisci qui la descrizione dell'immagine


Potresti aggiungere ulteriori informazioni sulla scelta dei parametri? Qual è il "valore"? La pagina della documentazione di QGIS è molto breve nei dettagli. Risposta molto elegante, peccato che l'utente iniziale non abbia accettato nessuna delle risposte!
user3386170,

1
'Valore' è la grandezza che usi per il confronto. Nell'esempio il campo usato 'area' è stato impostato in ettari, quindi 0,1 significa: eliminare i poligoni più piccoli o uguali a 0,1 ettari.
gtapko,

gtapko, puoi fornire ulteriori dettagli sulla fase 3? non riesco a capirlo, grazie
newGIS

4

Potrebbero esserci soluzioni più eleganti là fuori, ma questo ha sempre funzionato per me.

1) Crea poligoni "di riempimento del foro". Per fare questo disegna un poligono gigante più grande dell'originale e usa lo strumento "differenza". Se hai disegnato un poligono molto più grande avrai tutti i poligoni "che riempiono i buchi" più un singolo poligono più grande che gira attorno alla forma originale. Elimina quel grande poligono, mantenendo i poligoni "che riempiono i buchi".

2) Unisci i poligoni "che riempiono i buchi" con lo shapefile originale. Se vuoi riempire solo buchi che soddisfano un determinato criterio (cioè sotto il numero X di chilometri quadrati) puoi filtrare qui.

3) Sciogli il poligono appena unito su un campo comune.


Non è chiaro il passaggio 3, come qualcuno troverà il campo comune?
iRfAn

A questo punto il campo comune può essere qualsiasi cosa, l'obiettivo è semplicemente dissolvere i confini tra i poligoni. È possibile utilizzare un campo esistente o semplicemente aggiungerne uno.
tshiffle

4

In python / shapely, questo può riempire il tuo poligono:

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

2

Ho visto alcune spiegazioni seguendo lo stesso percorso di gtapko e di tshiffle, ma nessuna ha funzionato per me perché le geometrie non valide hanno reso disfunzionale lo strumento differenza. Quindi, ho trovato una mia soluzione che non è automatizzata al 100%, ma è gestibile. Probabilmente qualcuno lo ha già capito, ma io correrò le mie possibilità:

1) Creare un ID sul livello originale danneggiato

La creazione di un attributo ID è semplice, ma lo è anche la mia soluzione, quindi la esaminerò.

Innanzitutto, devi aprire la tabella degli attributi e poi andare sul calcolatore di campo , che è un pulsante praticamente come un abaco. Lì, ti verrà data la possibilità di creare un nuovo campo o aggiornarne uno esistente. Nella foto sopra sto creando uno nuovo chiamato "ID". La formula è proprio alla fine della foto. (Mi dispiace per aver configurato il mio QGIS in una lingua diversa. Dato che il design e le formule sono esattamente gli stessi in tutte le versioni linguistiche, non credo che ci ostacoleranno qui.)

2) Converti i poligoni in linee

Questo passaggio si trova nella sezione Vettore> Geometria del menu. La forma convertita dovrebbe apparire così:

Subito dopo aver convertito i poligoni in linea, dovrai fare l'esatto contrario, che è ...

3) Converti le linee in poligoni

Le opzioni sono una accanto all'altra. Ancora una volta, non pensiamo alla barriera linguistica qui.

4) Rallegrati Il motivo per cui hai eseguito i passaggi 2 e 3 è perché ora sei sicuro che quelle linee saranno considerate poligoni, il che significa che ora hanno la loro linea nella tabella degli attributi. Se lo controlli, sarà simile al seguente:

Il primo è SEMPRE l'intero poligono (credetemi, oggi ho cancellato un paio di centinaia di righe ...) e il resto sono le righe sciolte nel mezzo. È possibile abilitare la modifica e prepararsi all'azione. Se decidi di provare questo, due cose che dovresti tenere a mente sono: organizza il tuo tavolo ID-saggio , in questo modo sei sicuro che non ti stai perdendo nulla e usa shift per selezionare gruppi di dati, proprio come qualsiasi altro programma .

Sono consapevole che questa non è la crema della risoluzione dei problemi di QGIS, ma se stai affrontando una situazione in cui gli strumenti non funzionano a causa della geometria non valida creata da questa linea (ho anche provato a dissolverlo dall'ID, ma non ha funzionato), quindi potrebbe essere una via d'uscita.


Potresti aggiornare le tue immagini? I collegamenti sono interrotti!
Simbamangu,

Hey. Mi dispiace, ma a quanto pare Photobucket ha dirottato le mie immagini, ho perso l'accesso ad esse. Ho già aperto un biglietto e sto cercando di riottenere l'accesso. Ti ricontatterò quando possibile.
Eric Lino,
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.