alsperGIS DATI
SOFTWARE



Vettorializzare: da classi raster a poligoni


In questa pagina sono confrontati gli strumenti disponibili in QGIS per convertire i dati raster classificati in poligoni vettoriali. Tali strumenti si basano su GDAL (2.0.2), GRASS (6.4.3 e 7.0.4) e SAGA (2.1.2).
Il confronto è stato fatto con QGIS 2.14.2-Essen e installazione mediante OSGeo4W. Per SAGA è stata provata anche la versione 2.2.7 con installazione stand-alone.




   GDAL


Menù: Raster > Conversione > Poligonalizzazione (da raster a vettore)...
GSAL Poligonalizzazione
oppure
Strumenti di Processing: GDAL/OGR > [GDAL] Conversion > Vectorize raster layer
GDAL Vectorize raster layer

Entrambi i modi (dal menù raster o dagli strumenti di processing) richiamano il comando gdal_polygonize (> http://www.gdal.org/gdal_polygonize.html); l'unica vera differenza è che con gli strumenti di processing si può salvare il risultato come file temporaneo. La finestra aperta dal menù raster contiene già l'opzione per una eventuale maschera che comunque può essere sempre indicata modificando la riga di comando con l'aggiunta dell'opzione -mask filename (valori pari a 0 sono considerati non validi, gli altri sono validi). Un'altra opzione che può essere utile è -b band per specificare la banda da vettorializzare in caso di raster multibanda.
In genere vengono salvati nel contorno dei poligoni solo i nodi in cui c'è un cambio di direzione, tuttavia possono ritrovare nodi intermedi anche su alcuni segmenti diritti orizzontali. A volte tali nodi intermedi non sono presenti in entrambi i poligoni adiacenti.

Poligonalizzazione GDAL




   GRASS


Strumenti di Processing: GRASS > Raster (r.*) > r.to.vect (> https://grass.osgeo.org/grass64/manuals/g.region.html)
Strumenti di Processing: GRASS 7 > Raster (r.*) > r.to.vect (> https://grass.osgeo.org/grass70/manuals/g.region.html)
GRASS r.to.vect

ATTENZIONE: per vettorializzare aree ricordarsi di selezionare "Area" alla voce "Feature Type"!
La cosa interessante del comando di GRASS è l'opzione "Smooth corners of area features" che invece di seguire i contorni dei pixel ne taglia gli angoli.

GRASS r.to.vect smooth corners

PROBLEMI:
Usando l'opzione "Smooth corners of area features" con GRASS 6.4 si ottengono poligoni con vertici duplicati, perfettamente sovrapposti; tale difetto non si presenta nella versione 7 di GRASS.
Un altro problema si presenta quando il raster da vettorializare ha risoluzioni orizzontale e verticale diverse: GRASS definisce la propria regione di lavoro con risoluzione uguale per entrambe le direzioni e che coincide con la risoluzione orizzontale del raster, per cui si crea uno sfasamento verticale dei contorni vettoriali rispetto al raster di partenza.

GRASS r.to.vect sfasamento

Con GRASS 7 il problema dello sfasamento può verificarsi anche se le risoluzioni x e y coincidono. Questo perché nel definire la regione di lavoro (g.region) viene usata l'opzione "-a" che allinea la regione alla risoluzione invece che ai limiti (> https://grass.osgeo.org/grass70/manuals/g.region.html) ovvero i limiti della regione (e di conseguenza la base raster da vettorializzare) vengono spostati per ottenere valori multipli della risoluzione.

GRASS7 r.to.vect sfasamento

Il problema dello sfasamento, essendo dovuto alla definizione approssimata della regione di lavoro, si verifica usando GRASS attraverso gli strumenti di processing. Se usiamo l'apposito plugin di GRASS che richiede la definizione di mapset e location possiamo personalizzare limiti e risoluzione della regione impostando valori corretti ed evitando così il problema.




   SAGA


Strumeni di Processing: SAGA (2.1.2) > Shapes - Grid > Vectorising grid classes
SAGA Vectorising grid classes

la finestra di questo strumento propone le seguenti opzioni

Class Selection:
[0] one single class specified by class identifier (in tal caso vengono vettorializzate solo le aree con il valore indicato nella riga "Class Identifier")
[1] all classes (per vettorializzare tutte le aree)

Vectorised class as:
[0] one single (multi-)polygon object (le aree di una stessa classe vanno a costituire un poligono multiparte)
[1] each island as separate polygon (aree separate diventano poligoni separati anche se appartengono alla stessa classe)

L'installazione stand-alone (attualmente, maggio 2016, è alla versione 2.2.7) propone l'opzione "Keep Vertices on Straight Lines" che salva i punti intermedi sul segmenti diritti (altrimenti sono salvati solo il primo e l'ultimo vertice); tale opzione può essere utile se poi si vuole smussare la geometria.
Nella tabella degli attributi associati alle geometrie vettoriali risultanti, oltre al campo con i valori del raster, vengono creati anche due campi, uno numerico (ID) e uno di testo (NAME), con la numerazione ordinata delle classi trovate, che partono rispettivamente da 0 e d 1.

SAGA classi ordinate

PROBLEMI
SAGA lavora su dati raster con la stessa risoluzione orizzontale e verticale. Se il raster ha risoluzioni diverse esso viene ricampionato usando la risoluzione più dettagliata per entrambe le orientazioni; in tal modo i poligoni vettorializzati potrebbero non coincidere con le aree del raster di partenza.
Nella versione stand-alone, importando con drag-and-drop nella finestra di SAGA un raster classificato con le risoluzioni x e y non coincidenti, il programma potrebbe eseguire un ricampionamento con un metodo che altera i valori presso i confini delle aree. Per evitare che questo accada è meglio importare il raster usando il comando "Geoprocessin > File > Grid > Import > Import Raster" impostando l'opzione Resampling a Nearest Neighbour.
Nella versione 2.2.7 (installazione stand-alone) con l'opzione "Keep Vertices on Straight Lines" ogni poligono ha il primo nodo duplicato.




   Sintesi del confronto


Applicazione
comando
versione
GDAL
poligonize
2.0.2
GRASS 6
r.to.vect
6.4.3
GRASS 7
r.to.vect
7.0.4
SAGA
vectorising grid classes
2.1.2
SAGA
vectorising
2.2.7 stand-alone
Esempi
GDAL poligonize GRASS64 r.to.vect

smooth corners:
GRASS64 r.to.vect smooth corners
GRASS7 r.to.vect

smooth corners:
GRASS7 r.to.vect smooth corners
SAGA vectorising
SAGA227 vectorising

keep vertices:
SAGA keep vertices
Pregi
Ok anche con
risoluzioni x e y diverse.
Opzione "Smooth corners".
Opzione "Smooth corners". Numerazione ordinata delle classi. Numerazione ordinata delle classi.
Difetti
Punti intermedi casuali sui segmenti orizzontali.
Sfasamento se le risoluzioni x e y sono diverse.
L'opzione "Smooth corners" produce tutti i nodi duplicati.
Sfasamento se le risoluzioni x e y sono diverse.
Sfasamento per riallineamento.
Sfasamento se le risoluzioni x e y sono diverse.
Sfasamento per riallineamento.
Sfasamento se le risoluzioni x e y sono diverse.
L'opzione "Keep vertices" produce primi nodi duplicati.

Lo strumento di GDAL è l'unico che gestisce senza problemi anche i raster con risoluzioni orizzontale e verticale diverse. Su alcuni segmenti orizzontali dei confini crea punti intermedi non necessari; possono comunque essere rimossi con gli strumenti di pulitura/semplificazione vettoriale (es: v.generalize di GRASS con metodo Douglas e tolleranza molto bassa).
GRASS offre l'opzione "Smooth corners..." per tagliare gli angoli ed ottenere poligoni meno spigolosi, tuttavia per risultati più gradevoli occorre lavorare con gli strumenti di smussamento di v.generalize.
SAGA crea campi della tabella degli attributi con la numerazione ordinata delle classi e può essere una buona scelta se il raster da vettorializzare ha risoluzioni orizzontale e verticale coincidenti.





 

Strumenti
- poligonize di GDAL
- r.to.vect di GRASS
- vectorising di SAGA
- Sintesi del confronto


Argomenti correlati
> QGIS
> GDAL
> GRASS
> SAGA










Maggio 2016
Alessandro Perego