Use the left/right arrow keys to navigate, 's' to enable/disable scrolling.

Introduzione ai GIS Liberi


GRASS

Indice


Primi passi in GRASS

Gesione di dati raster

Gestione di dati vettoriali

QuantumGIS GRASS plugin

Presentazione di GRASS


GRASS (Geographical Resources Analysis Support System) è un software GIS con supporto a dati raster e vettoriali


Il progetto nasce agli inizi degli anni ‘80 come progetto dell’esercito USA, per poi essere abbandonato nel 1996, e rilasciato nella versione 4.1 al pubblico dominio


Nel 1999, dopo alcuni anni di sviluppo da parte della comunità, viene rilasciata la versione 5, in licenza GPL


Attualmente il centro di sviluppo del software ha sede a Povo (Trento Trentino-Italia), presso l’ITC-irst, ma si avvale di molti collaboratori esterni

Presentazione di GRASS


Il sistema è organizzato su tre livelli:


  • core: implementa funzionalità di base come la gestione dei dati, la visualizzazione, …
  • moduli: gestiscono caratteristiche specifiche (analisi raster, image processing, …)
  • interfacce grafiche: accesso facilitato ai comandi GRASS

È scritto principalmente in ANSI C, con alcuni moduli in FORTRAN. L’interfaccia grafica classica usa il linguaggio interpretato Tcl/Tk, ma dalla versione 6.4 è disponibile una nuova riscrittura in python (wxPython)

Organizzazione dei moduli


I moduli sono organizzati per gruppi:


  • d.* comandi per la gestione del display grafico
  • g.* comandi per la gestione dei file
  • i.* comandi per l’elaborazione delle immagini
  • r.* comandi per l’elaborazione di dati in formato raster
  • v.* comandi per l’elaborazione di dati in formato vettoriale
  • db.* comandi per la connessione a DBMS
  • r3.* comandi per l’elaborazione di dati raster tridimensionali
  • m.* altri comandi
  • p.*/ps.* comandi per la creazione e gestione di file postscript per la stampa di mappe

Funzionalità di GRASS


In totale sono disponibili circa 400 moduli, che implementano le seguenti funzioni:

  • analisi spaziale
  • modellazione ambientale
  • generazione di mappe tematiche
  • integrazione con DBMS
  • visualizzazione 2D e 3D di dati spazialmente distribuiti
  • multispectral image processing
  • gestione e memorizzazione di dati

Il loro numero è in costante crescita, grazie anche al modello di sviluppo che permette l’accesso al codice sorgente di tutto il sistema

Interoperabilità


È possibile scambiare dati con altri sistemi GIS nei formati raster (TIFF, gif, IMG, ASCII, ARC/GRID, ecc.) e vettoriali (DXF, ESRI-E00, ESRI-SHAPE, ASCII, MapInfo) più diffusi (attraverso la libreria GDAL/OGR)


Le piattaforme hardware supportate includono Linux, Sun Solaris, Silicon Graphics Irix, HP-UX, DEC-Alpha, e Windows 95/98/NT/XP


Lo sviluppo avviene soprattutto in ambiente Linux/Unix, per cui tale ambiente, nelle sue varianti, risulta il più adatto all’utilizzo di GRASS

Interfacce utente


GRASS, nella versione 6.4, viene distribuito con 3 differenti interfacce:


  • interfaccia a linea di comando: è l’interfaccia standard di GRASS, presente fin dalle prime versioni. È la più complicata da utilizzare, ma presenta il vantaggio di essere scriptabile, rendendo task complessi automatizzabili
  • interfaccia grafica classica, in TCL/Tk: la prima interfaccia grafica ad essere stata sviluppata per GRASS. Permette un utilizzo semplificato, anche per gli utenti meno esperti, ma si basa su un toolkit vecchio e poco integrato con i moderni sistemi desktop
  • interfaccia wxPython: negli ultimi due anni gli sforzi si sono concentrati sullo sviluppo di una GUI più moderna, armonica, e simile agli altri SW GIS presenti sul mercato

Avvio di GRASS (1/3)


Per avviare il programma è sufficiente lanciare, in un terminale, il comando grass. Se non si utilizzano opzioni, il sistema partirà con l’interfaccia GUI classica in TCL/Tk


Opzioni del comando GRASS:


  -text     avvia GRASS senza GUI (interfaccia CLI)
  -gui      avvia GRASS con interfaccia grafica standard (TCL/Tk)
  -tcltk    avvia GRASS con GUI TCL/Tk
  -wx       avvia GRASS con l'ultima versione della GUI, in wxPython 

Nota: GRASS memorizza le opzioni dell’ultimo avvio in un file di configurazione, rendendo superfluo l’uso di opzioni dopo il primo avvio

Avvio di GRASS (2/3)


GRASS necessita di una directory specifica, in cui salvare tutti i dati su cui lavorare (GRASSDATABASE)


Al primo avvio verrà presentata una schermata per effettuare tale operazione



  # Primo avvio di GRASS
  $> cd ~
  $> grass -wx

Avvio di GRASS (2/3)


Struttura del database GRASS (1/3)


GRASS organizza il suo database interno in una struttura gerarchica, pensata per consentire l’accesso ai dati in maniera efficiente e garantire l’utilizzo multiutente


Il database di GRASS è spalmato sul filesystem, ed è organizzato in una serie di directory annidate


Come già detto in precedenza, l’elemento radice è la directory GISSDATABASE, che viene creata al primo avvio di GRASS

Struttura del database GRASS (2/3)


All’interno della directory principale, i dati sono organizzzti per aree di progetto, denominate LOCATION



    GISDATABASE                   /home/user/GRASSDATA
                             _______________|_______________
                            |               |               |
    LOCATIONS          Vegetazione     Temperatura        Italia ...

Struttura del database GRASS (3/3)


Ciascuna LOCATION può contenere una o più sottodirectory, denominate MAPSET


I MAPSET servono da un lato a separare i dati in gruppi omogenei, e dall’altro a garantire a più utenti di lavorare sullo stesso progetto (LOCATION)



    GISDATABASE                   /home/user/GRASSDATA
                             _______________|_______________
                            |               |               |
    LOCATIONS          Vegetazione     Temperatura        Italia ...
                    _______|______
                   |              |
    MAPSET       NDVI            EVI

Caratteristiche dei MAPSET


Di default, l’accesso ad un dato MAPSET è di tipo rw per l’utente che l’ha creato, e in sola lettura per tutti gli utenti che hanno accesso alla relativa LOCATION


Esiste un MAPSET di sistema, PERMANENT, che viene creato nel momento in cui viene inizializzata una LOCATION:


  • memorizza le configurazioni della LOCATION, che per default vengono applicate a tutti i nuovi MAPSET
  • per convenzione, PERMANENT dovrebbe contenere i dati comuni a tutti gli utenti della LOCATION

Caratterizzazione delle location


Ciascuna location è definita da 4 parametri:


  • sistema di riferimento
  • proiezione
  • limiti geografici
  • estensione della regione computazionale

Prima di utilizzare nuovi dati in GRASS, è necessario creare una location che abbia proprietà coerenti

Creazione nuova location (1/2)


La creazione di una nuova location si effettua dalla finestra di avvio di GRASS


È possibile definire una location sulla in 6 modi differenti:


  • selezione manuale dei parametri (datum, proiezione, extent)
  • selezione mediante un codice EPSG
  • impostazione mediante un file già georiferito (ad, es. un raster)
  • impostazione mediante un file di georeferenziazione (wkt, prj)
  • utilizzo di parametri personalizzati nella sintassi proj4
  • utilizzo di un SRS piano XY non cartografico (utile per importare raster da georeferenziare)

Creazione nuova location (2/2)


Creazione mapset


La creazione di un nuovo mapset è un’operazione estremamente semplice. È sufficiente:


  • selezionare la location in cui il nuovo mapset verrà creato
  • inserire il nome del nuovo mapset

Presentazione GUI wxPython (1/3)


GRASS, nella versione wxPython, presenta due finestre con funzionalità distinte:


  • Layer manager: permette di gestire i layer cartografici (aggiunta, rimozione, ordinamento), e offre l’accesso a tutti i moduli di GRASS attraverso la barra dei menu, organizzata secondo l’ordinamento dei comandi interni (region, raster, vectorial, db,…)

  • Map display: interfaccia di visualizzazione dei dati, con le tipiche funzioni di navigazione della mappa (zoom, pan, …), la gestione della stampa e i comandi per cambiare tipo di vista (2D, editing, 3D)

Presentazione GUI wxPython (2/3)


Presentazione GUI wxPython (3/3)


Raster data model


GRASS memorizza i dati raster in un insieme di file organizzati nel seguente modo:

  • un header file, nella directory cellhd, che contiene informazioni su SRS, extent e risoluzione
  • una matrice con i valori del raster (cell se matrice intera, fcell se matrice di float)
  • un file con i valori delle categorie (cats), qualora vengano impostate col comando r.category
  • la tabella dei colori nella directory colr (se impostata cool comando r.colors)
  • alcune metainformazioni (nella directory cell_misc)
  • range e valori null (directory cell_misc)

Regione computazionale


GRASS differisce dagli altri software GIS, nella gestione della regione (map extent) e della risoluzione


Sebbene ciascun raster importato possa avere i propri valori di extent e risoluzione (mantenuti nei file di header),tutte le operazioni di analisi vengono effettuate rispetto ai valori di extent e risoluzione della regione computazionale corrente:

  • se il raster in input si estende su una regione più grande, GRASS elaborerà solo le celle coinvolte
  • se il raster in input presenta una risoluzione differente, GRASS effettuerà automaticamente operazioni di resampling

Per cambiare i parametri della regione si utilizza il comando g.region (Configurazione->Regione->Imposta region)

Vectorial data model (1/3)


Punti, linee, aree e geometrie 3D vengono gestite in GRASS attraverso il modello di dati vettoriale


GRASS, dalla versione 6, gestisce le seguenti informazioni:

  • geometria delle features
  • topologia
  • attributi

Nota: nella definizione delle geometrie, i punti interni ad un segmento vengono detti vertici, mentre i due punti di confine (end points) nodi

Vectorial data model (2/3)


GRASS definisce i seguenti tipi di oggetti vettoriali:

  • punti
  • linee: sequenze orientate di vertici connessi, tra due nodi
  • confini (boundary): la linea di confine di una superficie (i due nodi devono coincidere)
  • centroidi: un punto all’interno di un confine (ne rappresenta il baricentro)
  • aree: la composizione topologica tra un confine e un centroide
  • facce: superficie 3D
  • kernel: centroide nelle 3 dimensioni
  • volumi: composizione topologica tra facce e kernel

Vectorial data model (3/3)


Le informazioni topologiche, ovvero le mutue relazioni geometriche tra gli oggetti, permettono di effettuare in maniera efficiente le seguenti operazioni:


  • ricerca di relazioni di vicinanza tra gli oggetti
  • analisi di inclusione
  • gestione delle intersezioni tra geometrie
  • calcoli di prossimità
  • network analysis

Importare dati raster


Prima di poter utilizzare qualsiasi dato in GRASS, è necessario importarlo


GRASS supporta numerosi formati nativamente, oltre a tutti quelli gestiti dalla libreria GDAL


I comandi di importazione iniziano con il prefisso r,in.*, e sono raggiungibili nel menu File->Importa mappe raster


Nelle ultime versioni di GRASS è stato sviluppato un nuovo modulo, r.external, che permette di collegare un raster GRASS ad un file esterno al suo database, senza la necessità di importarlo. Ciò è molto utile nella gestione di raster che non necessitano di analisi (es. le ortofoto)

Gestire dati in GRASS


È possibile rimuovere o rinominare risorse GRASS dalla LOCATION di lavoro, mediante i comandi g.remove (File->Gestione mappe e volumi->Rinomina) e g.remove (File->Gestione mappe e volumi->Rimuovi)

Visualizzare raster


Per visualizzare dati raster all’interno di GRASS, è sufficiente cliccare sul rispettivo bottone, nella barra degli strumenti del Layer Manager


L’operazione di aggiunta del layer corrisponde al comando GRASS d.rats (display raster)

Composizione raster da RGB


In seguito all’importazione di una immagine a colori, GRASS scompone automaticamente tale raster in tre layer, ciascuno corrispondente alla componente cromatica nello spazio RGB (red/green/blue)


È possibile aggiungere alla mappa la ricostruzione di tale raster, mediante il comando d.rgb (o il relativo pulsante)


Un’altra possibilità è ricostruire direttamente l’immagine iniziale all’interno del MAPSET, mediante il comando r.composite (Raster->Gestisci colori->Crea RGB)

Gestione color maps


La colorazione tematica di layer raster all’interno di GRASS è gestita mediante il comando r.colors (Raster->Gestione colori->Tabella dei colori)


Madiante l’interfaccia proposta è possibile agganciare una color map (file di testo con la corrispondenza tra valori e colore) da scegliere tra quelle di default


L’interfaccia wxPython presenta anche una finestra per la definizione in maniera del tutto grafica di una mappa personalizzata (Raster->Gestione colori->Regole dei colori)

Profili e transetti


Statistiche e report (1/2)


È possibile produrre statistiche sui valori delle celle di un raster, mediante i comandi r.stats (Raster->Report e statistiche->Statistiche generali) e r.report (Raster->Statistiche generali->Somma aree di raster)


Entrambi i comandi sono in grado di calcolare:

  • distribuzione dei valori del raster in classi di ampiezza
  • percentuale di copertura delle celle all’interno della stessa classe di ampiezza
  • numero di celle nella stessa classe

Statistiche e report (2/2)


Statistiche univariate


Il calcolo di indicatori statistici si effettua con il comando r.univar (Raster->Report e statistiche->Statistiche univariate raster)

Gestione NULL values


Nelle operazioni di trasformazione tra un formato raster ed un altro, e nell’importazione in GRASS, può succedere che le celle con valori iniziali NULL (non supportate in tutti i formati), vengano riempite con valori di comodo


GRASS implementa il modulo ad-hoc r.null (Raster->Sviluppa raster->Gestisci valori NULL) che permette:


  • setting a NULL di tutte le celle per cui si specifica un valore
  • impostazione ad un valore specificato, delle celle NULL

Riclassificazione


È possibile riclassificare i valori di un raster, mediante il comando r.reclass


Il comando può funzionare in maniera interattiva (leggendo le regole dallo standard input, o batch)


La sintassi generale di una regola di riclassificazione è la seguente:


  old_value                           = new_value   description
  old_value old_value ... old_value   = new_value   description
  old_low_bound thru old_up_bound     = new_value   description
  *                                   = new_value   description

Nota: per preservare spazio su disco, il raster in output non viene effettivamente creato, ma viene salvata la lista delle regole per generarlo al volo in caso di richiesta

Raster algebra (1/2)


La nuova interfaccia grafica in wxPython di GRASS, fornisce un wrapper user-friendly alle funzioni di raster algebra fornite in GRASS dal modulo r.mapcalculator (Raster->Calcolatore raster)


Mediante tale funzionalità è possibile applicare operatori algebrici e funzioni alle singole celle di un raster


Come nel caso della riclassificazione, il risultato non è salvato su disco, ma ricalcolato al volo all’occorrenza

Raster algebra (2/2)


Geoprocessing raster: contours


Tra le operazioni più comuni di geoprocessing, occorre sicuramente enumerare il calcolo di curve di livello, a partire da un raster


Tale task può essere portato a termine mediante il modulo GRASS r.contour (Raster->Genera curve di livello)


Mediante l’interfaccia fornita, è possibile configurare:

  • i livelli su cui contornare
  • l’intervallo interlivello
  • i limiti (upper e lower) tra cui valutare i contorni
  • il numero massimo di celle contigue, intorno a cui disegnare le curve

Il risultato del comando è un vettore GRASS

Esportazione dati raster


Comandi base: r.out.*


Tutti i comandi di esportazione operano sulla regione computazionale impostata


Tipicamente viene utilizzato il comando r.out.gdal, che supporta tutti i formati forniti dalla libreria GDAL


È possibile esportare anche immagini a colori, a partire dalle 3 bande RGB, utilizzando come input data i raster groups

Visualizzare vettori


Per visualizzare dati vettoriali all’interno di GRASS, è sufficiente cliccare sul rispettivo bottone, nella barra degli strumenti del Layer Manager


L’operazione di aggiunta del layer corrisponde al comando GRASS d.vect

Creazione di vettori da ASCII (1/3)


Attraverso il comando v.in.ascii è possibile generare un vettoriale GRASS mediante un un file di testo contentente coordinate note


Il comando in questione può funzionare in due modalità:

  • creazione di una serie di punti, mediante file ASCII di tipo point
  • creazione di un vettoriale attraverso un file di testo nel formato standard di GRASS (una sorta di WKT)

Creazione di vettori da ASCII (2/3)


Formato di testo point:


  759758.87584346|4468209.67895402|casa
  782873.17501666|4440892.77993116|albero

Nota: è necessario specificare il significato di ciascuna colonna, attraverso la sintassi SQL (x double precision, y double precision, descr varchar(20))

Creazione di vettori da ASCII (3/3)


Formato di testo standard:


ORGANIZATION: Alca
  DIGIT NAME:   dmt
  MAP DATE:     Thu Jul 29 19:27:16 2010
  VERTI:
  P  1
   759758.87584346 4468209.67895402
  L  2
   759758.87584346 4468209.67895402
   782873.17501666 4440892.77993116

Esportazione dati vettoriali


L’esportazione di dati vettoriali da GRASS si effettua con il comando v.out.ogr


Occorre prestare attenzione alle caratteristiche specifiche del formato di output scelto, in quanto il modello vettoriale GRASS prevede la definizione di feature tipicamente non presenti negli altri formati (centroidi, confini, kernel..)


Altro fattore degno di attenzione è la necessità di scegliere il tipo di geometrie da esportare, essendo possibile in GRASS riunire features differenti all’interno dello stesso dato vettoriale (punti, linee, centroidi e aree)

NVIZ


NVIZ è un potente visualizzatore di dati in 3D, basato su OpenGL


Attraverso tale modulo GRASS è in grado di visualizzare modelli altimetrici, grid3 (voxel) e dati vettoriali 2D e 3D


Tra le funzioni base è possibile definire l’insieme dei dati da renderizzare, il punto di vista (in maniera interattiva) e le luci della scena


È presente una funzione di esportazione in grado di salvare immagini renderizzate o animazioni (modalità fly)

QGIS GRASS Plugin (1/2)


QGIS fornisce un plugin per il supporto a GRASS, con cui è possibile:


  • accedere al database GRASS (Location, Mapset), e navigarlo graficamente
  • visualizzare dati nativi GRASS all’interno di un progetto QGIS
  • utilizzare un elevato numero di moduli GRASS attraverso un’interfaccia intuitiva
  • accedere al sistema di digitalizzazione di GRASS

QGIS GRASS Plugin (2/2)


Reference


Sito di riferimento del progetto GRASS:

http://grass.itc.it/


Sito comunità italiana GRASS:

http://grass-italia.como.polimi.it/


Documentazione/tutorial:

Manuale pratico introduttivo


Bibliografia:

OPEN SOURCE GIS - A GRASS GIS Approach (terza edizione, 2008)
[Markus Neteler e Helena Mitasova]
Edizioni Springer (http://springer.com)

Copyright 2010 - Alca Soc. Coop.


http://learn.alcacoop.it - learn@alcacoop.it



released under CreativeCommons 2.5 by-nc-sa