Universit` a degli Studi dell’Aquila Corso di Laurea in Ingegneria Informatica e Automatica Progetto di Base di Dati II
Georeferenziazione con QuantumGIS e inserimento in un DB spaziale PostgreSQL/PostGIS di dati raster
Studenti: Luca Finocchio 216082 Vittoriano Muttillo 214248 Daniele Leombruni 226788
Anno Accademico 2012-2013
Indice
Introduzione
3
1 Dati raster
4
2 Georeferenziare mappe topografiche digitali e/o immagini raster 12
con QuantumGIS 3 Caricare dati raster in PostgreSQL/PostGIS
27
3.1
Usare funzioni raster di PostGIS . . . . . . . . . . . . . . . . . . . . . 27
3.2
Usare il comando raster2pgsql . . . . . . . . . . . . . . . . . . . . . . 30
Bibliografia
37
2
Introduzione
Nel campo dei Sistemi informativi territoriali o GIS [10], il termine raster `e usato per indicare la tipologia di dato impiegata nella rappresentazione cartografica digitale. Con i dati raster [11] il territorio viene riprodotto attraverso una matrice di pixel di forma quadrata o rettangolare. A ciascun pixel `e associato un attributo che definisce le caratteristiche dell’elemento rappresentato. Ad esempio, in un modello digitale di elevazione, a ciascun pixel `e associato il valore della quota sul livello del mare in quel punto. I dati raster possono essere implementati in un sistema GIS mediante acquisizione diretta con apparecchiature a lettura ottica quali ad esempio scanner d’immagini o attraverso l’elaborazione di dati, raster o vettoriali, gi`a acquisiti. La dimensione dei pixel `e inversamente proporzionale alla precisione della carta. Un problema rilevante nell’uso di dati raster `e la velocit`a di elaborazione e di catalogazione dei dati stessi: pi` u le immagini raster sono accurate e dettagliate, pi` u `e costoso, in termini di tempi, elaborarli e visualizzarli in un calcolatore. Questo dipende dalla dimensione dei pixel utilizzati e,quindi, dal formato e dalle tecniche di compressione utilizzate. Nella nostra disamina abbiamo deciso, cos`ı, di approfondire il problema di georeferenziare immagini raster acquisite da satelliti, foto aeree oppure mappe digitalizzate sfruttando il software open source QuantumGIS [8], e come sia possibile salvare tali dati in un database spaziale contenente tipi di dato raster, nello specifico abbiamo utilizzato PostgreSQL/PostGIS [7] [6].
3
Capitolo
1
Dati raster Nella sua forma pi` u semplice, un raster [11] `e costituito da una matrice di celle (o pixel) organizzate in righe e colonne (o una griglia) in cui ogni cella contiene un valore che rappresenta un’informazioni, come la temperatura. Dati raster sono fotografie digitali aeree, immagini da satellite, immagini digitali o mappe digitalizzate.
Figura 1.1: Esempio di immagine raster. La struttura dei dati raster `e estremamente utile per un’ampia gamma di applicazioni. All’interno di un GIS [10], l’uso di dati raster rientra, infatti, in quattro categorie principali:
4
Capitolo 1 • Raster come mappe di base: un utilizzo comune dei dati raster in un GIS `e quello di display di sfondo per altri dati visualizzati. Ad esempio, foto visualizzate sotto altre mappe (ad esempio mappe vettoriali) forniscono all’utente una visualizzazione grafica completa che garantisce la sicurezza che i livelli della mappa sono spazialmente allineati e rappresentano oggetti reali. Tre sono le principali fonti di mappe di base: fotografie aeree, immagini satellitari e mappe digitalizzate, come detto in precedenza.
Figura 1.2: Raster usato come mappa di base per i dati stradali. • Raster come mappe superficiali: i raster sono adatti per rappresentare dati che cambiano continuamente in un paesaggio (su una superficie). Valori di elevazione misurati dalla superficie della terra sono la pi` u comune applicazione di mappe superficiali, ma altri valori, come la pioggia, la temperatura, la concentrazione e la densit`a della popolazione, possono anche definire le superfici che possono essere spazialmente analizzate.
5
Capitolo 1
Figura 1.3: Raster che mostra l’elevazione di un territorio utilizzando il verde per mostrare una minore elevazione e zone rosse, rosa e bianche per mostrare una maggiore elevazione. • Raster come mappe tematiche: sono raster che rappresentano dati tematici che possono essere derivati dall’analisi di altri dati. Un’applicazione comune di questi raster `e classificare un’immagine satellitare per categorie di copertura del suolo. In sostanza, si raggruppano i valori dei dati in classi (come il tipo di vegetazione) e si assegna un valore ad ogni categoria. Carte tematiche possono anche essere derivate da operazioni di geoprocessing che combinano i dati provenienti da varie fonti, come vettoriale, raster e dati del terreno.
Figura 1.4: Esempio di raster come mappa tematica che mostra l’uso del territorio.
6
Capitolo 1 • Raster come attributi di un elemento: i raster possono essere fotografie, documenti o disegni digitalizzati relativi a un oggetto geografico o una posizione. Ad esempio un raster che rappresenta delle aperture rupestri pu`o avere delle immagini raster che visualizzano le aperture della grotta, associate alle caratteristiche di un determinato punto del raster stesso.
Figura 1.5: Foto digitale di un albero che potrebbe essere utilizzata come attributo di un punto in un raster che visualizza un paesaggio dal satellite (molto usato da google maps).
I vantaggi di archiviare dei dati come raster sono quelli di avere: • una semplice struttura dati: una matrice di celle di valori che rappresentano una coordinata e talvolta collegata ad una tabella di attributi; • un formato potente per l’analisi spaziale e statistica avanzata; • la capacit`a di rappresentare superfici continue e eseguire analisi superficiale; • la possibilit`a di memorizzare in maniera uniforme punti, linee, poligoni e superfici; • la possibilit`a di eseguire sovrapposizioni veloci con set di dati complessi;
7
Capitolo 1 Ci sono altre considerazioni sull’archiviare dei dati come raster che possono portare l’utente finale ad utilizzare l’opzione di archiviazione basato su vettori. Ad esempio ci possono essere inesattezze spaziali a causa dei limiti imposti dalle dimensioni delle celle del set di dati raster. I raster sono potenzialmente un insieme molto grande di dati. La risoluzione aumenta quando la dimensione delle cellule diminuisce. Tuttavia, normalmente, il costo sia in termini di utilizzo di spazio su disco che di velocit`a di elaborazione aumenta considerevolmente. Per una data area, ad esempio, cambiare la dimensione delle celle della met`a richiede fino a quattro volte lo spazio di memoria, a seconda del tipo di dati e delle tecniche di archiviazione utilizzate. Nei raster ogni cella (pixel) ha un valore. I valori delle celle possono essere una categoria, una grandezza, un’altezza o un valore spettrale. Una categoria potrebbe essere una classe per l’uso del suolo, come l’insieme dei pascoli, delle foreste o delle strade. Una grandezza pu`o essere la gravit`a, l’inquinamento acustico o la pioggia caduta. Un’altezza potrebbe essere l’elevazione di un’area sopra il livello del mare, che pu`o essere utilizzata per ricavare la pendenza, l’aspetto o altre propriet`a di quell’area. I valori spettrali sono usati in immagini satellitari e fotografie aeree per rappresentare la riflessione della luce e del colore.
Figura 1.6: Diversi tipi di rappresentazione raster.
8
Capitolo 1 I valori delle celle possono essere sia positivi che negativi, interi o in virgola mobile. I valori interi sono i pi` u utilizzati per rappresentare i dati categorici (discreti) e valori a virgola mobile per rappresentare superfici continue (la pioggia per esempio). Alcune celle possono anche avere un valore NoData per rappresentare l’assenza dei dati.
Figura 1.7: I raster sono memorizzati come un elenco ordinato di valori delle celle. L’area (o la superficie) rappresentata da ogni singola cella `e costituita dalla stessa larghezza e altezza ed `e una porzione uguale di tutta la superficie rappresentata dalla raster. Ad esempio, un raster che rappresenta l’elevazione (cio`e il modello digitale di elevazione DEM) pu`o coprire una superficie di 100 chilometri quadrati. Se il raster fosse costituito da 100 celle (pixel), ogni cella rappresenterebbe un chilometro quadrato di uguale larghezza e altezza (cio`e 1 km x 1 km).
Figura 1.8: Singola cella (o pixel) di un raster. La dimensione della cella pu`o essere grande o piccola a seconda delle necessit`a di avere rappresentazioni accurate della superficie oppure no. La dimensione della cella determina il modo grossolano o fine le caratteristiche del raster. Pi` u piccola `e la dimensione della cella, pi` u liscia o pi` u dettagliata sar`a l’immagine raster. Tuttavia, 9
Capitolo 1 maggiore `e il numero di celle, maggiore sar`a il tempo necessario per l’elaborazione e la domanda di spazio di archiviazione sul calcolatore. Se la dimensione di una cella `e troppo grande, le informazioni possono essere perse. Ad esempio, se la dimensione della cella `e maggiore della larghezza di una strada, la strada non pu`o esistere all’interno del set di dati raster.
Figura 1.9: Immagine in cui si pu`o vedere come un poligono semplice viene rappresentato da un set di dati raster a diverse dimensioni di celle. La posizione di ogni cella `e definito dalla riga o colonna in cui `e ubicata all’interno della matrice raster. Essenzialmente, la matrice `e rappresentata in un sistema di coordinate cartesiane, in cui le righe della matrice sono parallele all’asse x e le colonne all’asse y del piano cartesiano. Valori di riga e di colonna iniziano con 0.
10
Capitolo 1
Figura 1.10: Se la griglia `e proiettata in un sistema di coordinate UTM (Universal Transverse Mercator) e ha una dimensione di cella di 100, la posizione della cella (5,1) sarebbe (300.500 Est, 5.900.600 Nord). In base a quale sistema di riferimento ci si riferisce, quindi, si pu`o georeferenziare un immagine raster in modo differente. La scelta dei punti da considerare, quindi, definisce la posizione geografica in quel sistema di riferimento (UTM come WGS84). Spesso, infine, `e necessario specificare l’estensione di un raster. La misura `e definita dal lato superiore, inferiore, sinistro e destro delle coordinate della zona rettangolare coperta dal raster, come illustrato nella Figura 1.11.
Figura 1.11: Estensione di un raster. Per ulteriori informazioni sui dati raster consultare [2] [1].
11
Capitolo
2
Georeferenziare mappe topografiche digitali e/o immagini raster con QuantumGIS Con QuantumGIS (abbreviato con QGIS [8]) `e anche possibile georeferenziare mappe topografiche e/o immagini raster acquisite da satelliti o altro. Nella nostra esperienza abbiamo optato, per pura didattica, a georeferenziare mappe topografiche offerte gratuitamente dalla regione Lazio in formato pdf trasformandole in immagini raster e seguendo i passi descritti di seguito (al fine di trasformare i file pdf in immagini raster da poter georeferenziare abbiamo utilizzato il software Ginp, che `e possibile reperire sul web ed installare gratuitamente). Le fasi di lavoro in cui `e suddivisa l’esperienza saranno descritte nelle pagine successive.
12
Capitolo 2 1. Scaricare gli elaborati (Figura 2.1) del Piano Territoriale Paesistico Regionale (PTPR) dal sito [9] dalla sezione Tavola A in formato pdf, che contengono le mappe topografiche della regione Lazio da noi utilizzate.
Figura 2.1: File pdf Tav 24 374 A novembre 2007.pdf che rappresenta la mappa topografica della zona di Roma
13
Capitolo 2 2. Scaricare dal sito [3] il file serie 25 wgs84 geo.zip (Figura 2.2), contenente tutti i quadri d’unione della cartografia IGM che rappresentano una divisione dell’Italia in zone topografiche identificate da un identificativo univoco e sono usati per creare mappe geografiche secondo uno standard predefinito.
Figura 2.2: Tutti i file presenti in serie 25 wgs84 geo.zip 3. Avviare il software GIMP e aprire il file pdf impostando la risoluzione a 250,000 (Figura 2.3).
Figura 2.3: nterfaccia di GIMP. Selezionare il file pdf che vogliamo trasformare(Passo 1), cliccare su apri (Passo 2), impostare la risoluzione a 250,000 (Passo 3) e cliccare su Importa (Passo 4)
14
Capitolo 2 4. Selezionare solo l’area di interessa della mappa (per eliminare il bordo) e cliccare con il tasto destro su Immagine -> Ritaglia alla selezione (Figura 2.4).
Figura 2.4: Eliminare il bordo della mappa usando gli strumenti offerti da GIMP 5. Salvare il file in formato .tiff ed uscire da GIMP (Figura 2.5).
Figura 2.5: Immettere il nome del file di output, scegliere il formato TIFF e il path di uscita e salvare il tutto
15
Capitolo 2 6. Aprire QGIS e importare lo shapefile serie 25 wgs84 geo.shp (Figura 2.6) scaricato in precedenza.
Figura 2.6: Visuallizzazione grafica con QGIS del file serie 25 wgs84 geo.shp 7. Andare su Vettore -> Strumenti di geometria -> Estrai vertici, scegliere il vettore serie 25 wgs84 geo, il nome e il path di output e premere OK (Figura 2.7).
Figura 2.7: Usare lo strumento di QGIS Estrai vertici.
16
Capitolo 2 8. Sar`a creato un vettore di punti che contengono le coordinate di ogni mappa topografica scaricata con un numero identificativo univoco (ad esempio la mappa Tav 24 374 A novembre 2007.pdf che rappresenta la zona di Roma ha come numero identificativo 374) (Figura 2.8).
Figura 2.8: Mappa delle coordinate dei vari quadri d’unione di tutta l’italia (solo i vertici estratti con la funzione di QGIS Estrai vertici).
17
Capitolo 2 9. Cliccare con il tasto destro sul vettore, scegliere interrogazione e nella finestra immettere ”SHEET” LIKE ’Numero identificativo mappa%’ (nel nostro caso digitare ”SHEET” LIKE ’374%’ ) (Figura 2.9).
Figura 2.9: Selezioniamo solo l’area di interesse (l’area che corrisponde alla locazione geografica della nostra mappa topografica, nel nostro caso zona 374). 10. Verr`a visualizzato un rettangolo di punti che rappresentano le posizioni geografiche dell’area della nostra mappa (Figura 2.10).
Figura 2.10: Rettangolo di punti che rappresentano la zona in cui `e collocata la nostra mappa (in questo caso la zona 374).
18
Capitolo 2 11. A questo punto andare in Raster -> Georeferenziatore e aprire il file tiff creato in precedenza (Figura 2.11).
Figura 2.11: Aprire il file Tav 24 374 A novembre 2007.tiff nello strumento Georeferenziatore di QGIS. 12. Usando lo zoom (Figura 2.12) collocarsi su uno dei 4 vertici della mappa topografica, che rappresentano i 4 vertici pi` u esterni presi in considerazione nel quadro d’unione, e cliccare su aggiungi punto GCP, cliccare sul tasto Dalla mappa (Figura 2.13) e, nel rettangolo dei punti del nostro quadro d’unione, cliccare sul vertice considerato (Figura 2.14) (Figura 2.15).
Figura 2.12: Passo 1: cliccare sul tasto zoom.
19
Capitolo 2
Figura 2.13: Passo 2: selezionare il punto di interesse ingrandito, cliccare sul tasto aggiungi punto GCP e sul punto di interesse. Nella finestra che si apre cliccare sul tasto Dalla mappa.
Figura 2.14: Passo 3: Selezionare, dai punti del vettore del quadro d’unione corrispondente alla nostra mappa, il vertice corretto.
20
Capitolo 2
Figura 2.15: Passo 4: QGIS aggiunge le coordinate del nostro punto selezionato. Cliccare su OK e iterare l’inserimento dei punti per tutti e 4 i vertici della mappa. 13. E’ possibile sia caricare i punti manualmente (procedimento molto lungo da realizzare) oppure caricare un file di punti GCP, se si ha a disposizione tale file. In questo caso andare su File -> Carica punti GCP, selezionare il file e aprirlo (il file `e in formato .points) (Figura 2.14).
Figura 2.16: Caricare un file GCP per georeferenziare la mappa su QGIS.
21
Capitolo 2 14. E’ possibile anche non usare il file dei quadri d’unione (che comunque ci vincola ad usare al pi` u 4 punti rappresentati dai vertici della mappa da georeferenziare e comunque il risultato non `e molto preciso poich´e consideriamo pochi GCP) ma usare la mappa di google, aggiungendo un GCP con le coordinate del punto, cliccando sul tasto Dalla mappa (Figura 2.17) e cliccando, sulla mappa di google caricata, il punto che ci interessa (Figura 2.18) (si possono inserire le coordinate anche manualmente) (Figura 2.19 Figura 2.20).
Figura 2.17: Passo 1: posizionarsi sul punto in cui inserire un GCP (deve essere un punto univoco, ad esempio un incrocio, una fontana, un angolo etc). In questo caso abbiamo scelto un angolo di piazza San Pietro a Roma.
22
Capitolo 2
Figura 2.18: Passo 2: cliccare sul punto della mappa di google che corrisponde al nostro GCP, in questo caso sempre allo stesso angolo di piazza San Pietro a Roma.
Figura 2.19: Passo 3: QGIS inserisce le coordinate del nostro GCP (nel sistema di riferimento di google).
23
Capitolo 2
Figura 2.20: Passo 4: reiterare il procedimento per inserire altri GCP (inserirne un numero arbitrario).
15. Una volta finito di inserire i GCP premere il tasto verde di avvio. Dalla finestra che si apre scegliere trasformazione Polynomiale 1 (sono presenti anche altri tipi di trasformazioni), il path dove salvare il file GeoTiff e avviare la georeferenziazione (Figura 2.21).
Figura 2.21: Avviare la georeferenziazione.
24
Capitolo 2 16. Aprire il raster creato con qgis e verificare se la mappa `e stata georeferenziata correttamente sovrapponendo varie mappe diverse (ad esempio sovrapponendo la mappa di google maps al raster georeferenziato appena creato) (Figura 2.22, Figura 2.23 e Figura 2.24). Siccome le coordinate dei GCPs sono state inserite secondo il sistema di riferimento di google, sar`a probabilmente necessario riproiettare la mappa secondo il sistema di riferimento usato per tutti gli altri layer.
Figura 2.22: Mappa del piano territoriale paesistico regionale georeferenziata e aggiunta al nostro progetto.
25
Capitolo 2
Figura 2.23: Da questa immagine si pu`o notare come tale mappa copra esattamente il quadro d’unione numero 374.
Figura 2.24: La mappa georeferenziata si sovrappone in modo abbastanza corretto alla mappa di google(la mappa georeferenzioata `e stata resa trasparente al 40% per poter sovrapporre le due visualizzazioni). Seguendo i metodi presentati in questa sezione `e, quindi, possibile georeferenziare qualsiasi tipo di immagine raster che si ha a disposizione in modo molto semplice ma, al tempo stesso, con risultati molto soddisfacenti e professionali.
26
Capitolo
3
Caricare dati raster in PostgreSQL/PostGIS In PostgreSQL/PostGIS [7] [6] `e possibile creare dei database spaziali per accogliere dati raster georeferenziati (esiste nell’ultima versione un tipo di dato raster all’interno dei tipi di dato di PostgreSQL/PostGIS [5]). Due metodi sono utilizzati per inserire dati raster in un DB spaziale: • Usando funzioni raster di PostGIS; • Usando il comando raster2pgsql ; Nella nostra tesina di approfondimento abbiamo deciso di utilizzare il secondo metodo che risulta essere il pi` u semplice ed efficacie per caricare dati raster su DB spaziale ma presenteremo, comunque, per completezza, entrambi i metodi.
3.1
Usare funzioni raster di PostGIS
• Si crea una tabella nel database con una colonna di tipo raster attraverso il seguente codice: CREATE TABLE myRasterTable(rid serial primary key, rast raster);
27
Capitolo 3 • Si popola la tabella creando raster vuoti oppure raster da altri dati raster presenti nel DB. Di seguito i due metodi: – Creare raster vuoti: INSERT INTO myRasterTable(rid,rast) VALUES(1, ST_MakeEmptyRaster( 100, 100, 0.0005, 0.0005, 1, 1, 0, 0, 4326) );
– Creare raster da altri dati raster presenti nel DB: INSERT INTO myRasterTable(rid,rast) SELECT 2, ST_MakeEmptyRaster(rast) FROM myRasterTable WHERE rid = 1;
• Si pu`o anche creare un raster da una geometria esistente nel seguente modo: INSERT INTO myRasterTable(rid,rast) SELECT 1 AS rid, ST_AsRaster(( SELECT ST_Collect(geom) FROM myGeomTable ), 1000.0, 1000.0 ) AS rast;
• Per ottimizzare le prestazioni delle query per la tabella raster, si crea un indice spaziale per la colonna raster con il seguente codice SQL: CREATE INDEX myRasterTable_rast_st_convexhull_idx ON myRasterTable USING gist(ST_ConvexHull(rast));
• Si pu`o verificare, infine, l’effettivo inserimento dei raster visualizzando i metadati ad essi associati. Verranno, cos`ı, visualizzate in forma tabellare le informazioni sui metadati associati ai raster (Alla fine di questo paragrafo faremo vedere un esempio di esecuzione di questi comandi). Il comando SQL `e il seguente:
28
Capitolo 3 SELECT rid, (md).* FROM (SELECT rid, ST_MetaData(rast) AS md FROM myRasterTable WHERE rid IN(3,4)) AS foo;
Per ulteriori informazioni sull’utilizzo di funzioni raster con PostGIS vedere [5]. Infine `e proposto un esempio di esecuzione di queste query per la creazione di tabelle raster e dati raster con i codici SQL da noi utilizzati: /* creazione della tabella Raster_Prova nel DB Rainfall_measurement, per ulteriori informaizoni consultare il progetto "Piovosit` a" */ CREATE TABLE Raster_Prova(rid serial primary key, rast raster); /* Inserimenti di un raster vuoto */ INSERT INTO Raster_Prova(rid,rast) VALUES(1, ST_MakeEmptyRaster( 100, 100, 0.0005, 0.0005, 1, 1, 0, 0, 4326) ); /* Inserimento di un raster
a partire da un raster gia presente nel DB */
INSERT INTO Raster_Prova(rid,rast) SELECT 2, ST_MakeEmptyRaster(rast) FROM Raster_Prova WHERE rid = 1; /* Inserimento di un raster da una geometria esistente */ INSERT INTO Raster_Prova(rid,rast) SELECT 3 AS rid, ST_AsRaster(( SELECT ST_Collect(boundary) FROM region), /* tabella geometrica presente nel DB Rainfall_measurement */ 1000.0, 1000.0 ) AS rast; /* Creazione di un indice spaziale per la colonna raster */ CREATE INDEX Raster_Prova_rast_st_convexhull_idx ON Raster_Prova USING gist(ST_ConvexHull(rast)); /* Visualizzazione dei metadati associati ai dati raster */ SELECT rid, (md).* FROM (SELECT rid, ST_MetaData(rast) AS md FROM Raster_Prova WHERE rid IN(1,2,3)) AS foo;
29
Capitolo 3 Dal risultato dell’ultima query, visualizzato nella Tabella 3.1, possiamo notare come la nostra tabella sia stata popolata con dati raster aventi fonti differenti e metodi di inserimento differenti. Possiamo, inoltre, notare il fatto che all’atto della creazione di un dato raster vuoto, PostGIS pone di default srid (Spatial Reference System Identifier) a 4326, che rappresenta il valore univoco associato al sistema di riferimento WGS84. Metadati rid integer
Primo Raster Secondo Raster Terzo Raster 1
2
3
upperleftx Double precision 0.0005
0.0005
6.627
upperlefty Double precision 0.0005
0.0005
-952.908
width integer
100
100
1
height integer
100
100
1
scalex Double precision
1
1
1000
scaley Double precision
1
1
1000
srid integer
4326
4326
4326
numbands integer
0
0
1
Tabella 3.1: Metadati associati ai raster salvati sul DB. Per sapere il significato e i ruoli di ogni metadato consultare la guida online di PostGIS [6]. Per inserire file raster esterni al DB bisogna, comunque, creare un UDF apposita che acceda alla directory dove `e presente il file e trattarlo utilizzando il file eseguibile raster2pgsql all’interno della stessa UDF. Per questo motivo abbiamo deciso di utilizzare il secondo metodo che permette di inserire direttamente dati raster in DB spaziali senza creare UDF aggiuntive.
3.2
Usare il comando raster2pgsql
Il raster2pgsql [5] `e un file eseguibile che converte un file raster in una serie di comandi SQL che possono essere eseguiti per il caricamento vero e proprio. L’output di questo comando pu`o essere catturato in un file SQL, o reindirizzato al comando psql, che eseguir`a i comandi su un database di destinazione. Questo comando viene eseguito in 30
Capitolo 3 ambiente PostGIS e sfrutta la libreria GDAL (Geospatial Data Abstraction Library) [4] , una libreria open source per l’utilizzo di dati raster che supporta un grande numero di formati. Il comando raster2pgsql, sfruttando questa libreria open source supporta anche lo stesso numero di formati raster. Eccone un breve elenco: • GeoTIFF • Erdas Imagine Images (.img) • Ground-based SAR Applications Testbed File Format (.gff) • Arc/Info Binary Grid • Arc/Info ASCII Grid (.asc) • Portable Network Graphics (.png) • JPEG JFIF • Graphics Interchange Format (.gif) • MS Windows Device Independent Bitmap • Atri Nel seguito descriveremo un breve tutorial per creare una tabella raster che vuole solo evidenziare come si possano salvare file raster su un DB spaziale, nel nostro caso PostgreSQL/PostGIS, in modo semplice ma efficacie, con gli strumenti software a nostra disposizione. Passo 1: Selezionare il file raster che si desidera caricare. Nel nostro caso abbiamo scelto di caricare sul DB il raster georeferenziato Tav 5 337 geor.tiff (creato con la metodologia spiegata nel Capitolo 2) che rappresenta la mappa del Piano Territoriale Paesaggistico Regionale del Lazio numero 337 (Figura 3.1 che rappresenta una zona al confine del Lazio) [9].
31
Capitolo 3
Figura 3.1: Raster scelto per essere salvato sul DB. Passo 2: Identificare il SRID (proiezione) dei dati. Nel nostro caso SRID `e uguale a 4236 che corrisponde al sistema di riferimento WGS84. Passo 3: Identificare il database di destinazione in cui si desidera caricare i dati, o creare un nuovo database. Noi abbiamo scelto di salvare il file sul DB Rainfall measurement creato nel progetto sulla piovosit`a. Passo 4: A questo punto aprire un terminale oppure una finestra da linea di comando (su windows aprire cmd.exe come amministratore) e posizionarsi nella cartella local path/postgresql/9.2/bin/.
Figura 3.2: Command Line Windows.
32
Capitolo 3 Passo 5: A questo punto digitare il seguente codice da linea di comando: raster2pgsql -s 4236 -I -M path del raster/Nome file.tif -F public.Nome Tabella Raster > Nome Tabella Raster.sql Per la descrizione del codice (compreso il significato di ogni parametro) si rimanda alla visione della bibligrafia e sitografia [5]. Questo script non fa altro che creare un file SQL eseguibile. Il codice generato dallo script e presente nel file Nome Tabella Raster.sql `e il seguente: BEGIN; CREATE TABLE "public"."Nome_Tabella_Raster" ("rid" serial PRIMARY KEY, "rast" raster, "filename" text); INSERT INTO "public"."Nome_Tabella_Raster" ("rast", "filename") VALUES (’01000003002A031FBD94853D3F2A03.....FFFFFF’::raster,’Nome_file.tif’); CREATE INDEX "Nome_Tabella_Raster_rast_gist" ON "public"."Nome_Tabella_Raster" USING gist (st_convexhull("rast")); ANALYZE "public"."Nome_Tabella_Raster"; END; VACUUM ANALYZE "public"."lazio_raster";
Passo 6: A questo punto, per eseguire il codice SQL e per caricare il file raster sul DB basta digitare, sempre da linea di comando, il seguente codice: psql -d Nome Database -f Nome Tabella Raster.sql Nel nostro caso abbiamo digitato i seguenti script mostrati in Figura 3.3.
33
Capitolo 3
Figura 3.3: Inserimento di un file raster su PostgreSQL/PostGIS tramite il comando raster2pgsql. Passo 7: Adesso nel DB Rainfall measurement sar`a creata una tabella lazio raster con 3 colonne (rid, rast, filename) che rappresentano l’identificativo univoco del record, i dati raster trasformati dal file eseguibile raster2pgsql nel formato supportato dal DB e il nome del file originale.
Figura 3.4: Nel DB `e stata creata una tabella raster con all’interno i dati raster trasformati in un formato riconosciuto da PostgreSQL/PostGIS.
34
Capitolo 3 Passo 8: Possiamo visualizzare il raster presente sul DB collegandosi al DB Rainfall measurement su QuantumGIS per vedere se `e anche georeferenziato in modo adeguato (cio`e se non si `e persa informazione nell’inserire dati raster sul DB). Il risultato `e mostrato in Figura 3.5 eFigura 3.6.
Figura 3.5: Importazione della tabella raster in QuantumGIS attraverso il plug-in DB Manager.
Figura 3.6: Visualizzazione grafica finale del raster presente nel DB Rainfall measurement nella tabella lazio raster fatta con QuantumGIS. E’ possibile salvare diversi file raster su una singola tabella usando il parametro -a nel codice descritto in precedenza ma va notato che pi` u `e grande il file raster da salvare sul DB pi` u risorse del calcolatore sono necessarie per completare anche una semplice visualizzazione grafica (il file da noi utilizzato occupa 1,19 MB, abbiamo 35
Capitolo 3 provato anche ad inserire nel DB file raster che occupavano fino a 350 MB ma i tempi di elaborazione erano molto lunghi e, alle volte, si incorreva in errori dovuti proprio alla grandezza del file).
36
Bibliografia
[1] ESRI. ArcGis - Mapping and Spatial Analysis for Understanding Our World. http://www.esri.com. [2] ESRI. ArcGIS Desktop Help 9.2 - What is raster data? http://webhelp.esri. com/arcgisdesktop/9.2/index.cfm?TopicName=What is raster data? [3] Istituto Geografico Militare Italiano.
IGMI - Servizio Informatico - Area
Download. http://www.igmi.org/download.php. [4] Open Source Geospatial Foundation (OSGeo).
GDAL - Geospatial Data
Abstraction Library. http://www.gdal.org/. [5] Regina Obe Mark Cave-Ayland Paul Ramsey, Sandro Santilli. Chapter 5. Raster Data Management, Queries, and Applications. PostGIS Project Steering Committee (PSC). http://postgis.net/docs/using raster.xml.html. [6] Regina Obe Mark Cave-Ayland Paul Ramsey, Sandro Santilli. Spatial and Geographic objects for PostgreSQL. PostGIS Project Steering Committee (PSC). http://postgis.net/. [7] The PostgreSQL Global Development Group. PostgreSQL, the world’s most advanced open source database. http://www.postgresql.org. [8] The Quantum GIS project.
Quantum GIS - Open Source Geographic
Information System. http://www.qgis.org.
37
Capitolo 3 [9] Regione Lazio. Regione Lazio - URBANISTICA - Area download. http:// www.regione.lazio.it/rl urbanistica/?vw=contenutiDettaglio&id=71. [10] Wikimedia Foundation, Inc.
Geographic information system.
http://en.
wikipedia.org/wiki/Geographic information system. [11] Wikimedia Foundation, Inc. GIS file formats. http://en.wikipedia.org/ wiki/GIS file formats.
38