Converti poligoni raster in contorni uniformi in QGIS


14

Ho avuto un successo limitato creando poligoni di contorni lisci da strati raster.

Ho creato linee di contorno e polilinee di contorno e poi ho usato QGIS Union. Quindi uso QGIS Polygonize. Quindi utilizzare le statistiche zonali per il raster originale per ottenere il valore sui poligoni.

Il secondo metodo che ho provato è stato di convertire il raster in poligono. Quindi crea una nuova colonna di attributi arrotondata al contorno che desidero. Quindi dissolvo le linee tra lo stesso valore. Quindi utilizzare v.generalize. Questo metodo è un po 'più veloce, ma lascerà alcuni poligoni frastagliati / non levigati.

inserisci qui la descrizione dell'immagine

Esiste un metodo più semplice che funziona davvero tutto il tempo. Sembra che ci dovrebbe essere un semplice comando che esegue l'intero processo.


2
Perché stai usando Polygonize? il tuo input raster è continuo (come un DEM in virgola mobile)? QGIS ha uno strumento di contorno, che è una scorciatoia per GDAL_Contour .. qgistutorials.com/en/docs/working_with_terrain.html Stai cercando di ottenere contorni o aree ipometriche?
Michael Stimson,

Il file di input è un tif e il file di output richiesto è un file di forma con solo poligoni a incrementi specifici. Ho trovato numerosi strumenti per creare polilinee, ma non poligoni.
Rx_

Abbastanza giusto, stai cercando di ottenere aree ipometriche. Uso (principalmente) Esri che ha un'opzione per semplificare i poligoni creati da raster a poligono ma che non aiuteranno qui. Come sarebbe se dovessi creare i contorni dal DEM, aggiungere un rettangolo di selezione e quindi poligonizzare? Puoi quindi creare punti etichetta, intersecare / campionare i valori ed etichettare i poligoni con gli attributi ... probabilmente potresti ottenere alcuni poligoni dello stesso valore che possono essere dissolti ma il problema più grande sta saltando di più di un intervallo. Ho un codice per attribuire hypso dai contorni ma funziona sulla copertura di ArcInfo
Michael Stimson,

Quello che descrivi è quello che penso di fare nel mio primo metodo. È ingombrante. È necessario assicurarsi che ogni file abbia un attributo id e quindi eliminare i poligoni che non contengono un'area sopra lo zero una volta poligonizzati. Non sono riuscito a ottenere l'etichetta corretta coerente della linea da trasferire al poligono. Il secondo metodo è così vicino all'essere quello che voglio, ma v.generalize sembra non funzionare il 100% delle volte. Vorrei che ESRI semplificasse i poligoni fosse un'opzione in QGIS come hai sottolineato.
Rx_

Risposte:


12

Ho riscontrato gli stessi problemi della tua area nel secondo metodo. Ho esportato un raster in un vettore e ho provato a utilizzare v.generalise e ottengo poligoni per lo più lisci con il limite occasionale 'a gradini' che sembra non essere stato influenzato dall'algoritmo.

Ho trovato un processo che ha funzionato per il mio compito, non sono sicuro che sia il modo migliore, ma ho pensato di condividerlo nel caso ti aiutasse.

Quello che ho iniziato era una griglia ASCII di BoM che sembrava così: inserisci qui la descrizione dell'immagine

Cosa volevo qualcosa di simile a ciò che BoM produce in questo modo: inserisci qui la descrizione dell'immagine

Sono stato in grado di ottenere un risultato (di cui ero contento) utilizzando i seguenti passaggi.

  • Carica griglia (nel mio caso ASCII Grid da BoM) in QGIS.
  • Ricodificato in classi discrete. (Casella degli strumenti di elaborazione> Erba> Raster> r.recode)
  • Esegui un filtro di maggioranza per "ripulire" (Casella degli strumenti di elaborazione> SAGA> Filtro raster> Filtro di maggioranza)
  • Crea i contorni dalla griglia filtrata a intervalli di 1 e li memorizza in un 'classe' di attributo (perché le mie classi erano 1,2,3,4, ecc.). ("Menu" raster> Estrazione> Contorno)
  • I contorni di output sono in qualche modo generalizzati, ma ho usato v.generalized con l'algoritmo 'snakes' per appianarli (Toolbox di elaborazione> Erba> Vettore> v.generalize)
  • Ho quindi convertito le linee in poligono (Casella degli strumenti di elaborazione> Geoalgoritmi QGIS> Strumenti geometria vettoriale> Linee in poligoni)
  • Alla fine ho dovuto convertire i poligoni in una sola parte in più parti, in modo che tutti i poligoni si disegnassero bene. (Casella degli strumenti di elaborazione> Geoalgoritmi QGIS> Strumenti geometria vettoriale> Parti singole in Mulitpart).

Dopo lo styling il mio output è di seguito: inserisci qui la descrizione dell'immagine

Sarei anche interessato a sapere se qualcuno conosce un modo più semplice. Inizialmente stavo pensando in modo simile a @Rx_ che potevo semplicemente convertire il mio raster in vettoriale, quindi generalizzare e avrei finito. Quello che dovevo fare era molto più lungo.


3

Mi piacciono le risposte qui, ma non posso credere che QGIS non abbia ancora un modo semplice e veloce per farlo. MapInfo può generare contorni come poligoni o linee con qualsiasi intervallo che è possibile specificare.

Sembra un compito così basilare e anche importante per ottenere l'estensione. Se qualcuno ha un modo aggiornato o più veloce per farlo, condividi!


1

Un modo più diretto consiste nell'utilizzare gdal_countourdirettamente (come programma da riga di comando) in "modalità poligonale" (ovvero con l' -popzione).

Esempio:

gdal_contour -p -amin min_val -amax max_val -i 1 input_raster.tif output_shape.shp

Documentazione: https://gdal.org/programs/gdal_contour.html

Questa opzione è disponibile solo nella versione> = 2.4 (questo può essere verificato con gdalinfo --version). Se stai usando Ubuntu 18.4, potresti doverlo installare da UbuntuGIS


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.