GRASS GIS: Il Motore Scientifico Open Source per l'Analisi Spaziale
Nato nel 1982 per conto dell'esercito statunitense e oggi pilastro della fondazione OSGeo, GRASS non è un semplice visualizzatore di mappe. È un potentissimo motore di calcolo scientifico per dati raster, vettoriali e d'immagine.
Il vero punto di forza di GRASS è la sua architettura scientifica. A differenza di altri software focalizzati sulla cartografia e sulla veste grafica, GRASS nasce per l'elaborazione rigorosa dei dati.
I suoi superpoteri:
- Analisi Raster Avanzata: Eccelle nell'idrologia (delimitazione di bacini idrografici, flussi d'acqua), nell'analisi dei modelli digitali del terreno (DEM) e nella geomorfologia.
- Topologia Vettoriale Reale: GRASS gestisce i vettori in modo rigorosamente topologico. Se due poligoni confinano, condividono la stessa linea di confine, azzerando errori di sovrapposizione o "buchi" geometrici.
- Telerilevamento (Remote Sensing): Include strumenti nativi per elaborare immagini satellitari (Landsat, Sentinel) e dati LiDAR.
- Pronto per l'Automazione: Ogni comando GRASS è eseguibile da riga di comando o tramite Python. È il motore perfetto per l'elaborazione massiva di dati (batch processing).
Quando usarlo?
Scegli GRASS quando devi fare analisi spaziale complessa, modellazione ambientale o quando i software GIS tradizionali rallentano a causa della mole di dati (Big Data geospaziali).
Nel mondo aziendale e accademico, il principale rivale commerciale è Esri ArcGIS Pro. Vediamo come si comportano a confronto:
| Caratteristica | GRASS GIS | ArcGIS Pro (Proprietario) |
|---|---|---|
| Costo | Gratis, Open Source (Licenza GPL) | Licenze commerciali costose (migliaia di €/anno) |
| Gestione Dati | Database interno rigoroso (Location/Mapset) | File Geodatabase flessibile ma proprietario |
| Analisi 3D e Raster | Strumenti nativi potentissimi, inclusi nel core | Richiede estensioni a pagamento (es. Spatial Analyst) |
| Interfaccia Utente | Funzionale, ma richiede una curva di apprendimento | Moderna, in stile Microsoft Office, molto intuitiva |
| Automazione | Integrazione Python nativa e snella | ArcPy e ModelBuilder (molto potenti ma vincolati) |
Il verdetto: ArcGIS Pro vince sulla facilità d'uso e sulla produzione di mappe pronte per la stampa. GRASS GIS stravince sulla potenza di calcolo pura, sulla trasparenza degli algoritmi (puoi leggere il codice sorgente di ogni singola funzione) e, ovviamente, sull'abbattimento totale dei costi di licenza.
---
Installazione
GRASS è multipiattaforma. Ecco come averlo sul tuo computer in pochi minuti:
Scarica l'installer: Windows, Mac o Linux.
Vai sul sito ufficiale grass.osgeo.org e accedi alla sezione Download.
Procedi su Windows: Consigliato: OSGeo4W.
Se sei su Windows, scarica l'installer standalone oppure usa OSGeo4W. Quest'ultimo è un gestore che installa GRASS, QGIS e tutte le librerie necessarie in un colpo solo, garantendo la massima compatibilità.
Procedi su Mac/Linux: Via Package Manager.
Su Mac puoi usare l'installer
.dmgo Homebrew (brew install grass). Su Linux (Ubuntu/Debian) basta un comando da terminale:sudo apt install grass.
---
Piccolo Manuale d'Uso: I Tuoi Primi Passi
La prima volta che apri GRASS potresti rimanere spiazzato: la gestione dei progetti è diversa da qualsiasi altro software. GRASS organizza tutto in una struttura gerarchica rigida per proteggere l'integrità dei dati geografici.
1. Capire la struttura (La "Database Structure")
Prima di importare un dato, devi definire il tuo spazio di lavoro:
- GRASS Database (directory): Una cartella sul tuo PC dove GRASS salverà tutto.
- Location: Il tuo progetto principale. Tutti i dati dentro una Location devono avere lo stesso sistema di riferimento geografico (es. EPSG:32632).
- Mapset: Sotto-cartelle dentro la Location. Utili per dividere il lavoro per utenti o per sessioni (il mapset di default si chiama
PERMANENT).
2. L'Interfaccia Grafica (GUI)
All'avvio si apriranno due finestre principali:
- La finestra di Controllo dei Livelli: Dove gestisci i layer (raster, vettori), i Mapset e dove cerchi i comandi.
- La finestra di Visualizzazione della Mappa: Dove vedi effettivamente i tuoi dati geografici.
3. I Comandi Chiave (La "Grammatica" di GRASS)
I comandi di GRASS hanno tutti un prefisso logico che ti permette di capire subito cosa fanno:
g.*= Comandi generali (es.g.regionper impostare l'area di calcolo).r.*= Comandi per i dati Raster (es.r.slope.aspectper calcolare pendenza ed esposizione).v.*= Comandi per i dati Vettoriali (es.v.bufferper creare aree di rispetto).i.*= Comandi per l'elaborazione di immagini satellitari.
Regola d'oro di GRASS: Prima di lanciare qualsiasi comando raster, definisci la tua Regione di calcolo con il comando
g.region. GRASS elaborerà i dati solo all'interno di questa estensione geometrica e alla risoluzione da te impostata, risparmiando tempo e memoria.
GRASS GIS richiede un piccolo sforzo iniziale per digerire la sua logica rigida ("Location" e "Mapset"), ma ripaga ampiamente questo investimento. È uno strumento da scienziati: preciso, leggero, incredibilmente veloce ed estremamente flessibile grazie all'integrazione con Python. Se il tuo obiettivo è fare analisi spaziale seria senza spendere un patrimonio in licenze, GRASS merita assolutamente un posto nel tuo flusso di lavoro.
---
Automatizzare GRASS con Python: Script per il Calcolo della Pendenza
Per far girare questo script, puoi aprirlo direttamente dall'interfaccia grafica di GRASS andando su File > Sotto-finestra Python, oppure salvarlo come file .py e lanciarlo dal terminale di GRASS.
Utilizzeremo la libreria nativa grass.script, che funge da ponte tra Python e il motore di calcolo del software.
#!/usr/bin/env python3# -*- coding: utf-8 -*-
import osimport grass.script as gs
def elabora_e_esporta_pendenza(nome_dem, prefisso_output, cartella_destinazione): """ Automatizza il calcolo di pendenza e esposizione da un DEM e esporta i risultati direttamente in formato GeoTIFF. """ print(f"--- Inizio elaborazione per: {nome_dem} ---")
# 0. Assicuriamoci che la cartella di destinazione esista sul PC if not os.path.exists(cartella_destinazione): os.makedirs(cartella_destinazione) print(f"Cartella creata: {cartella_destinazione}")
# 1. Controllo presenza del file DEM nel Mapset corrente lista_raster = gs.list_pairs(type='raster') nomi_raster = [mappa[0] for mappa in lista_raster]
if nome_dem not in nomi_raster: print(f"Errore: Il raster '{nome_dem}' non è stato trovato.") return
# 2. Impostazione della regione di calcolo sul DEM di input print("Impostazione della regione di calcolo...") gs.run_command('g.region', raster=nome_dem)
# Definizione dei nomi dei layer interni a GRASS mappa_pendenza = f"{prefisso_output}_pendenza" mappa_esposizione = f"{prefisso_output}_esposizione"
# 3. Calcolo di pendenza (Slope) ed esposizione (Aspect) print("Calcolo della pendenza e dell'esposizione in corso...") gs.run_command('r.slope.aspect', elevation=nome_dem, slope=mappa_pendenza, aspect=mappa_esposizione, format='degrees', overwrite=True)
# 4. ESPORTAZIONE IN GEOTIFF VIA R.OUT.GDAL # Definiamo i percorsi completi dei file di output sul PC path_tiff_pendenza = os.path.join(cartella_destinazione, f"{mappa_pendenza}.tif") path_tiff_esposizione = os.path.join(cartella_destinazione, f"{mappa_esposizione}.tif")
print("\nEsportazione dei file in formato GeoTIFF...")
# Esportazione raster pendenza gs.run_command('r.out.gdal', input=mappa_pendenza, output=path_tiff_pendenza, format='GTiff', nodata=-9999, # Definisce il valore per i pixel vuoti overwrite=True) print(f"Esportato: {path_tiff_pendenza}")
# Esportazione raster esposizione gs.run_command('r.out.gdal', input=mappa_esposizione, output=path_tiff_esposizione, format='GTiff', nodata=-9999, overwrite=True) print(f"Esportato: {path_tiff_esposizione}")
print("\n--- Processo completato con successo! ---")
# --- ESECUZIONE DELLO SCRIPT ---if __name__ == "__main__": # Parametri di configurazione nome_input_dem = 'il_mio_dem' prefisso_file_uscita = 'analisi_territorio' # Inserisci il percorso della cartella sul tuo PC dove vuoi salvare i GeoTIFF # NOTA: Usa lo slash su Mac/Linux o il doppio backslash \\ su Windows (es. "C:\\Utenti\\Nome\\Desktop\\Output") cartella_output_pc = "./output_geotiff" elabora_e_esporta_pendenza(nome_input_dem, prefisso_file_uscita, cartella_output_pc)
Ecco i 3 concetti chiave:
gs.run_command(): È la funzione principale per eseguire i moduli di GRASS. I parametri del comando diventano semplicemente argomenti di Python (es.elevation=nome_dem).g.regionintegrato: Automatizzare la regione di calcolo tramite script evita l'errore tipico dei principianti, ovvero calcolare la pendenza su un'area diversa da quella del file di input, generando file vuoti o pixel disallineati.gs.read_command(): A differenza dirun_command(che esegue e basta), questa funzione cattura l'output testuale dell'algoritmo (in questo casor.univar, che calcola media, minimo, massimo e deviazione standard) e lo restituisce direttamente nella console di Python.
Con un ciclo for, questo identico script potrebbe elaborare centinaia di DEM regionali in automatico mentre ti prendi un caffè.