Interpolazione in GRASS GIS. Ricavare un modello digitale del terreno a partire da curve di livello e punti quotati. Esercitazione. Lezioni 17-18-19 e 24/01/2012.
1. Universita` degli Studi della Basilicata
Dipartimento di Ingegneria e Fisica dell'Ambiente (DIFA)
Interpolazione spaziale
Ing. Margherita Di Leo
2. Introduzione
● L'interpolazione spaziale serve per stimare il valore ignoto
di una data variabile in un certo punto utilizzando i valori
che tale variabile assume nei punti circostanti.
● Esempi:
* Ricostruzione della mappa delle precipitazioni a partire
dai dati raccolti dalla rete pluviometrica;
* Mappa delle temperature a partire dalle registrazioni
delle stazioni;
* Costruzione di un DTM a partire da curve di livello e
punti quotati;
* Resampling di un DEM;
* .. numerosi altri esempi!
3. I metodi
Esistono numerosi metodi per l'interpolazione in
ambiente GIS. I piu` comuni sono i seguenti:
● Diagramma di Voronoi;
● Triangulated Irregular Network (TIN);
● Inverse Distance Weighted (IDW);
● Kriging;
● Regularized Spline with Tension (RST);
● Per le curve di livello: r.surf.contour.
4. Diagramma di Voronoi
Dato un insieme finito di punti S, il diagramma di Voronoi
per S è la partizione del piano che associa una regione
V(p) ad ogni punto in modo tale che tutti i punti di V(p)
siano più vicini a p che ad ogni altro punto in S.
Figura Mitas, L., Mitasova, H. 1998
5. Diagramma di Voronoi
In GRASS, il diagramma di Voronoi si ottiene utilizzando il
comando v.voronoi, che prende in input una mappa
vettoriale di punti.
Figura dal manuale di GRASS
6. Triangulated Irregular Network
Il TIN è una struttura dati vettoriale basata su triangoli con
maglia irregolare, che ha il vantaggio di fornire elevata
risoluzione dove necessario.
I triangoli vengono
generati unendo i punti
in una rete di maglie
triangolari che
soddisfano il criterio di
Delaunay: un cerchio
disegnato per i tre punti
di un triangolo non
deve contenere altri
punti.
Figura Mitas, L., Mitasova, H. 1998
8. Triangulated Irregular Network
Il principale svantaggio della triangolazione cosi` ottenuta
e` che la superficie non si presenta “liscia”.
In GRASS storicamente non si lavora molto con i TIN,
anche perche` ci sono tools di interpolazione che
forniscono risultati di gran lunga piu` soddisfacenti, come
vedremo di seguito.
E` comunque possibile costruire TIN in GRASS,
importando i nodi x,y,z con il comando v.in.ascii e
utilizzando una nuova versione di v.delaunay (Martin
Pavlovsky, 2008) che permette di creare una
triangolazione di Delaunay e di gestire i triangoli come
“faces” (superfici tridimensionali).
9. Inverse Distance Weighted
I valori vengono interpolati secondo il principio
che l'influenza di un punto su un altro ignoto che
desideriamo stimare, decresce con il quadrato
della distanza.
Figura Mitas, L., Mitasova, H. 1998
10. Inverse Distance Weighted
● Anche questo metodo ha alcuni svantaggi: la
qualita` del risultato puo` risultare insoddisfacente
se il la distribuzione dei punti e` irregolare.
● Inoltre, i massimi e i minimi corrispondono
sempre ai punti campionati, e questo si manifesta
con picchi ed avvallamenti innaturali nel risultato
finale.
● In GRASS sono disponibili: v.surf.idw, r.surf.idw
e r.surf.idw2 (output floating point).
11. Kriging
● Il Kriging, o processo gaussiano, effettua la regressione
minimizzando lo scarto quadratico medio.La regressione si
basa sull'autocorrelazione della grandezza, cioè l’assunto che la
grandezza in oggetto vari nello spazio con continuità; ovvero le
cose più vicine sono più simili rispetto alle cose più lontane
(Legge di Tobler).
● Il valore incognito in un punto viene calcolato con una media
pesata dei valori noti.
● I pesi che vengono dati alle misure note dipendono dalla relazione
spaziale tra i valori misurati nell'intorno del punto incognito. Per
calcolare i pesi si usa il semivariogramma, un grafico che mette
in relazione la distanza tra due punti e il valore di semivarianza tra
le misure effettuate in questi due punti. Il semivariogramma
espone, sia in maniera qualitativa che quantitativa, il grado di
dipendenza spaziale, ovvero l’autocorrelazione.
12. Kriging
● In GRASS, il modulo per effettuare il kriging e` v.krige.
● Poiche` richiama alcune funzioni dal software R, occorre
compilare GRASS con supporto di R.
Figura Mitas, L., Mitasova, H. 1998
13. Regularized Spline Tension
● Questo metodo utilizza una funzione spline per approssimare la
forma del terreno.
● Il comando di GRASS e` v.surf.rst.
Figura Mitas, L., Mitasova, H. 1998
14. Regularized Spline Tension
● La funzione interpolante ottenuta con la
interpolazione spline è più liscia di quelle
ottenute con altri metodi.
● La funzione richiede due parametri un
parametro di “tension”, che regola la “rigidezza”
della funzione, e uno di “smooth”, che regola la
“levigatezza” della superficie interpolante.
15. Regularized Spline Tension
● Possiamo pensare alla superficie spline come
ad un foglio di gomma, che si adagia sui punti di
elevazione nota.
● Il parametro “tension” non rappresenta altro
che la “rigidezza” della gomma.
● Il parametro “smooth” determina la tendenza
della superficie a passare per i punti
campionati. Per smooth=0 la superficie passa
per tutti i punti campionati.
18. Curve di livello
● Il modulo r.surf.contour e` pensato specificamente
per produrre un DEM a partire dalle curve di livello.
Figura: a sinistra un DEM ottenuto con r.surf.contour a partire da punti LiDAR
(elev_lid792_bepts), a destra lo stesso ottenuto con v.surf.rst (Bowman, H., 2010).
19. Applicazione
Confrontiamo diversi metodi per
l'interpolazione di punti LiDAR.
Utilizziamo il North Carolina dataset.
20. Applicazione
● Visualizziamo la
mappa vettoriale:
elev_lid792_cont1m.
● Impostiamo la regione
computazionale
rispetto a tale mappa:
g.region
vect=elev_lid792_con
t1m
● Impostiamo la
risoluzione di cella a
un metro:
g.region res=1 -ap
21. Applicazione
● Alcuni moduli che
useremo
richiedono la
mappa delle curve
di livello in formato
raster, quindi
effettuiamo la
trasformazione da
vettoriale a raster
con il comando
v.to.rast.
26. r.surf.idw
Utilizziamo prima 12
punti di
interpolazione piu`
vicini aventi peso
maggiore.
Poi faremo un altro
esperimento
aumentando il
numero di punti e
confrontando i
risultati.
31. r.surf.idw
Figura: a sinistra DEM ottenuto con 12 punti di interpolazione piu` vicini aventi peso
maggiore, a destra DEM ottenuto con 250 punti (Bowman, H., 2010).
32. r.surf.idw
Un inconveniente
e` rappresentato
dal fatto che il
comando
produce un
output in formato
intero.
● Vediamo cosa
dice r.info.
33. r.surf.idw
Un inconveniente
e` rappresentato
dal fatto che il
comando
produce un
output in formato
intero.
● Vediamo cosa
dice r.info.
34. r.surf.idw
Un inconveniente
e` rappresentato
dal fatto che il
comando
produce un
output in formato
intero.
● Vediamo cosa
dice r.info.
35. r.surf.idw
A tale inconveniente si puo` ovviare con un
escamotage:
r.mapcalc "curvedilivello.100k = curvedilivello *
100000"
r.surf.idw in=curvedilivello.100k
out=dem_idw_np250.100k npoints=250
r.mapcalc "dem_idw_np250 = dem_idw_np250.100k /
100000.0"
g.remove dem_idw_np250.100k
36. r.surf.idw
A tale inconveniente si puo` ovviare con un
escamotage:
r.mapcalc "curvedilivello.100k = curvedilivello *
100000"
r.surf.idw in=curvedilivello.100k
out=dem_idw_np250.100k npoints=250
Da notare il punto decimale
r.mapcalc "dem_idw_np250 = dem_idw_np250.100k /
100000.0"
g.remove dem_idw_np250.100k
37. v.surf.rst
● Ricaviamo ora il
DEM con
v.surf.rst.
● Usiamo come
base la mappa
vettoriale
elev_lid792_co
nt1m.
● Diamo
un'occhiata alla
tabella degli
attributi.
42. r.surf.contour
Per interpolare le
curve di livello si
puo` usare
r.surf.contour.
Anche questo
comando
produce un
output intero,
quindi si puo`
adottare lo
stesso
escamotage gia`
visto.
44. Valutare il risultato
● Tutti i metodi di interpolazione hanno vantaggi e
svantaggi, non esiste un metodo perfetto.
Come scegliamo il metodo migliore?
● Il metodo migliore e` quello che si adatta meglio ai dati
che abbiamo a disposizione.
● Osservare i dati campionati, valutare la loro densita` e
distribuzione spaziale.
● Applicare il metodo piu` appropriato per il set di dati e
per l'obbiettivo del lavoro.
● Valutare diversi risultati ottenuti applicando diversi
metodi e scegliere il migliore (presenza di artefatti).
45. Valutare il risultato
Per valutare i risultati e confrontare i vari metodi, e per
impostare correttamente gli eventuali parametri
richiesti dal metodo di interpolazione prescelto, in
GRASS possiamo avvalerci di:
● Visualizzazione tridimensionale;
● Osservare la mappa della pendenza (r.slope.aspect)
e della curvatura (r.param.scale) per evincere
eventuali artefatti;
● Visualizzare la mappa ombreggiata dei rilievi
(r.shaded.relief).
49. Curvatura
● Nel tab “Optional”
selezioniamo il parametro
che vogliamo calcolare:
profc (profile curvature).
● E` la curvatura che
interseca il piano definito
dall'asse Z e la direzione
di massima pendenza.
● I valori positivi indicano un
profilo convesso, mentre i
valori negativi descrivono
un profilo di curvatura
concavo.
54. Esercitazione
A partire dalle curve di livello e dai punti quotati digitalizzati,
costruiamo un modello digitale del terreno.
I passi sono i seguenti:
● Importare i vettoriali di curve di livello e punti quotati
(v.in.ogr);
● Impostare la regione di lavoro (g.region);
● Trasformare le curve di livello in raster (v.to.rast), poi in punti
vettoriali (r.to.vect);
● Costruiamo una mappa con le informazioni derivanti dalle
curve di livello e punti quotati usando v.patch;
● Interpolazione usando v.surf.rst (tension=40, smooth=0.1
come valori di tentativo, poi valutare il risultato).
55. Esercitazione
Dal modello digitale del terreno, estraiamo il reticolo e il bacino
idrografico. I passi sono i seguenti:
● Ricaviamo mappa delle direzioni di drenaggio, densita` di drenaggio e
reticolo raster, fissando una soglia (r.watershed);
● Confronto del reticolo ottenuto con i fiumi digitalizzati e regolazione della
soglia, ripetere dallo step precedente;
● Una volta trovata la soglia, trasformiamo il reticolo da raster a vettoriale
(r.thin + r.to.vect);
● Individuazione delle coordinate della sezione di chiusura sul reticolo di
calcolo;
● Estrazione del bacino, date le coordinate della sezione di chiusura, con
r.water.outlet.
● Trasformazione del bacino in vettoriale r.to.vect e calcolo dell'area e
perimetro (v.db.addcol + v.to.db).
56. v.patch
● Il comando v.patch permette di combinare due o piu`
mappe vettoriali in un'unica mappa.
● Se la struttura della tabella degli attributi e` identica, gli
attributi vengono trasferiti nella nuova tabella.