Microsoft's Internet Explorer browser has no built-in vector graphics machinery required for "loss-free" gradient background themes.

Please upgrade to a better browser such as Firefox, Opera, Safari or others with built-in vector graphics machinery and much more. (Learn more or post questions or comments at the Slide Show (S9) project site. Thanks!)

OpenGIS - Soluzioni libere per l'analisi geospaziale

QuantumGIS e OpenJUMP - PostGIS

Master "Tecnologie OpenSource"

Argomenti della lezione

  • PostGIS, OpenJUMP e QuantumGIS
  • Preparazione dell’ambiente di lavoro
  • Primi passi in QuantumGIS
  • Caratteristiche di OpenJUMP
  • Introduzione a PostGIS
  • Operazioni comuni con PostGIS
  • Analisi vettoriale in PostGIS
  • Visualizzazione di dati in PostGIS su QGIS e OpenJUMP

PostGIS

PostGIS aggiunge il supporto a oggetti geografici al database relazioanle PostgreSQL. L’installazione di PostGIS permette di utilizzare PostgreSQL come backend dati nei sistemi GIS che lo supportano, implementandi un’architettura simile a ESRI SDE o Oracle Spatial Extensions.

PostGIS segue lo standard OGC Simple Features Specifications for SQL, ed è certificato come aderente alle specifiche Types and Functions.

PostGIS è stato sviluppato dalla “Refractions Research” ed è software libero, rilasciato in licenza GPL.

OpenJUMP

OpenJUMP è un GIS open source scritto in Java. È basato su JUMP GIS di Vivid Solutions.

È un GIS particolarmente orientato all’analisi vettoriale, con limitate funzionalità di gestione di dati raster. Essendo scritto in Java, è portabile su tutte le piattaforme per le quali sia disponibile una Java Virtual Machine (JVM).

Anche OpenJump è un software rilasciato in GPL.

QuantumGIS

Quantum GIS (QGIS) è un software GIS user friendly e Open Source, rilasciato in licenza GPL.

QGIS è un progetto ufficiale dell’Open Source Geospatial Foundation (OSGeo). È un software multipiattaforma che gira su Linux, Unix, Mac OSX, e Windows; supporta numerosi formati vettoriali e raster e offre meccanismi di connessione a database relazionali con estensioni geografiche.

Quantum GIS fornisce un numero sempre crescente di funzionalità (sia interne che in forma di plugins). Con QGIS è possibile gestire, visualizzare ed editare dati geografici, effettuare analisi dei data e comporre cartografia tematica.

Open Geospatial Consortium

Open Geospatial Consortium (OGC) è un’organizzazione no-profit che si occupa di produrre standard aperti per servizi di tipo geospaziale.

Attulmente il consorzio riunsce 382 entità, tra cui aziende, agenzie governative e università. Tra i molti documenti prodotti, si devono annoverare:

Nota: OpenGIS è un marchio registrato di OGC.

Installazione di PostGIS in Ubuntu (1/3)

Ubuntu fornisce nei suoi repository (precisamente in universe) il pacchetto binario di PostGIS.

Per questo l’installazione base del programma si ottiene lanciando semplicemente il comando:

sudo apt-get install postgresql-8.3-postgis

Installazione di PostGIS in Ubuntu (2/3)

A questo punto è necessaria un po’ di post-configurazione:

createdb geotemplate 
createlang plpgsql geotemplate
psql -d geotemplate -f /usr/share/postgresql-8.3-postgis/lwpostgis.sql
psql -d geotemplate -f /usr/share/postgresql-8.3-postgis/spatial_ref_sys.sql

Installazione di PostGIS in Ubuntu (3/3)

A questo punto si è in grado di creare un database con supporto geospaziale. Dal client psql digitare i seguenti comandi

CREATE DATABASE provagis TEMPLATE = geotemplate;

Per verificare invece che l’installazione sia andata a buon fine:

SELECT postgis_geos_version();

Installazione di QuantumGIS in Ubuntu (1/3)

Dalla versione 8.04 di Ubuntu QuantumGIS è stato rimosso dai repository Canonical. Per installare i binari del software sono dunque necessari i seguenti step:

Installazione di QuantumGIS in Ubuntu (2/3)

Dalla versione 8.10 di Ubuntu (Intrepid Ibex) Canonical ha aggiunto alle GNU libc il supporto a FORTIFY, un flag di compilazione che esegue check run-time del codice binario, allo scopo di eliminare eventuali problemi nella gestione della memoria (buffer overflows).

Tale funzionalità ha però introdotto un BUG nelle librerie gdal (librerie per il supporto a decine di formati raster georeferenziati), che provoca il crash di QuantumGIS in alcune situazioni.

Per ovviare a questo inconveniente al momento l’unica soluzione è ricompilare il pacchetto libgdal1-1.3.0, disabilitando tale flag.

Installazione di QuantumGIS in Ubuntu (3/3)

Installazione di OpenJUMP

L’installazione di OpenJump è un procedimento estremamente semplice, essendo il SW scritto in Java (quindi multipiattaforma).

In realtà è sufficiente scaricare lo zip contenente il programma e decomprimerlo nella propria home:

cd ~
mkdir OpenJump; cd OpenJump
wget http://jump-pilot.sourceforge.net/download/nightlybuild/openjump-core-1.3-20090423-bin.zip
unzip openjump-core-1.3-20090423-bin.zip

Per lanciare il programma invece, da terminale:

cd ~/OpenJump/bin
./openjump.sh&

Presentazione di QuantumGIS (1/2)

Con QGIS è possibile effettuare le seguenti operazioni:

Presentazione di QuantumGIS (2/2)

Formati di file supportati:

QuantumGIS supporta inoltre:

Presentazione di OpenJump (1/3)

OpenJump offre le seguenti funzionalità di base:

Presentazione di OpenJump (2/3)

Sono inoltre fornite alcune funzioni avanzate:

Presentazione di OpenJump (3/3)

OpenJump supporta tutti i principali formati raster e vettoriali, il caricamento dati da web services WMS, e la connetività a PostGIS.

Attraverso quest’ultimo meccanismo mette a disposizione dell’utente tutte le caratteristiche di analisi vettoriali di PostGIS (è possibile inserire normali query SQL o PL/pgSQL attraverso una semplice interfaccia, in fase di aggiunta di un layer PostGIS).

Un’altra caratteristica degna di nota di OpenJump è la sua architettura a plug-ins, che permette di aggiungere nuove funzionalità in maniera estremamente semplice. Una lista delle estensioni supportate può essere reperita all’indirizzo:

http://www.openjump.org/wiki/show/Plugins

Presentazione di PostGIS

PostGIS aggiunge il supporto geospaziale al database relazionale ad oggetti PostgreSQL, attraverso una libreria (in C) che estende il linguaggio procedurale PL/pgSQL. Attualmente fornisce le seguenti funzionalità:

Memorizzazione dei dati (1/2)

La specifica OpenGIS definisce due modalità standard per rappresentare gli oggetti geometrici:

Entrambe le rappresentazioni includono informazioni relative a tipo dell’oggetto e coordinate.

Esempi di oggetti geometrici in WKT utilizzabili da PostGIS sono i seguenti:

Memorizzazione dei dati (2/2)

Lo stesso standard prevede che il formato interno di memorizzazione debba mantenere anche cognizione del sistema di riferimento in cui sono date le coordinate

PostGIS offre le seguenti interfacce per la manipolazione di oggetti geografici:

L’inserimento di dati in una tabella geo-abilitata deve dunque essere effettuato nella seguente forma:

INSERT INTO geotable ( the_geom, the_name )
  VALUES ( GeomFromText(‘POINT (-126.4 45.32)’, 312), ‘A Place’);

PostGIS e gli standard OGC

La specifica “Simple Features Specification for SQL” OGC definisce:

In riferimento all’ultimo punto, lo standard e PostGIS implementano:

Creazione di una tabella geospaziale

La creazione di una tabella geospaziale deve essere effettuata in due step:

Caricare dati in PostGIS

L’inserimento di dati in una tabella geospaziale può essere effettuata in due modi differenti:

L’utility shp2pgsql

L’utility shp2pgsql converte automaticamente file in formato ESRI shp in listati SQL compatibili con PostGIS/PostgrSQL. L’uso base del programma è il seguente:

shp2pgsql shapefile schema.tabella > listato.sql
psql -U utente -W -d database -f listato.sql

Segue la spiegazione delle opzioni d’utilizzo più comuni:

-d Cancella la tabella dal database prima di ricrearla e popolarla
-a Aggiunge i nuovi dati ad una tabella preesistente
-c Crea la tabella nel DB e la popola (comportamento di default)
-p Crea solo la tabella, senza aggiungere i dati
-D Utilizza il formato binario di dump di PostgreSQL
-s Imposta il SRID della tabella

Esportare dati da PostGIS

Anche l’esportazione dei dati prevede la doppia modalità:

L’utility pgsql2shp

pgsql2shp è un utility di dumping di tabelle geospaziali, che si connette direttamente al DBMS ed esporta i dati nel formato ESRI shp. La sintassi base del comando è la seguente:

pgsql2shp [<options>] <database> [<schema>.]<table>
pgsql2shp [<options>] <database> <query>

Segue una lista delle opzioni più comuni:

-f Definisce il nome dello shapefile da esportare
-h Nome Host del server PostgreSQL
-p Porta d’ascolto del server
-u Utente per la connessione
-p Password di connessione

Ottimizzazioni mediante indici

Come per le normali tabelle, PostgreSQL permette di definire indici sulle colonne geografiche. Questa operazione è necessaria soprattutto nel caso si utilizzino tabelle con un numero molto elevato di tuple, e impatta in maniera significativa sulle performance in fase di interrogazione.

PostgreSQL inplementa i seguenti tipi di indici:

…ma offre le migliori garanzie con la terza tipologia. La definizione di un indice avviene dunque con la seguente sintassi (SQL Standard):

CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometryfield] ); 

Funzioni base di PostGIS

Segue una lista delle funzioni base di PostGIS, tra cui:

WKT

La seguente query restituisce i dati geografici in formato WKT:

SELECT astext (the_geom) FROM geotable;

Uguaglianza

La funzione st_equals() valuta due geometrie e restituisce un true se le stesse sono uguali:

SELECT a.gid, b.gid, st_equals (a.the_geom, b.the_geom) 
FROM province1 a, province2 b  
WHERE a.gid=b.gid;

Distanza

Per effettuare il calcolo di una distanza tra due geometrie si utilizza invece la funzione st_distance():

SELECT a.gid, b.gid, st_distance (a.the_geom, b.the_geom) 
FROM province a, fiumi b  
WHERE a.gid=b.gid;

Centroide

PostGIS è in grado di calcolare il baricentro (o centroide) di un poligono mediante la funzione st_centroid():

SELECT st_centroid (the_geom) FROM province;

Area, perimetro, lunghezza

Per il calcolo di aree, perimetri e lunghezze PostGIS implementa le seguenti funzioni:

Buffer

Tra le funzioni di analisi spaziale, spicca la possibilità di creare al volo buffer fissi o variabili, mediante la funzione st_buffer():

Riproiezione al volo

Un’altra caratteristica estremamente utile di PostGIS, è la possibilità di riproiettare al volo un layer vettoriale. È sufficiente utilizzare la funzione st_transform():

SELECT ST_Transform(the_geom, nuovo_srid) from fiumi;

PostGIS reference

Segue una lista di tutte le principali funzioni di PostGIS:

Funzioni di gestione (1/2)

Funzioni di gestione (2/2)

Relazioni tra geometrie (1/3)

Relazioni tra geometrie (2/3)

Relazioni tra geometrie (3/3)

Funzioni di elaborazione delle geometrie (1/3)

Funzioni di elaborazione delle geometrie (2/3)

Funzioni di elaborazione delle geometrie (3/3)

Funzioni di utilità (1/5):

Funzioni di utilità (2/5):

Funzioni di utilità (3/5):

Funzioni di utilità (4/5):

Funzioni di utilità (5/5):

Funzioni costruttori di geometrie (1/5)

Funzioni costruttori di geometrie (2/5)

Funzioni costruttori di geometrie (3/5)

Funzioni costruttori di geometrie (4/5)

Funzioni costruttori di geometrie (5/5)

Funzioni di misura (1/3)

Funzioni di misura (2/3)

Funzioni di misura (3/3)

Funzioni di output (1/2)

Funzioni di output (2/2)

Funzioni di editing delle geometrie (1/6)

Funzioni di editing delle geometrie (2/6)

Funzioni di editing delle geometrie (3/6)

Funzioni di editing delle geometrie (4/6)

Funzioni di editing delle geometrie (5/6)

Funzioni di editing delle geometrie (6/6)

Funzioni varie (1/4)

Funzioni varie (2/4)

Funzioni varie (3/4)

Funzioni varie (4/4)

Operatori tra geometrie

A &< B The “&<” operator returns true if A’s bounding box overlaps or is to the left of B’s bounding box
A &> B The “&>” operator returns true if A’s bounding box overlaps or is to the right of B’s bounding box
A << B The “<<” operator returns true if A’s bounding box is strictly to the left of B’s bounding box
A >> B The “>>” operator returns true if A’s bounding box is strictly to the right of B’s bounding box
%A &< B% The "&< " operator returns true if A’s bounding box overlaps or is below B’s bounding box
**A &> B** The " &>" operator returns true if A’s bounding box overlaps or is above B’s bounding box
**A << B** The "<< " operator returns true if A’s bounding box is strictly below B’s bounding box
**A >> B** The " >>" operator returns true if A’s bounding box is strictly above B’s bounding box | A ~= B The “~=” operator is the “same as” operator. It tests actual geometric equality of two features. So if A and B are the same feature, vertex-by-vertex, the operator returns true
A @ B The “@” operator returns true if A’s bounding box is completely contained by B’s bounding box
A ~ B The “~” operator returns true if A’s bounding box completely contains B’s bounding box
A && B The “&&” operator is the “overlaps” operator. If A’s bounding box overlaps B’s bounding box the operator returns true

Esercitazione con PostGIS

Note di licenza

Sitografia

Software presentati:

Altre risorse:

Copyright (C) 2008 - Alca Societa' Cooperativa

http://alca.le.it - info@alca.le.it

released under CreativeCommons 2.5 by-nc-sa

NOTA: le immagini dei software e dei device contenuti
nella presentazione sono proprieta' dei relativi detentori
del copyright e sono state riprodotte a scopo esclusivamente didattico.