Sistemi Informativi e Basi di Dati Laurea Specialistica in Tecnologie di Analisi degli Impatti Ecotossicologici Docente: Francesco Geri Dipartimento di Scienze Ambientali “G. Sarfatti” Via P.A. Mattioli 4 – 53100 Siena Tel. 0577235408 [email protected] FareDATABASE clic per modificare lo stile del GEOGRAFICI sottotitolo dello schema Sistemi Informativi e Basi di Dati – I Database Introduzione I GIS per definizione sono basati su database di tipo geografico. La visione classica delle applicazioni GIS ci ha abituati ad avere in un unico dato o gruppo di dati le informazioni riguardanti la geometria e gli attributi degli oggetti (es. shapefile di Arcview). Può essere corretto quando la gestione è stand-alone (quindi desktop-gis) ma quando un sistema prevede l'accesso multiutente (ad esempio da diverse aree geografiche contemporaneamente), questo approccio è inutilizzabile. Sistemi Informativi e Basi di Dati – I Database Introduzione Abbiamo visto che un DBMS come PostgreSQL o MySQL permette accessi multipli contemporanei garantendo l'integrità e la sicurezza dei dati. Può gestire una grande quantità di tipi di dati (varchar, tect, float, double precision ecc.) ma (per adesso) non può gestire dati geografici (quindi non “capisce” i dati spaziali e i sistemi di riferimento). Sistemi Informativi e Basi di Dati – I Database Introduzione DATABASE SPATIALLY – ENABLED ● POSTGIS (POSTGRESQL >7.0) ● SQLITE (SPATIALITE) ● MYSQL (WITH SPATIAL EXTENSION > 5.0) ● ORACLE SPATIAL Sistemi Informativi e Basi di Dati – I Database Introduzione Nel 2001 l'azienda canadese Refractions (www. refractions.net, Udig, GeoTools) ebbe l'esigenza di fare uso di un DBMS con estensioni geografiche. Dopo un indagine di mercato decise di creare un software ex-novo (PostGIS) utilizzando come base PostgreSQL. Questa scelta è giustificata dal fatto che PSQL permette di: Supportare un numero molto grande di tipi di dati ● Gestire DB molto grandi su sistemi con capacità limitate ● Avere un grande controllo sulla sicurezza dei dati ● E' open-source. ● Sistemi Informativi e Basi di Dati – I Database Introduzione Costruire un estensione geografica per un DBMS come PSQL significa costruire una libreria che: Definisca la struttura del dato geografico (geometria, coordinate, ● sistema di riferimento). Implementi le funzione native di PSQL con nuove funzioni come ● capacità di calcolare l'area o il perimetro o ancora la distanza tra punti proiettati. Sistemi Informativi e Basi di Dati – I Database Installazione Per installare PostGIS su Ubuntu utilizziamo ancora una volta Synaptic: sudo apt-cache search postgis sudo apt-get install postgis postgresql-8.4-postgis PostGIS adesso è installato ma per funzionare è necessario: 1)deve essere creato il linguaggio PL/pgSQL 2)deve essere caricato il file postgis.sql 3)deve essere caricata la tabelle dei sistemi di riferimento Sistemi Informativi e Basi di Dati – I Database Installazione sudo updatedb #costruisco l'archivio del contenuto del pc locate postgis.sql #/usr/share/postgresql/8.4/contrib/postgis.sql locate spatial_ref_sys.sql #/usr/share/postgresql/8.4/contrib/spatial_ref_sys.sql Linguaggio procedurale PL/pgSQL, file postgis.sql e spatial_ref_sys.sql possono essere caricati ogni volta che si vuole creare un database postgis oppure è possibile farlo una volta sola, su un database di template, in modo tale che poi si possano creare database postgis semplicemente a partire da quel template Sistemi Informativi e Basi di Dati – I Database Installazione Scegliamo la seconda ipotesi: creiamo un template GIS con cui poter creare i database con estensione geografica. Per fare questo dobbiamo creare un template GIS che chiameremo template_gis createdb –template template0 template_gis #significa crea un database chiamato template_gis sulla base del template0 che è il template standard di PSQL createlang plpgsql template_gis #si abilità il template_gis al linguaggio plpgsql psql -f /usr/share/postgresql/8.4/contrib/postgis.sql -d template_gis #aggiunge le funzioni postgis al database psql -f /usr/share/postgresql/8.4/contrib/spatial_ref_sys.sql -d template_gis # aggiunge i sistemi di riferimento al database Sistemi Informativi e Basi di Dati – I Database Installazione psql postgres #si entra nel db postgres (quello che viene creato all'avvio e contiene i dati di sistema di PSQL) UPDATE pg_database SET datistemplate='t' WHERE datname ='template_gis'; #aggiorna la tabella pg_database (che contiene i nomi di tutti i database esistenti, specificando che template_gis è un template A questo punto PostGIS è installato e perfettamente funzionante all'interno di PSQL. Abbiamo creato un template GIS chiamato template_gis che ci rervirà tutte le volte che dovremmo creare un nuovo geo-database. Adesso usciamo da PSQL e creiamo un nuovo geodatabase chiamato database_gis \q createdb --template template_gis database_gis Sistemi Informativi e Basi di Dati – I Database Installazione psql database_gis \dt #lista delle tabelle Vediamo il nostro geodatabase database_gis non è vuoto ma contiene 2 tabelle: geometry_columns ● spatial_ref_sys ● Le 2 tabelle rappresentano la lista delle geometrie presenti nel database database_gis (che adesso è vuota \d geometry_columns), e spatial_ref_sys che invece è piena. Per visualizzare il contenuto di spatial_ref_sys attiviamo la modalità di visualizzazione estesa. \x \d spatial_ref_sys select * from spatial_ref_sys; Sistemi Informativi e Basi di Dati – I Database Installazione select * from spatial_ref_sys where srid='32632'; SRID EPSG relativo al sistema di riferimento UTM Wgs84 fuso 32N Per popolare un geodatabase è possibile procedere in 2 modi: 1)Importare dati dall'esterno attraverso software specifici 2)Utilizzare il linguaggio SQL per inserire dati secondo la sintassi Simple Feautures. Cos'è la sintassi Simple features? E' una sintassi specifica di PostGIS che permette l'archiviazione di 7 tipi diversi di dato: POINT (punto), LINESTRING (linee), POLYGON (poligoni), MULYPOINT (collezioni di punti), MULTILINESTRING (collezioni di linee), MULTIPOLYGON (), GEOMETRY COLLECTIONS (). Sistemi Informativi e Basi di Dati – I Database Installazione Vedremo la prima possibilità più avanti. Adesso vediamo come aggiungere dati in una tabella di un geodatabase da linguaggio SQL. Per prima cosa dobbiamo creare una tabella con la sintassi classica. create table punti (id int4, descrizione varchar(40)); \dt \d punti #controlliamo se tutto è a posto Questa non è una tabella geografica. Per farla diventare una tabella geografica dobbiamo aggiungere il campo relativo alla geometria di tipo point secondo questa sintassi: Sistemi Informativi e Basi di Dati – I Database Installazione select addgeometrycolumn('public','punti','pt',32632,'POINT',2); dove la sintassi è: select addgeometrycolumn #è una funziona e in SQL le funzioni si chiamano con il comando SELECT Nomeschema = nome dello schema dove è memorizzata la tabella Nometabella= nome della tabella Nomecolonna= nome del campo geometrico, in questo caso pt Srid= sistema di riferimento, in questo caso 32632 (Wgs84 32N) Tipogeometria= tipo di geometria in base alle Simple Features e quindi puntuale dimensione= può essere 2 o 3, ovvero numero delle dimensioni dello spazio. Controlliamo la tabella geometry_column select * from geometry_columns; Sistemi Informativi e Basi di Dati – I Database Installazione Adesso controlliamo la tabella appena creata. \d punti A questo punto la tabella è diventata “geometrica” e l'inserimento avviene secondo le classiche modalità SQL. Quindi insert into punti (id, descrizione, pt) values (1,'origine',ST_GeomFromText('POINT(621115 4879123)',32632)); insert into punti (id, descrizione, pt) values (2,'punto_1',ST_GeomFromText('POINT(621565 4879683)',32632)); insert into punti (id, descrizione, pt) values (3,'punto_2',ST_GeomFromText('POINT(621890 4879001)',32632)); Sistemi Informativi e Basi di Dati – I Database Installazione Adesso controlliamo la tabella appena creata. select * from punti; I punti sono stati inseriti correttamente, sia per quanto riguarda l'attribuzione sia per quanto riguarda l'informazione geometrica. Il passo successivo è importare questo shape dentro un GIS e vedere cosa succede. Prima proviamo a vedere se PgAdminIII vede correttamente i dati. Apriamo QuantumGIS e connettiamoci al database. Sistemi Informativi e Basi di Dati – I Database PgAdmin III Qgis ha la capacità di default di connettersi a database spaziali di PostgreSQL/PostGIS. Cliccando su “Aggiongi vettore PostGIS” si apre la finestra della connessione. Cliccare su nuovo e inserire un nome a piacere per la connessione, localhost su nome server, databasegis su Database, datauser su Utente e cliccare su Test connessione. Se il test è positivo cliccare su Ok. Cliccare su Connetti. Sistemi Informativi e Basi di Dati – I Database PgAdmin III Cliccare su Aggiungi e nella tab della Legenda dovrebbe comparire il layer Punti e sullo schermo dovrebbero comparire i punti visualizzati. Sistemi Informativi e Basi di Dati – I Database PgAdmin III QGIS è connesso con il database “databasegis” e ha caricato il layer postgis “punti”. Questo layer può essere esportato come shapefile oppure può essere modificato direttamente dal GIS. Proviamo ad aggiungere 2 punti con id=4 e id=5 e descrizione=prova. Salvare il risultato. Tornare su SQL Shell e controllare la tabella select * from punti; Andare su PgAdminIII e rifare la query. La tabella è stata aggiornata direttamente sul server e quindi ad ogni accesso vedremo la tabella aggiornata. delete from punti where id=2; Provare a ricaricare il layer postgis. Sistemi Informativi e Basi di Dati – I Database PgAdmin III Da QGIS è possibile popolare il database non solo inserendo nuovi record nella tabella ma importando nuove tabelle da shapefile. È possibile farlo attraverso un plugin di default di QGIS chiamato SPIT. Sistemi Informativi e Basi di Dati – I Database PgAdmin III Provare ad aggiungere lo shapefile relativo ai SIC della Provincia di Siena. Caricare lo shape su QGIS e impostare il CRS 3003 (Monte Mario Zone1). Aprire SPIT e selezionare lo shapefile. È possibile scegliere lo schema, il SRID, e il nome della colonna geometrica (default the_geom). Lasciare tutto com'è e cliccare su aggiungi e successivamente su ok. Rimuovere lo shapefile e provare a ricaricare il layer PostGIS. Adesso sono presenti 2 tabelle: punti e sic_si_gb. Sistemi Informativi e Basi di Dati – I Database PgAdmin III È possibile importare solo una parte della tabella utilizzando lo sturmento query builder in entrata. È possibile utilizzare gli operatori logici AND OR NOT per eseguire la query e i gli operatori LIKE e ILIKE. LIKE accetta i caratteri speciali %: 1. %se tutto quello che finisce con la stringa 'se'. 2. se% tutto quello che inizia con la stringa 'se' 3. %se& tutto quello che contiene la stringa 'se'