Elaborato di basi di dati spaziali...

43
Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze Fisiche Matematiche e Naturali Corso di Basi di Dati Spaziali Introduzione a Una soluzione per GIS open - source Paolo Gallo mat. 40398

Transcript of Elaborato di basi di dati spaziali...

Page 1: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Università Degli Studi Di Udine A.A. 2006/2007

Facoltà di Scienze Fisiche Matematiche e Naturali

Corso di Basi di Dati

Spaziali

Introduzione a

Una soluzione per GIS open - source

Paolo Gallo mat. 40398

Page 2: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 2

Sommario Che cos’e GeoServer ? ....................................................................................................................................... 4

Qualche accenno su GeoTools....................................................................................................................... 4

Funzionalità di GeoServer.............................................................................................................................. 5

Requisiti di sistema ............................................................................................................................................ 6

Installazione 6

Configurazione 6

Namespace .................................................................................................................................................... 6

DataStore ....................................................................................................................................................... 7

Opzioni aggiuntive ......................................................................................................................................... 7

Gestire dati Raster ( Coverage ) ................................................................................................................. 8

Formati di Output di GeoServer ............................................................................................................... 8

Lato client 9

“Closed Source” Desktop Client .................................................................................................................... 9

Open Source Clients : OpenLayers ............................................................................................................... 9

Esempio ..................................................................................................................................................... 9

GeoServer & Google Earth .......................................................................................................................... 10

Funzionalità avanzate ...................................................................................................................................... 10

OGC Filters ................................................................................................................................................... 10

DataSet .................................................................................................................................................... 11

Richiesta .................................................................................................................................................. 11

Risposta ................................................................................................................................................... 11

Interrogazioni mediante Common Query Language CQL ............................................................................ 11

Elenco delle funzioni supportate ................................................................................................................. 16

GeoServer & Oracle ......................................................................................................................................... 19

Installazione del supporto Oracle ................................................................................................................ 19

Oracle & GeoServer in esecuzione sulla stessa macchina ........................................................................... 20

Caricamento dei dati spaziali su Oracle ....................................................................................................... 21

Collegamento a GeoServer di una sorgente di dati spaziali Oracle ............................................................ 22

Impostazione delle FeatureTypes................................................................................................................ 23

Un esempio pratico ......................................................................................................................................... 25

Requisiti ....................................................................................................................................................... 25

Modello Concettuale ................................................................................................................................... 25

Schema Logico ............................................................................................................................................. 26

Elementi utilizzati ........................................................................................................................................ 27

Page 3: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 3

Scelta di un sistema di riferimento spaziale SRS ......................................................................................... 27

Creare un immagine georeferenziata, per il livello raster ........................................................................... 27

Creare degli shapefiles ................................................................................................................................ 28

Convertire gli shapefile e caricarli sul DB Oracle ......................................................................................... 31

Caricamento dell’immagine raster .............................................................................................................. 33

Configurazione di GeoServer per l’utilizzo dei dati del DB Oracle .............................................................. 34

Creazione di un client mediante l’utilizzo di OpenLayers ........................................................................... 34

Glossario 40

Bibliografia ............................................................................................................................................... 43

Page 4: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 4

Che cos’e GeoServer ?

Come banalmente suggerisce il nome GeoServer è un server, che permette agli utenti di visualizzare, inserire e modificare dati geografici (e quindi dati spaziali in genere) tramite interfaccia web o client (es. UDig o GVSig) . Mediante GeoServer è possibile pubblicare e modificare dati spaziali utilizzando gli standard open source. E’ possibile rendere disponibile l’informazione spaziale in un ampia varietà di formati di mappe / immagini , o dati geospaziali. Le funzionalità vengono rese disponibili tramite richieste http , in modo tale da poter realizzare sistemi GIS sia su una singola macchina, sia su rete locale ma anche in remoto. Inoltre sono disponibili delle funzionalità di gestione delle transazioni che rendono possibile un editing condiviso dei dati. Tecnicamente GeoServer è un completo WFS-T e WMS (Web Feature Service , Web Map Service, vedi glossario).

GeoServer è stato scritto in linguaggio java, precisamente la versione 1.4 , il suo sviluppo si basa sull’ utilizzo delle librerie GeoTools , scritte anch’esse in java. Fondamentale è la capacità di utilizzare svariati tipi di file sia raster (anche georeferenziati come GeoTIFF) che vettoriali e anche tipi di file utilizzati da altre applicazioni commerciali, inoltre i dati vettoriali possono essere inseriti sia come collegamenti a semplici shapefiles, sia come collegamenti a database “robusti” come Oracle, Db2, Postgis oltre che a soluzioni MySql, MapInfo ecc.

Qualche accenno su GeoTools

GeoTools è una libreria open-source (LGPL) scritta in java che fornisce dei metodi conformi agli standard dell’OGC per la manipolazione dei dati geospaziali. Tramite questa libreria è possibile quindi costruire un GIS. GeoTools è utilizzato da molti progetti inclusi Web Feature Servers, Web Map Servers, e applicazioni desktop o web clients. Lo sviluppo delle librerie procede includendo nuovi formati di file supportati e funzionalità sempre più avanzate facendo riferimento alle specifiche dell’OGC , lo sviluppo procede in stratta collaborazione con gli altri progetti GeoAPI e GeoWidgets che offrono funzionalità geospaziali basandosi anch’essi sulle librerie GeoTools. GeoTools è gestito dal Project Management Committee (PMC) (un gruppo di volontari che ha dato un contributo significativo allo sviluppo del progetto). Il progetto esiste da 7 anni circa, la prima versione GT1 (GeoTools-Lite) è stata abbandonata in favore della versione GT2 semplicemente chiamata GeoTools, alla data odierna è scaricabile dal sito la versione 2.3.3.

Page 5: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 5

GeoTools è sviluppato mediante un processo aperto , pubblica collaborazione su nuove idee. Tutto lo sviluppo del progetto è accessibile a tutti e coloro i quali vogliono contribuire sono i benvenuti. Inoltre GeoTools è un progetto membro dell’ Open Source Geospatial Foundation .

Funzionalità di GeoServer

• Interamente conforme alle specifiche WMS e WFS, come testato dal CITE.

• Semplice da configurare tramite un interfaccia WEB, non necessita di file di configurazione.

• Supporto dei formati PostGIS, Shapefile, ArcSDE, DB2 e Oracle.

• VPF, MySQL, MapInfo, e Cascading WFS sono anch’essi supportati (in beta release).

• “On the fly” reprojection con un incorporato database EPSG che supporta centinaia di proiezioni default.

• Web Map output come jpeg, gif, png, SVG, e KML.

• Dati vettoriali “grezzi” disponibili come GML o Shapefiles zippati attraverso il WFS.

• Anti-aliasing sulle immagini.

• Conforme agli standard per default – non è necessario effettuare complesse configurazioni solo per utilizzare I dati di base.

• Lettura dei dati in streaming : non ci sono limiti di memoria alla quantità di dati che viene restituita.

• Full SLD support, entrambi definite dall’utente (POST e GET), utilizzate anche nelle funzionalità di impostazione degli stili.

• Pieno supporto dei filtri nei formati dati WFS (ottimizzati dove possibile).

• Supporto per le transazioni atomiche dei database attraverso lo standard WFS-T protocol, disponibile su tutti i formati di dati.

• Supporto delle Long Transactions attraverso una implementazione completa delle specifiche contenute nel la sezione Locking del WFS.

• Innovativo Validation Engine che controlla le features inserite in un insieme topologico con degli attributi basati su regole , per preservare la backend integrity.

• Java (J2EE) servlet-based, può essere eseguito in ogni servlet container.

• Progettato per future estensioni , il codice sorgente è semplice da leggere.

• Possibilità di gestire nuovi formati di dati con GeoTools DataStore interfaces e helper classes, facendo di GeoServer una interfaccia standard di connessione ai dati.

• Non necessita di ricompilazione per supportare nuovi formati di dati, i GeoTools DataStores vengono inseriti come dei plug-in in GeoServer, e visualizzati come opzione nell’interfaccia di configurazione grafica.

• Reale sviluppo open source, tramite una grande community, sempre aperta a nuove collaborazioni, modificando GeoServer per nuove funzionalità.

• MapBuilder incorporato , AJAX-style web mapping client, per la visualizzazione istantanea.

• Documentazione dettagliata e esaustiva in linguaggio semplice da capire.

• Disponibilità di email lists per supporto veloce.

• Possibilità di un servizio assistenza e sviluppo a pagamento , fornito da varie società e consulenti .

• Molto altro....

Page 6: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 6

Requisiti di sistema

E possibile installare GeoServer su macchine Windows, Unix / Linux e Apple Mac OSX. GeoServer è realizzato mediante linguaggio Java 1.4, e prima di procedere con l’installazione è necessario installare il JDK ultima versione disponibile (alla data di scrittura di questa relazione è il JDK 6u1)

Installazione

1. Prima di tutto occorre scaricare installare l’ultimo SUN JDK, qualora non fosse già presente sulla macchina in questione.

2. Successivamente si scarica il file di installazione geoserver-1.5.4.exe (nel caso di sistemi windows) o alternativamente geoserver-1.5.4.bin e si procede all’installazione del pacchetto.

3. Si fa partire il server, nei sistemi windows l’installazione avrà creato un percorso Programmi-

>GeoServer 1.5.1 -> Start GeoServer, per linux si utilizza la cartella $GEOSERVER_HOME/bin.

4. Si effettua un piccolo test per vedere se l’installazione è andata a buon fine aprendo l’indirizzo : http://localhost:8080/geoserver/wfs/GetCapabilities

Viene visualizzato un file XML se tutto è andato a buon fine.

Configurazione

Aprendo la pagina : http://localhost:8080/geoserver/ si ottiene la pagina web di configurazione, dove si possono subito testare anche alcune demo che illustrano le varie possibilità di utilizzo del server. Per configurare o amministrare il server è necessario l’utilizzo di username/password che di default saranno : User: admin, Password: geoserver, se selezioniamo config notiamo una panoramica di varie opzioni configurabili divise per servizio :

Namespace

I namespace si utilizzano per discriminare i vocabolari XML uno dall’altro. I WFS utilizzano tre

namespace standard -

#WFS - http://www.opengis.net/wfs

#GML - http://www.opengis.net/gml

#Filter - http://www.opengis.net/ogc

In aggiunta ogni WFS utilizzerà uno o più 'Application Schemas'. GML è il meta-linguaggio utilizzato per decrivere nello specifico varie entità. Un WFS utilizza uno o più di questi specifici linguaggi per descrivere I

Page 7: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 7

propri schemi – restituiti dalla DescribeFeatureType. Lo schema XML definisce più nello specifico la feature, quello che una 'strada' rappresenta, per esempio. Questi schemi devono avere ognuno un proprio namespace. GeoServer viene installato con alcuni namespace preimpostati a scopo dimostrativo , ma è necessario tenere ben presente che si tratta solo di esempi. E se si sta realizzando un applicazione con GeoServer è essenziale definire un proprio namespace.

DataStore Dopo il settaggio dei namespace il passo successivo è configurare le sorgenti di dati. Un datastore rappresenta una singola, fisica, sorgente di dati geospaziali. Può consistere in una o più featureTypes (o layers). Una featureType può essere una tabella (come in un database), un singolo file (del caso degli shapefile), o una directory (come in una VPF library). Il DataStore construct è utilizzato quando bisogna definire I parametri di connessione per ogni tabella in un grande database, invece di definirle nel DataStore, ed in ogni FeatureType (table) che si riferisce al DataStore che definisce questi parametri. Nel caso degli Shapefiles, dove ogni singolo file può contenere una FeatureType, può sembrare eccessivamente laborioso, ma per uniformità con I parametri di connessione lo definiamo nello Store e il resto nelle FeatureType. Ogni DataStore disponibile è discusso separatamente ,ognuno ha I propri parametri e settaggi, probabilmente nella realtà se ne utilizzerà solo un paio. Ad ogni modo tutti hanno alcuni parametri in comune. Per aggiungere un DataSet al nostro server basta selezionare: Config -> Data -> DataStores -> New

E’ importante notare che non compaiono tutti i DataStore che si possono collegare, ad esempio Oracle essendo un DB commerciale e non di libera distribuzione viene visualizzato solo se i relativi plug-in jar sono installati nella directory /bin altrimenti non verranno installati in automatico in quanto non possono essere distribuiti liberamente. Inoltre sono disponibili dei datastore extra da scaricare, previa verifica della compatibilità con la versione di GeoServer installata. Bisogna inoltre definire un DataStore ID. Viene usato solo internamente, e deve essere unico.

Opzioni aggiuntive Per utilizzare propriamente I dati spaziali in GeoServer, occorre configurare correttamente le coordinate spaziali del sistema di riferimento in cui i dati sono creati. In base al tipo di dato che viene reso disponibile, la configurazione può essere semplice o molto complessa. A volte GeoServer può recuperare un numero EPSG analizzando I dati, a volte non ci riesce, a volte i dati non dispongono di alcuna informazione CRS e quindi bisogna specificarla in maniera diretta.

Page 8: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 8

Gestire dati Raster ( Coverage ) Prima di tutto occorre specificare che con il termine coverage store si intende il luogo (tipicamente una directory) dove si immagazzinano i dati raster (simile a Data Store per i dati vettoriali) , quindi un immagine o un set di immagini, mentre il termine coverage si riferisce al file raster vero e proprio. Ecco alcuni dei tipi di dati raster gestiti da GeoServer:

Formato Descrizione Estensione del file

ArcGrid Arc Grid Coverage Format .asc

WorldImage File raster unito a un file di dati spaziali .png

ImageMosaic Image mosaicking plugin .shp

ImagePyramid Image pyramidal plugin pyramid.properties

GeoTIFF Tagged Image File Format con Inform. Geografica .tiff

Gtopo30 Gtopo30 Coverage Format .dem

Formati di Output di GeoServer GeoServer supporta vari formati di output per le funzionalità WMS e WFS. Ecco una lista dei formati : Per specificare un particolare format di output per una richiesta WMS/WFS è sufficiente inserire "format=..." come parametro nella richiesta.

WMS

• JPEG - (format=image/jpeg) – • GIF - (format=image/gif) - • PNG - (image/png)- • SVG - (format=image/svg)- • PDF - (format=application/pdf)- • KML - (format=KML)- (utilizzato da Google Earth ) • KMZ - (format=KMZ)- • Openlayers - (format=application/openlayers)-

Per I formati GIF e PNG l’output è controllato dal parametro palette , che forza le imagini a 256 colori, con una maggiore velocità di generazione e minore occupazione di memoria ma viene disattivato l’anti-aliasing, è conveniente utilizzarla per le immagini provenienti da layer vettoriali.

WFS

• GML2 - (format=GML2) • GML2 gZipped - (format=GML2-GZIP) • Shapefile - (format=SHAPE-ZIP) • JSON - (format=json) (http://geojson.org)

Page 9: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 9

Lato client

Per poter fruire delle funzionalità offerte dal server è necessario un client che sia conforme agli standard WFS e/o WMS, a questo punto la conformità di GeoServer agli standard OGC rende possibile sia lo sviluppo di un client partendo da zero ma a patto che sia costruito secondo le specifiche del consorzio, oppure si possono utilizzare una delle tante soluzioni client open source disponibili, alcune delle quali possono essere inserite in pagine web e customizzate con le funzionalità richieste.

“Closed Source” Desktop Client E’ possibile utilizzare anche ArcGIS come client non open source, ma ve ne sono diversi – la connessione a un WMS sta diventando un funzionalità base di ogni pacchetto desktop GIS che si rispetti.

Open Source Clients : OpenLayers OpenLayers è una libreria in puro Javascript che permette di visualizzare dati geografici (e ovviamente mappe) tramite i recenti web-browser , è indipendente dal lato server e supporta WMS e WFS. OpenLayers implementa una API Javascript che permette di creare applicazioni geografiche basate sul web di grande impatto, simili a Google Maps , con una fondamentale differenza, OpenLayers è un software libero sviluppato da una comunità open source. Sono supportate alcune funzionalità come lo zoom, il trascinamento, la gestione di layer multipli, l’indicazione delle cordinate spaziali di ogni pixel rappresentato e quindi la possibilità di lanciare interrogazioni con un semplice click del puntatore.

Esempio I seguente codice mostra come inserire un layer WMS da GeoServer in una mappa OpenLayers in una pagina web : <html>

<head>

<script src="http://openlayers.org/api/OpenLayers.js"></script>

</head>

<body>

coverage

...

<script defer="defer" type="text/javascript">

var map = new OpenLayers.Map('map');

var wms = new OpenLayers.Layer.WMS("Curva de Nivel",

"http://sig.cas.gov.co:9999/geoserver/wms?service=wms",

{layers:

'basica25:capa_6101_curva_de_nivel'}

);

map.addLayer(wms);

map.addControl(new OpenLayers.Control.LayerSwitcher());

map.zoomToFullExtent();

</script>

...

</body>

</html>

In realtà viene installata una copia delle librerie javascript di OpenLayers anche localmente a GeoServer, quindi non è necessario il collegamento al sito OpenLayers per utilizzare la libreria. Basta quindi modificare

Page 10: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 10

la terza riga sopra con l’indirizzo locale delle librerie, ad ogni modo sono presenti svariati esempi di utilizzo di OpenLayers nei demo installati di default con GeoServer.

GeoServer & Google Earth Tra i vari formati possibili di output del server troviamo il KML , che è il formato utilizzato dal programma Google Earth. In sostanza quando facciamo una richiesta con uscita formato KML al nostro server, sia che esso risponda con dati vettoriali o dati raster, viene richiesto di aprire il file con il programma Google Earth e l’output viene sovrapposto (sempre correttamente georeferenziato con l’opportuno sistema di riferimento) alla porzione di globo terrestre indicato dalle coordinate spaziali presenti nel file in uscita dal server. Ma questa interoperabilità fa si che sia anche possibile prelevare dati direttamente dal server Google Earth e mescolarli con i dati in nostro possesso per fonderli in un'unica applicazione, magari tramite OpenLayers.

Funzionalità avanzate

GeoServer ha la potente funzionalità di selezionare I dati da restituire basandosi su una query impostata dall’utente. Praticamente tramite un parametro ‘FILTER' or 'CQL_FILTER" si pongono dei vincoli sui dati che verranno forniti in uscita. Questi filtri sono in sostanza delle traduzioni dello statement SQL 'WHERE' tramite formato web , e consentono la piena Potenza espressiva dell’ SQL, con la limitazione dell’utilizzo di una sola tabella. Sono possibili l’utilizzo di filtri logici come AND e OR per la realizzazione di query complesse mediante l’utilizzo di comparazioni sui tipi di dato numerici e stringa, ma soprattutto query di tipo geometrico (ad es. bbox, touch, intersect, disjoint), LIKE statement, valori NULL, e molte altre. Inoltre tali interrogazioni possono essere inviate come url, oppure inviate come file xml all’indirizzo del server. Chiaramente il set di istruzioni utilizzabili nelle interrogazioni si sviluppa procedendo di pari passo con le migliorie apportate alle librerie GeoTools.

OGC Filters GeoServer supporta oltre che le documentate funzioni base di visualizzazione dei dati spaziali, anche delle richieste di interrogazione, modifica e locking sulle feature. Questo sempre seguendo le linee guida delle specifiche del OGC, ovvero una particolare funzione che si chiama GetFeature(). Il filtro OGC è un open standard proposto dall’ Open Geospatial Consortium chiamato 'Filter Encoding’ GeoServer ne implementa completamente le specifiche , per utilizzarlo è sufficiente leggerne le specifiche complete che riportano alcuni esempi. Il filtro più semplice è facile da scrivere. E’chiamato 'featureid' filter, e permette di selezionare una singola feature fornendo il suo id: http://localhost:8080/geoserver/wms/kml_reflect?layers=topp:states&featureid=states.5

Questo filtro visualizzerà lo stato del Maryland in quanto corrisponde a quello che corrisponde ad una feature ID uguale a 5 ,utilizzando i dati demo forniti con GeoServer e Google Earth. Piu semplicemente è possibile utilizzare il fitro su una richiesta di tipo WFS ed esaminando la risposta in formato GML. L’output in KML includerà tutte le featureid se non specificato altrimenti. In generale per ogni interrogazione effettuata tramite http si avranno 3 attori:

1. DataSet 2. Richiesta 3. Risposta

Page 11: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 11

DataSet Il dataset è in sostanza l’insieme dei dati che saranno oggetto della richiesta.

Richiesta Una richiesta può essere inviata al server come GET o come POST, entrambe sono gestite in maniera simile dal server.

Risposta La risposta può essere fornita come WFS e quindi un file ad esempio GML contenete le feature risultanti dall’interrogazione, oppure tramite WMS e quindi avremo un file immagine con le feature selezionate.

Interrogazioni mediante Common Query Language CQL Quando le interrogazioni tramite filtro OGC si fanno complesse si perde parecchio in comprensibilità, ad esempio l’interrogazione in OGC : http:/localhost:8080/geoserver/wms/kml_reflect?layers=topp:states&FILTER=%3CFilter%3E%3CProperty

IsBetween%3E%3CPropertyName%3Etopp:LAND_KM%3C/PropertyName%3E%3CLowerBoundary%3E%3

CLiteral%3E100000%3C/Literal%3E%3C/LowerBoundary

%3E%3CUpperBoundary%3E%3CLiteral%3E150000%3C/Literal%3E%3C/UpperBoundary%3E%3C/Property

IsBetween%3E%3C/Filter%3E

Diventa utilizzando il CQL molto più succinta e leggibile : http://localhost:8080/geoserver/wms/kml_reflect?layers=topp:states&CQL_FILTER=LAND_KM+BETWEE

N+100000+AND+150000

Il CQL (Common Query Language) è un linguaggio formale sviluppato dalla libreria del congresso degli stati uniti per descrivere interrogazioni a sistemi informativi in genere come ad esempio motori di ricerca, cataloghi ecc. . La semantica del linguaggio è stata specificata dal gruppo Z39.50 che fa parte della libreria del congresso degli stati uniti. Le linee guida di questo progetto sono quelle di realizzare un linguaggio facilmente comprensibile dal punto di vista degli utilizzatori finali ma mantenendo la ricchezza e l’espressività dei linguaggi di query più complessi. GeoServer supporta questo linguaggio dalla versione 1.5.0 RC1, e consente di effettuare alcune tipologie di filtraggi sulle features e sulle mappe che vengono gestite. Come è noto GeoServer può rispondere alle richieste sia come WFS e quindi genera un file GML con le feature, oppure in modalità WMS generando in output un file in qualche formato grafico che deve essere gestito da una applicazione opportuna.

Page 12: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 12

Negli esempi che seguono il DataSet corrisponde ad un insieme di Poligoni con typename “terreni” definiti con coordinate EPSG:4326 nel namespace “lignano”, ogni poligono oltre all’insieme delle coordinate dei punti che lo definisce ha anche i campi numerici Particella e MWShapeID. Consideriamo il primo caso, mediante la richiesta : http://localhost:8080/geoserver/wfs?request=GetFeature&typeName=lignano:TERRENI

Otteniamo un file GML che contiene al suo interno tutte le feature che sono state collegate precedentemente con il nome terreni. Supponiamo ora di volere recuperare solo le feature contenute in un dato bounding box (WINDOW QUERY) , la richiesta sarà effettuata come prima con l’aggiunta alla fine del comando CQL evidenziato in rosso: http://localhost:8080/geoserver/wfs?service=WFS&request=GetFeature&typename=lignano:TERRENI&

CQL_FILTER=BBOX(GEOM,13.09051,44.4039,13.96132,45.70060)

Ed ecco una parte dell’ output, troncato per comodità alla prima feature :

<?xml version="1.0" encoding="UTF-8" ?>

- <wfs:FeatureCollection xmlns="http://www.opengis.net/wfs"

xmlns:wfs="http://www.opengis.net/wfs"

xmlns:topp="http://www.openplans.org/topp"

xmlns:gml="http://www.opengis.net/gml"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.openplans.org/topp

http://localhost:8080/geoserver/wfs/DescribeFeatureType?typeName

=topp:terreni http://www.opengis.net/wfs

http://localhost:8080/geoserver/schemas/wfs/1.0.0/WFS-basic.xsd">

- <gml:boundedBy>

- <gml:Box srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">

<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="."

cs="," ts="">13.14112624,45.69312214

13.14444251,45.69643827</gml:coordinates>

</gml:Box>

</gml:boundedBy>

- <gml:featureMember>

- <topp:terreni fid="terreni.1">

- <topp:the_geom>

- <gml:MultiPolygon

srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">

- <gml:polygonMember>

- <gml:Polygon>

- <gml:outerBoundaryIs>

- <gml:LinearRing>

<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="."

cs="," ts="">13.1433477,45.69583201 13.14375631,45.69585162

13.14410936,45.69525014 13.14350134,45.69489383

13.14336731,45.69510304 13.1432954,45.69516515

13.14319079,45.6952338 13.1431581,45.69528283

13.1433477,45.69583201</gml:coordinates> </gml:LinearRing>

</gml:outerBoundaryIs>

</gml:Polygon>

</gml:polygonMember>

</gml:MultiPolygon>

Page 13: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 13

</topp:the_geom>

<topp:MWShapeID>1</topp:MWShapeID>

<topp:Particella>412</topp:Particella>

</topp:terreni>

</gml:featureMember>

- <gml:featureMember>

Supponiamo ora di voler effettuare una interrogazione che all’interno dell’insieme delle feature terreni restituisca solo le feature che hanno associato un attributo Particella (tipo intero) superiore a 411. http://localhost:8080/geoserver/wfs?service=WFS&request=GetFeature&typename=terreni&CQL_FILTER

=Particella>411

Lanciato il comando su un insieme di feature in cui il Max valore del campo Particella è 412 il risultato sarà la sola forma geometrica con il campo ‘Particella’ settato a 412 :

<?xml version="1.0" encoding="UTF-8" ?>

- <wfs:FeatureCollection xmlns="http://www.opengis.net/wfs"

xmlns:wfs="http://www.opengis.net/wfs"

xmlns:topp="http://www.openplans.org/topp"

xmlns:gml="http://www.opengis.net/gml"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.openplans.org/topp

http://localhost:8080/geoserver/wfs/DescribeFeatureType?typeName

=topp:terreni http://www.opengis.net/wfs

http://localhost:8080/geoserver/schemas/wfs/1.0.0/WFS-basic.xsd">

- <gml:boundedBy>

- <gml:Box srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">

<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="."

cs="," ts="">13.1431581,45.69489383

13.14410936,45.69585162</gml:coordinates>

</gml:Box>

</gml:boundedBy>

- <gml:featureMember>

- <topp:terreni fid="terreni.1">

- <topp:the_geom>

- <gml:MultiPolygon

srsName="http://www.opengis.net/gml/srs/epsg.xml#4326"> - <gml:polygonMember>

- <gml:Polygon>

- <gml:outerBoundaryIs>

- <gml:LinearRing>

<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="."

cs="," ts="">13.1433477,45.69583201 13.14375631,45.69585162

13.14410936,45.69525014 13.14350134,45.69489383

13.14336731,45.69510304 13.1432954,45.69516515

13.14319079,45.6952338 13.1431581,45.69528283

13.1433477,45.69583201</gml:coordinates> </gml:LinearRing>

</gml:outerBoundaryIs>

</gml:Polygon>

</gml:polygonMember>

</gml:MultiPolygon>

</topp:the_geom>

Page 14: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 14

<topp:MWShapeID>1</topp:MWShapeID>

<topp:Particella>412</topp:Particella>

</topp:terreni>

</gml:featureMember>

</wfs:FeatureCollection>

Adesso effettuiamo una selezione sulla tabella STRADE che ritorni I nomi e le corsie delle strade che hanno tra le 1 e 1 corsie. http://localhost:8080/geoserver/wfs?request=GetFeature&typeName=lignano:STRADE&propertyName=

NOME,CORSIE&outputFormat=GML2&CQL_FILTER=CORSIE%20BETWEEN%201%20AND%201

Ed ecco il risultato :

<?xml version="1.0" encoding="UTF-8" ?>

- <wfs:FeatureCollection xmlns="http://www.opengis.net/wfs"

xmlns:wfs="http://www.opengis.net/wfs"

xmlns:lignano="http://localhost/"

xmlns:gml="http://www.opengis.net/gml"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://localhost/

http://localhost:8080/geoserver/wfs/DescribeFeatureType?typeName

=lignano:STRADE http://www.opengis.net/wfs

http://localhost:8080/geoserver/schemas/wfs/1.0.0/WFS-basic.xsd"> - <gml:boundedBy>

- <gml:Box srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">

<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="."

cs="," ts="">13.139177,45.683935

13.148467,45.697082</gml:coordinates> </gml:Box>

</gml:boundedBy>

- <gml:featureMember>

- <lignano:STRADE fid="STRADE.1">

<lignano:NOME>Lungomare marin</lignano:NOME>

<lignano:CORSIE>1</lignano:CORSIE>

</lignano:STRADE>

</gml:featureMember>

- <gml:featureMember>

- <lignano:STRADE fid="STRADE.2">

<lignano:NOME>Lungomare Trieste</lignano:NOME>

<lignano:CORSIE>1</lignano:CORSIE>

</lignano:STRADE>

</gml:featureMember>

- <gml:featureMember>

- <lignano:STRADE fid="STRADE.8">

<lignano:NOME>Darsena</lignano:NOME>

<lignano:CORSIE>1</lignano:CORSIE>

</lignano:STRADE>

</gml:featureMember>

</wfs:FeatureCollection>

Page 15: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 15

Passiamo ora ad una query spaziale in formato .xml , vogliamo ottenere i poligoni intersecati dal punto di coordinate lat e long : 13.1437,45.6956. La URL sarà : http://localhost:8080/geoserver/wfs

e il corpo del messaggio xml : <wfs:GetFeature service="WFS" version="1.0.0" outputFormat="GML2" xmlns:topp="http://www.openplans.org/topp"

xmlns:wfs="http://www.opengis.net/wfs"

xmlns="http://www.opengis.net/ogc"

xmlns:gml="http://www.opengis.net/gml"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.opengis.net/wfs

http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd">

<wfs:Query typeName="lignano:TERRENI">

<Filter>

<Intersects>

<PropertyName>GEOM</PropertyName>

<gml:Point srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">

<gml:coordinates>13.1437,45.6956</gml:coordinates>

</gml:Point>

</Intersects>

</Filter>

</wfs:Query>

</wfs:GetFeature>

Quanto sopra è equivalente alla richiesta url di seguito : http://localhost:8080/geoserver/wfs?request=GetFeature&typeName=lignano:TERRENI&outputFormat=

GML2&CQL_FILTER=INTERSECT(GEOM,%20POINT%20(13.1437%2045.6956))

E questo sarà il risultato corretto (ovvero la particella numero 412 con tutti i campi visibili, in quanto non è stato impostato nessun filtro :

<?xml version="1.0" encoding="UTF-8" ?>

- <wfs:FeatureCollection xmlns="http://www.opengis.net/wfs"

xmlns:wfs="http://www.opengis.net/wfs"

xmlns:lignano="http://localhost/"

xmlns:gml="http://www.opengis.net/gml"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://localhost/

http://localhost:8080/geoserver/wfs/DescribeFeatureType?typeName

=lignano:TERRENI http://www.opengis.net/wfs

http://localhost:8080/geoserver/schemas/wfs/1.0.0/WFS-basic.xsd"> - <gml:boundedBy>

- <gml:Box srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">

<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="."

cs="," ts="">13.143158,45.694894

13.144109,45.695852</gml:coordinates> </gml:Box>

Page 16: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 16

</gml:boundedBy>

- <gml:featureMember>

- <lignano:TERRENI fid="TERRENI.1">

<lignano:PARTICELLA>412</lignano:PARTICELLA>

<lignano:NOME>Mediacasa sas</lignano:NOME>

<lignano:CF_P_IVA>1654213213</lignano:CF_P_IVA>

<lignano:EDIFICABIL>SI</lignano:EDIFICABIL>

<lignano:FABBRICATO>NO</lignano:FABBRICATO>

<lignano:INDIRIZO>via ROSA DEI VENTI 3</lignano:INDIRIZO>

- <lignano:GEOM>

- <gml:Polygon

srsName="http://www.opengis.net/gml/srs/epsg.xml#4326"> - <gml:outerBoundaryIs>

- <gml:LinearRing>

<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="."

cs="," ts="">13.143348,45.695832 13.143158,45.695283

13.143191,45.695234 13.143295,45.695165 13.143501,45.694894

13.144109,45.69525 13.143756,45.695852

13.143348,45.695832</gml:coordinates>

</gml:LinearRing>

</gml:outerBoundaryIs>

</gml:Polygon>

</lignano:GEOM>

</lignano:TERRENI>

</gml:featureMember>

</wfs:FeatureCollection>

In questo caso abbiamo calcolato l’intersezione di un punto con un poligono, nel caso dell’ intersezione di un punto con una linea invece è conveniente invece di prendere come argomento dell’interrogazione il punto, prendere un poligono o un punto calcolando attorno un buffer per calcolare l’intersezione, altrimenti la query probabilmente non produrrà nulla in output. Che è quello che accade nell’ esempio pratico descritto di seguito in cui con dalle coordinate di un punto vengono selezionate strade e terreni, se si trattasse di un singolo punto probabilmente si riuscirebbe a selezionare solamente i poligoni dei terreni perché le linee non sarebbero selezionabili.

Elenco delle funzioni supportate Di seguito sono riportate le funzioni matematiche supportate dal server e anche le funzioni spaziali, queste ultime nel caso siano operazioni spaziali tra oggetti non elementari , ad esempio una interrogazione che esegue una query di tipo touch su un insieme di feature, vengono eseguite recuperando con un interrogazione il file GML che descrive la feature oggetto della query, e poi viene mandata una richiesta in xml sul set da verificare che conterrà anche la feature recuperata in precedenza.

<ogc:Function_Name nArgs="1">abs</ogc:Function_Name>

<ogc:Function_Name nArgs="1">abs_2</ogc:Function_Name>

<ogc:Function_Name nArgs="1">abs_3</ogc:Function_Name>

<ogc:Function_Name nArgs="1">abs_4</ogc:Function_Name>

<ogc:Function_Name nArgs="1">acos</ogc:Function_Name>

<ogc:Function_Name nArgs="1">Area</ogc:Function_Name>

<ogc:Function_Name nArgs="1">asin</ogc:Function_Name>

<ogc:Function_Name nArgs="1">atan</ogc:Function_Name>

<ogc:Function_Name nArgs="2">atan2</ogc:Function_Name>

<ogc:Function_Name nArgs="3">between</ogc:Function_Name>

Page 17: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 17

<ogc:Function_Name nArgs="1">boundary</ogc:Function_Name>

<ogc:Function_Name

nArgs="1">boundaryDimension</ogc:Function_Name> <ogc:Function_Name nArgs="2">buffer</ogc:Function_Name>

<ogc:Function_Name

nArgs="3">bufferWithSegments</ogc:Function_Name> <ogc:Function_Name nArgs="1">ceil</ogc:Function_Name>

<ogc:Function_Name nArgs="1">centroid</ogc:Function_Name>

<ogc:Function_Name

nArgs="1">Collection_Average</ogc:Function_Name>

<ogc:Function_Name nArgs="1">Collection_Bounds</ogc:Function_Name>

<ogc:Function_Name nArgs="1">Collection_Count</ogc:Function_Name>

<ogc:Function_Name nArgs="1">Collection_Max</ogc:Function_Name>

<ogc:Function_Name nArgs="1">Collection_Median</ogc:Function_Name>

<ogc:Function_Name nArgs="1">Collection_Min</ogc:Function_Name>

<ogc:Function_Name nArgs="1">Collection_Sum</ogc:Function_Name>

<ogc:Function_Name nArgs="1">Collection_Unique</ogc:Function_Name>

<ogc:Function_Name nArgs="2">contains</ogc:Function_Name>

<ogc:Function_Name nArgs="1">convexHull</ogc:Function_Name>

<ogc:Function_Name nArgs="1">cos</ogc:Function_Name>

<ogc:Function_Name nArgs="2">crosses</ogc:Function_Name>

<ogc:Function_Name nArgs="2">difference</ogc:Function_Name>

<ogc:Function_Name nArgs="1">dimension</ogc:Function_Name>

<ogc:Function_Name nArgs="2">disjoint</ogc:Function_Name>

<ogc:Function_Name nArgs="2">distance</ogc:Function_Name>

<ogc:Function_Name nArgs="1">double2bool</ogc:Function_Name>

<ogc:Function_Name nArgs="1">endPoint</ogc:Function_Name>

<ogc:Function_Name nArgs="1">envelope</ogc:Function_Name>

<ogc:Function_Name nArgs="2">EqualInterval</ogc:Function_Name>

<ogc:Function_Name nArgs="2">equalsExact</ogc:Function_Name>

<ogc:Function_Name

nArgs="3">equalsExactTolerance</ogc:Function_Name>

<ogc:Function_Name nArgs="2">equalTo</ogc:Function_Name>

<ogc:Function_Name nArgs="1">exp</ogc:Function_Name>

<ogc:Function_Name nArgs="1">exteriorRing</ogc:Function_Name>

<ogc:Function_Name nArgs="1">floor</ogc:Function_Name>

<ogc:Function_Name nArgs="1">geometryType</ogc:Function_Name>

<ogc:Function_Name nArgs="1">geomFromWKT</ogc:Function_Name>

<ogc:Function_Name nArgs="1">geomLength</ogc:Function_Name>

<ogc:Function_Name nArgs="2">getGeometryN</ogc:Function_Name>

<ogc:Function_Name nArgs="1">getX</ogc:Function_Name>

<ogc:Function_Name nArgs="1">getY</ogc:Function_Name>

<ogc:Function_Name nArgs="1">getZ</ogc:Function_Name>

<ogc:Function_Name nArgs="2">greaterEqualThan</ogc:Function_Name>

<ogc:Function_Name nArgs="2">greaterThan</ogc:Function_Name>

<ogc:Function_Name nArgs="2">IEEEremainder</ogc:Function_Name>

<ogc:Function_Name nArgs="3">if_then_else</ogc:Function_Name>

<ogc:Function_Name nArgs="11">in10</ogc:Function_Name>

<ogc:Function_Name nArgs="3">in2</ogc:Function_Name>

<ogc:Function_Name nArgs="4">in3</ogc:Function_Name>

<ogc:Function_Name nArgs="5">in4</ogc:Function_Name>

<ogc:Function_Name nArgs="6">in5</ogc:Function_Name>

<ogc:Function_Name nArgs="7">in6</ogc:Function_Name>

<ogc:Function_Name nArgs="8">in7</ogc:Function_Name>

Page 18: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 18

<ogc:Function_Name nArgs="9">in8</ogc:Function_Name>

<ogc:Function_Name nArgs="10">in9</ogc:Function_Name>

<ogc:Function_Name nArgs="1">int2bbool</ogc:Function_Name>

<ogc:Function_Name nArgs="1">int2ddouble</ogc:Function_Name>

<ogc:Function_Name nArgs="1">interiorPoint</ogc:Function_Name>

<ogc:Function_Name nArgs="2">interiorRingN</ogc:Function_Name>

<ogc:Function_Name nArgs="2">intersection</ogc:Function_Name>

<ogc:Function_Name nArgs="2">intersects</ogc:Function_Name>

<ogc:Function_Name nArgs="1">isClosed</ogc:Function_Name>

<ogc:Function_Name nArgs="1">isEmpty</ogc:Function_Name>

<ogc:Function_Name nArgs="2">isLike</ogc:Function_Name>

<ogc:Function_Name nArgs="1">isNull</ogc:Function_Name>

<ogc:Function_Name nArgs="1">isRing</ogc:Function_Name>

<ogc:Function_Name nArgs="1">isSimple</ogc:Function_Name>

<ogc:Function_Name nArgs="1">isValid</ogc:Function_Name>

<ogc:Function_Name nArgs="3">isWithinDistance</ogc:Function_Name>

<ogc:Function_Name nArgs="1">length</ogc:Function_Name>

<ogc:Function_Name nArgs="2">lessEqualThan</ogc:Function_Name>

<ogc:Function_Name nArgs="2">lessThan</ogc:Function_Name>

<ogc:Function_Name nArgs="1">log</ogc:Function_Name>

<ogc:Function_Name nArgs="2">max</ogc:Function_Name>

<ogc:Function_Name nArgs="2">max_2</ogc:Function_Name>

<ogc:Function_Name nArgs="2">max_3</ogc:Function_Name>

<ogc:Function_Name nArgs="2">max_4</ogc:Function_Name>

<ogc:Function_Name nArgs="2">min</ogc:Function_Name>

<ogc:Function_Name nArgs="2">min_2</ogc:Function_Name>

<ogc:Function_Name nArgs="2">min_3</ogc:Function_Name>

<ogc:Function_Name nArgs="2">min_4</ogc:Function_Name>

<ogc:Function_Name nArgs="1">not</ogc:Function_Name>

<ogc:Function_Name nArgs="2">notEqualTo</ogc:Function_Name>

<ogc:Function_Name nArgs="1">numGeometries</ogc:Function_Name>

<ogc:Function_Name nArgs="1">numInteriorRing</ogc:Function_Name>

<ogc:Function_Name nArgs="1">numPoints</ogc:Function_Name>

<ogc:Function_Name nArgs="2">overlaps</ogc:Function_Name>

<ogc:Function_Name nArgs="1">parseBoolean</ogc:Function_Name>

<ogc:Function_Name nArgs="1">parseDouble</ogc:Function_Name>

<ogc:Function_Name nArgs="1">parseInt</ogc:Function_Name>

<ogc:Function_Name nArgs="2">pointN</ogc:Function_Name>

<ogc:Function_Name nArgs="2">pow</ogc:Function_Name>

<ogc:Function_Name nArgs="1">PropertyExists</ogc:Function_Name>

<ogc:Function_Name nArgs="2">Quantile</ogc:Function_Name>

<ogc:Function_Name nArgs="0">random</ogc:Function_Name>

<ogc:Function_Name nArgs="2">relate</ogc:Function_Name>

<ogc:Function_Name nArgs="3">relatePattern</ogc:Function_Name>

<ogc:Function_Name nArgs="1">rint</ogc:Function_Name>

<ogc:Function_Name nArgs="1">round</ogc:Function_Name>

<ogc:Function_Name nArgs="1">round_2</ogc:Function_Name>

<ogc:Function_Name nArgs="1">roundDouble</ogc:Function_Name>

<ogc:Function_Name nArgs="1">sin</ogc:Function_Name>

<ogc:Function_Name nArgs="1">sqrt</ogc:Function_Name>

<ogc:Function_Name nArgs="2">StandardDeviation</ogc:Function_Name>

<ogc:Function_Name nArgs="1">startPoint</ogc:Function_Name>

<ogc:Function_Name nArgs="2">strConcat</ogc:Function_Name>

Page 19: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 19

<ogc:Function_Name nArgs="2">strEndsWith</ogc:Function_Name>

<ogc:Function_Name

nArgs="2">strEqualsIgnoreCase</ogc:Function_Name> <ogc:Function_Name nArgs="2">strIndexOf</ogc:Function_Name>

<ogc:Function_Name nArgs="2">strLastIndexOf</ogc:Function_Name>

<ogc:Function_Name nArgs="1">strLength</ogc:Function_Name>

<ogc:Function_Name nArgs="2">strMatches</ogc:Function_Name>

<ogc:Function_Name nArgs="4">strReplace</ogc:Function_Name>

<ogc:Function_Name nArgs="2">strStartsWith</ogc:Function_Name>

<ogc:Function_Name nArgs="3">strSubstring</ogc:Function_Name>

<ogc:Function_Name nArgs="2">strSubstringStart</ogc:Function_Name>

<ogc:Function_Name nArgs="1">strTrim</ogc:Function_Name>

<ogc:Function_Name nArgs="2">symDifference</ogc:Function_Name>

<ogc:Function_Name nArgs="1">tan</ogc:Function_Name>

<ogc:Function_Name nArgs="1">toDegrees</ogc:Function_Name>

<ogc:Function_Name nArgs="1">toRadians</ogc:Function_Name>

<ogc:Function_Name nArgs="2">touches</ogc:Function_Name>

<ogc:Function_Name nArgs="1">toWKT</ogc:Function_Name>

<ogc:Function_Name nArgs="2">union</ogc:Function_Name>

<ogc:Function_Name nArgs="1">UniqueInterval</ogc:Function_Name>

<ogc:Function_Name nArgs="2">within</ogc:Function_Name>

GeoServer & Oracle

GeoServer supporta come fonte di dati spaziali oltre ai classici shapefile , il cui uso è sconsigliato per utilizzi pesanti, ovvero che vadano oltre a dei semplici test o applicazioni leggere, in quanto possono verificarsi problemi causati dal meccanismo di locking dei file da parte del sistema operativo sottostante. Per questo motivo si consiglia a chi vuole realizzare un sistema GIS robusto di utilizzare un database esterno che possa fornire un adeguato controllo e stabilità durante le operazioni di lettura, scrittura o aggiornamento dei dati. Tra i database supportati in modalità stabile troviamo : PostGIS, Oracle, ArcSDE, DB2 mentre tra quelli supportati ma in via di sviluppo : MySQL, VPF, MapInfo, WFS.

Installazione del supporto Oracle Per motivi legati alla licenza e ridistribuzione su alcuni componenti necessari al funzionamento del collegamento al database Oracle, GeoServer non viene installato di default con questa funzionalità inclusa, ma deve essere aggiunta come PLUG-IN, per fare ciò occorre scaricare due componenti sotto forma di archivi jar: uno chiamato ojdbc14.jar che può essere liberamente scaricato dal sito della Oracle all indirizzo: http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html mentre l’altro file gt2-oracle-spatial.jar è disponibile sulla pagina del sito geoserver.org dove si tratta la connessione al database Oracle. Entrambi i file vanno copiati nella directory [GEOSERVER_HOME]/server/geoserver/WEB-INF/lib/.

Successivamente occorre riavviare il server e per effettuare un test che ci assicuri che l’installazione del

plug-in sia andata a buon fine occorre aprire la pagina di configurazione di GeoServer selezionare Config ->

Data -> DataStores -> New, e se il plug-in è installato correttamente si noteranno nel box a tendina le voci

Oracle e Oracle(OCI), in aggiunta alle voci di default come postgres, properties, shapefile, shapefile (indexed).

Page 20: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 20

Nel caso la copia dei plug-in sia stata effettuata correttamente ma non vengono visualizzate le estensioni Oracle nel menù, è possibile reinstallare GeoServer che a questo punto dovrebbe comprendere le nuove voci.

Oracle & GeoServer in esecuzione sulla stessa macchina Qualora si debba installare il database Oracle e GeoServer sulla sessa macchina occorre rimediare al problema che viene a crearsi in quanto tutte e due i server che andranno in esecuzione contemporaneamente, offriranno la funzionalità di configurazione tramite HTTP all’indirizzo 127.0.0.1 porta 8080 con percorsi diversi, questo produrrà effetti indesiderati (in pratica nessuno dei due servizi sarà funzionante) e quindi sarà necessario spostare la porta di accesso a uno dei servizi di configurazione. Tale problema non si presenta quando viene installato prima geoserver e successivamente Oracle, in quanto quest’ultimo rileva il conflitto sulle porte in fase di installazione e propone una porta alternativa libera. Per effettuare il cambio porta http manualmente, nel caso di Oracle Express e macchina windows basterà lanciare il comando seguente nella console in c:\windows\system32> sqlplus SQL> -- set http port and ftp port

SQL> begin

2 dbms_xdb.sethttpport('80');

3 dbms_xdb.setftpport('2100');

4 end;

5 /

PL/SQL procedure successfully completed.

SQL> select dbms_xdb.gethttpport as "HTTP-Port"

, dbms_xdb.getftpport as "FTP-Port" from dual;

HTTP-Port FTP-Port

---------- ----------

80 2100

Page 21: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 21

Caricamento dei dati spaziali su Oracle Per popolare un database spaziale su Oracle si possono utilizzare i comandi SQL direttamente fornendo le coordinate e le tipologie degli oggetti spaziali che andremo a trattare, oppure è possibile utilizzare degli shapefile (formato file geospaziale vettoriale sviluppato da ESRI ) che in realtà sono una terna di file con estensione .shp .dbf e .shx che contengono gli oggetti spaziali e eventualmente dati “classici” associati agli oggetti spaziali. Fondamentale è la possibilità di creare e gestire tali dati con programmi simili a comuni programmi di grafica vettoriale che permettono la copia, la modifica, il trascinamento e eventualmente la possibilità di utilizzare una mappa georiferita sullo sfondo per ricavare i dati spaziali degli oggetti vettoriali da una foto della realtà sottostante in modo molto immediato. Uno dei programmi open source per poter creare shapefiles con la possibilità di integrare (e georiferire) immagini è MapWindow GIS, ma anche Quantum GIS seppure sia solo alla versione 0.9 è molto ricco di funzioni. Per non parlare poi della possibilità di digitalizzare delle planimetrie cartacee che possono essere convertite in formato vettoriale e poi utilizzate previa conversione nel formato shapefile. Una volta ottenuti gli shapefile possiamo utilizzare il programma console fornito direttamente dalla Oracle shp2sdo (disponibile per ambiente windows e Solaris + linux) che dai singoli shapefile genera altri file: uno con estensione .sql che dopo aver lanciato sqlplus ( e fatto il login con le credenziali dell’ utente) servirà a creare le tabelle necessarie alla memorizzazione dei dati, tramite il comando : @<nomefile>.sql . Una volta terminato correttamente il comando precedente possiamo uscire dalla console SQL e eseguire la seconda fase che servirà per caricare i dati nelle tabelle con il comando da console sqlldr <username>/<password> <nomefile>. Una volta andato a buon fine il caricamento dei dati spaziali e solo per i tipi poligono, è indispensabile dopo aver fatto il login tramite sqlplus eseguire il seguente comando :

EXECUTE SDO_MIGRATE.TO_CURRENT('STATES','GEOM');

(valido solo per versioni Oracle 9.1 e succ.)

Questo comando esegue dei fix rispetto ai dati geometrici contenuti nella tabella di nome ‘STATES’ su SDO_GTYPES ed etypes oltre che alcuni ordinamenti . Senza questo comando quando si andrà a caricare i dati delle features con GeoServer si otterrà un risposta dal server che indica una tabella vuota o un tipo di geometria non definito, più precisamente la risposta sarà questa : The FeatureType '<FEATURE_NThe FeatureType '<FEATURE_NThe FeatureType '<FEATURE_NThe FeatureType '<FEATURE_NAME>' has a NULL extent. HINT: the dataset is AME>' has a NULL extent. HINT: the dataset is AME>' has a NULL extent. HINT: the dataset is AME>' has a NULL extent. HINT: the dataset is emptyemptyemptyempty or has no default or has no default or has no default or has no default geometry attribute. geometry attribute. geometry attribute. geometry attribute. Tale risposta del server è particolarmente inaspettata in quanto i dati geospaziali senza l’ultimo comando sopra menzionato possono venire rappresentati graficamente senza problemi tramite l’applicativo Mapbuilder di Oracle. Una volta che abbiamo caricato correttamente I dati spaziali e il nostro server Oracle è correttamente in funzione possiamo configurare GeoServer perché possa accedere ai dati.

Page 22: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 22

Collegamento a GeoServer di una sorgente di dati spaziali Oracle Per collegare una sorgente di dati spaziali Oracle a GeoServer occorre eventualmente creare un nuovo namespace GML, altrimenti si può utilizzare uno esistente. Una volta effettuato il login nella homepage del server si seleziona Config -> Data -> DataStores -> New

A questo punto si inserisce il nome dell’ identificatore che vogliamo dare al nostro DataStore e si clicca su New, successivamente appare questa schermata dove vengono chieste ulteriori informazioni sui dati da collegare :

Page 23: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 23

Alcune precisazioni: Nella casella host va inserito il nome della macchina su cui gira Oracle, nel caso di windows si fa riferimento al nome del computer, quindi “localhost” o 127.0.0.1 probabilmente non funzioneranno (anzi sicuramente non funzionerà con Oracle 10g e windows XP) , per vedere quale nome inserire possiamo usare l’utility lsnrctl lanciata da console che ci fornirà il nome corretto da inserire e anche alcune informazioni sulle porte utilizzate. Port 1521 è la porta di default utilizzata da Oracle per l’accesso ai dati, ma potrebbe essere stata modificata su alcuni sistemi. User e Password sono quelli dell’utente Oracle proprietario della base si dati. Instance può essere orcl nella versione completa di Oracle, oppure xe se si utilizza Oracle Express. Schema non è un campo obbligatorio ma serve per specificare quale schema collegare, non mettendo nulla si collega tutto relativamente all’user indicato. Osservando la finestra di output di GeoServer, si vede come compaia quello che viene trovato all’interno della base dati oppure eventuali messaggi di errore che compariranno anche nell’interfaccia web. Premendo su Submit se non vengono visualizzati errori si torna alla schermata iniziale e nel menù a tendina sarà disponibile il nuovo DataStore, questo però significa solo che abbiamo collegato una sorgente di dati e non che tali dati siano effettivamente fruibili. A questo punto per rendere effettive le modifiche bisogna selezionare i bottoni Apply e Save in alto a sx, altrimenti le modifiche andranno perse al prossimo riavvio di GeoServer .

Impostazione delle FeatureTypes A questo punto possiamo utilizzare i dati che sono rappresentati all’interno del nostro database, per fare questo dobbiamo creare un nuovo featuretype seguendo il percorso: Config -> Data -> FeatureTypes -> New

Page 24: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 24

Dal menù a tendina selezioniamo il nome della tabella contenente i dati delle feature che dobbiamo utilizzare, nell’ esempio sopra la tabella con nome COUNTIES, poi dando conferma si apre la seconda pagina di configurazione. Qui dobbiamo selezionare uno stile che servirà per rappresentare le feature (stile che può essere uno esistente oppure uno che andremo a creare ex novo), il sistema di riferimento nel quale sono espresse le coordinate spaziali delle feature presenti nel database ( talvolta GeoServer è in grado di rilevare il SRS da solo premendo il testo LOOKUP SRS, altrimenti si dovrà procedere all’ inserimento manuale), il nome da associare alle feature, e poi è obbligatorio riempire il bounding box dell’insieme delle feature presenti nel database. A questo punto possiamo farlo in automatico premendo Generate, questo è anche un primo test per vedere se il server ha recepito bene i dati e la loro rappresentazione. Se i campi si popolano allora il server è riuscito a leggere correttamente gli oggetti spaziali contenuti nel database, altrimenti viene segnalato un errore , il più frequente è : The FeatureType '<FEATURE_NAME>' has a NULL extent. HINT: the dataset is The FeatureType '<FEATURE_NAME>' has a NULL extent. HINT: the dataset is The FeatureType '<FEATURE_NAME>' has a NULL extent. HINT: the dataset is The FeatureType '<FEATURE_NAME>' has a NULL extent. HINT: the dataset is emptyemptyemptyempty or has no default or has no default or has no default or has no default geometry attribute.geometry attribute.geometry attribute.geometry attribute. Questo errore può essere causato da una scorretta procedura di conversione per shapefile o dalla mancanza di indici nelle tabelle, quasi sempre risiede nei dati spaziali contenuti nel database o nelle proprietà ad essi associate.

Se al contrario non viene generato nessun errore possiamo avere immediatamente un riscontro grafico andando nella homepage di configurazione e selezionando demo e poi map preview, a questo punto avremo un elenco delle feature collegate al server e la possibilità di visualizzarle in vari formati, come mappe OpenLayers (Zoomabili e scorrevoli ) , ma anche PDF o SVG .

Page 25: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 25

Un esempio pratico

Supponiamo di voler realizzare un GIS per un comune del FVG, per poter dimostrare alcune delle funzionalità di GeoServer andremo a creare un applicazione banale che tramite interfaccia web visualizza alcuni dati del catasto come la corrispondenza delle particelle del catasto con i relativi proprietari, alcune infrastrutture pubbliche come le strade e le immagini raster provenienti da telerilevamento. Chiaramente questo esempio non vuole essere una base per uno sviluppo applicativo reale ma semplicemente un esempio di come presentare delle funzionalità offerte dal pacchetto mediante dati pseudo-reali. Segue che non sono oggetto di questo esempio problematiche complesse che si presentano in casi reali quali l’acquisizione dei dati con le relativa precisione in termini di coordinate e in termini di oggetti vettoriali che vengono anche essi referenziati nello spazio, piuttosto che modelli di basi di dati sufficientemente ricchi da rappresentare una buona modellazione della realtà per un utilizzo reale. Neppure si vuole offrire una proposta di approccio metodologico al problema della realizzazione di un GIS reale, ma una semplice presentazione applicativa di alcune delle procedure da seguire e delle funzionalità offerte dai pacchetti open source. Nel caso si debba implementare realmente un GIS occorrono delle valutazioni e assunzioni su aspetti complessi che non sono nello scopo di questo esempio. Per questo specifico esempio è stata scelta la porzione EST del comune di Lignano Sabbiadoro, che ha la particolarità di essere delimitata su tre lati dal mare.

Requisiti Si vuole realizzare un sistema che sia in grado di visualizzare un immagine del territorio in oggetto, zoomabile e traslabile, che visualizzi le coordinate spaziali di ogni singolo punto del territorio, e che sia possibile sovrapporre a questa immagine i confini dei terreni come risultano dai dati della particella riferita al catasto oltre che i tracciati delle strade. Deve essere possibile selezionando un punto dei terreni recuperare le informazioni riguardo al proprietario, l’edificabilità, la presenza di fabbricati sul terreno , e il numero di particella. Selezionando invece un punto della strada si vuole recuperare il nome, numero di corsie, larghezza in metri.

Modello Concettuale Al livello superiore abbiamo l’entità comune che è composta da una collezione di oggetti spaziali , consideriamo come parte dell’entità comune, l’entità spaziale “strada” che può essere in overlap ad esempio quando due strade si incrociano, e anche l’entità “terreno” che al contrario non può sovrapporsi . Entrambe le entità hanno la chiave numerica SHAPE_ID e alcuni attributi, inoltre l’entità “terreno” è associata alla relazione di possesso da parte del proprietario. Ovviamente tale relazione in questo schema di esempio è impostata a 1:1 sul primo arco, ovvero ogni terreno ha un proprietario mentre lo stesso proprietario può possedere più terreni, naturalmente nei casi reali un terreno può avere più proprietari e qualche proprietario potrebbe non avere nessun terreno al momento. Così come si può notare che normalmente le strade possono cambiare il numero di corsie a seconda del tratto, così pure per la larghezza pur mantenendo lo stesso nome.

Page 26: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Schema Logico Dallo schema sopra esposto cerchiamo di ricavare una soluzione per rappresentare il tutto in un database reale.Per semplicità optiamo per la creazione di e l’altra per il tipo di dato “strada” , quindi terreni e i dati del proprietario verranno replicati terreni. In entrambe la tabelle si possono notare i campi GEOM che rappresentano la vera e propria informazione spaziale, e i campi SHAPE_ID che sono invece le chiavi delle rispettive tabelle. CREATE TABLE TERRENI ( SHAPE_ID NUMBER(38) PRIMARY KEY, Particella NUMBER, Nome VARCHAR2(16), CF P.IVA VARCHAR2(13), Edificabile VARCHAR2(10), Fabbricato VARCHAR2(10), Indirizzo VARCHAR2(30), GEOM MDSYS.SDO_GEOMETRY); CREATE TABLE STRADE ( SHAPE_ID NUMBER(38) PRIMARY KEY, Nome VARCHAR2(20), Corsie NUMBER, Larghezza NUMBER, GEOM MDSYS.SDO_GEOMETRY);

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 26

Dallo schema sopra esposto cerchiamo di ricavare una soluzione per rappresentare il tutto in un database tà optiamo per la creazione di sole due differenti tabelle una per il tipo di dato “terreno”

e l’altra per il tipo di dato “strada” , quindi il numero di righe della tabella terreni è pari al numero dei i dati del proprietario verranno replicati in più righe nel caso una persona sia p

In entrambe la tabelle si possono notare i campi GEOM che rappresentano la vera e propria informazione spaziale, e i campi SHAPE_ID che sono invece le chiavi delle rispettive tabelle.

MDSYS.SDO_GEOMETRY);

MDSYS.SDO_GEOMETRY);

Dallo schema sopra esposto cerchiamo di ricavare una soluzione per rappresentare il tutto in un database differenti tabelle una per il tipo di dato “terreno”

il numero di righe della tabella terreni è pari al numero dei nel caso una persona sia proprietaria di più

In entrambe la tabelle si possono notare i campi GEOM che rappresentano la vera e propria informazione spaziale, e i campi SHAPE_ID che sono invece le chiavi delle rispettive tabelle.

Page 27: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 27

Elementi utilizzati Per realizzare questa applicazione utilizziamo ovviamente GeoServer , un database spaziale in questo caso Oracle Express Edition 10g e come client per rappresentare i dati un browser web che utilizza le librerie OpenLayers. Il tutto installato su una stessa macchina che utilizza windows XP come sistema operativo. Quindi a parte il sistema operativo della macchina il resto è tutto di libero utilizzo, fatte salve le limitazioni che sono applicate alla versione express di Oracle.

Scelta di un sistema di riferimento spaziale SRS Prima di iniziare occorre scegliere un sistema di riferimento per le coordinate che utilizzeremo , tale sistema di coordinate permetterà di collocare correttamente tutti gli oggetti che verranno utilizzati nel nostro esempio siano essi vettoriali come linee e punti, oppure anche immagini del territorio, quindi dati tipo raster. Nel caso specifico dell’esempio si è scelto di utilizzare il sistema più diffuso di coordinate spaziali, quello terrestre in gradi di latitudine e longitudine, nello specifico corrisponde all’ ID EPSG : 4326 basato sui dati WGS 84.

Creare un immagine georeferenziata, per il livello raster Per realizzare un livello raster (chiamato coverage nell’ambito del server) è necessaria un immagine aerea della zona che andiamo ad inserire, ma l’immagine nel puro formato grafico non può essere caricata sul server, prima occorre georeferenziarla in un formato accettato da GeoServer. A tal proposito sono supportati vari formati commerciali come ArcGrid, ma la scelta è caduta su un formato libero che può essere ottenuto mediante l’immagine e un software che consente di georeferenziare un immagine fornendo alcuni punti e le relative coordinate spaziali in gradi di latitudine e longitudine. , inoltre l’immagine raster vera e propria è stata ottenuta mediante immagini più piccole catturate dal server Google Earth dove la zona in oggetto era rappresentata con un livello di dettaglio buono rispetto ad altre zone della regione. Successivamente i vari frammenti sono stati ricomposti mediante software PaintShopPro per generare un immagine unica che comprende il territorio oggetto di questo esempio.

Database Oracle XE

10g

GeoServer 1.5.4

SI

Browser WEB + Librerie

javascript OpenLayers

Page 28: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 28

Immagine non orientata con il nord verso l’alto.

A questo punto l’immagine ottenuta è priva di riferimenti spaziali ma anche priva di orientamento , c’è da specificare che allo stato attuale le immagini possono essere georeferenziate sia quando esse sono orientate con il nord verso l’alto aggiungendo un file di informazione che comprende informazioni su come interpretare spazialmente i singoli pixel dell’immagine ( valori di scala e coordinate di partenza dei pixel) , oppure si può utilizzare anche un informazione in più che lascia l’immagine orientata in qualsiasi direzione ma viene aggiunta l’informazione riguardo alla rotazione da effettuare per avere il nord verso l’alto. In questo ultimo caso GeoServer non sembra supportare allo stato attuale la rotazione delle immagini, perciò è stato necessario un programma di georeferenziazione che operasse anche una rotazione dell’immagine in modo da posizionarla con il nord verso l’alto. Per questa operazione è stato utilizzato il software Quantum GIS, che tra le varie funzioni ha anche la possibilità di georeferenziare le immagini e ruotarle in modo da porre il nord verso l’alto. A questo punto si sono presi in considerazione degli specifici punti nell’immagine dei quali si è ottenuto il riferimento di latitudine e longitudine, sempre tramite le funzionalità offerte da Google Earth Sicuramente questo procedimento ha introdotto degli errori che sono dovuti alla deformazione dell’immagine e alla interpolazione che è stata sviluppata dal software per fondere le informazioni dei vari punti di riferimento. Il contenuto del file lignano.wld associato all’immagine lignano.tif che contiene tutti i dati necessari per la georeferenziazione è il seguente : 0.000014577594452

0

0

-0.000014577594452

13.084252787449108

45.790244291824777

Creare degli shapefiles Per realizzare delle forme geometriche vettoriali che hanno un rifermento nel sistema di coordinate terrestri, il procedimento in se è simile al disegno di elementi grafici vettoriali con i numerosi pacchetti , in questo caso visto che gli appezzamenti di terreno sono visibili dall’immagine del satellite e l’immagine è

Page 29: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 29

stata georeferenziata possiamo utilizzare tale immagine come sfondo e disegnarci sopra i nostri oggetti vettoriali (poligoni, linee , punti) , eventualmente separandoli per tipologia in differenti layer che verranno salvati con le coordinate corrispondenti. Una funzionalità molto comoda è quella di poter associare durante l’inserimento dei dati vettoriali anche dei campi non vettoriali tipo stringa, integer, o float che vengono associati agli oggetti visibili graficamente in modo molto immediato. Per questo procedimento si può utilizzare ad esempio sia MapWindow che Quantum GIS , entrambi hanno funzionalità simili per quanto riguarda le gestione sia dei raster che dei layer vettoriali. Ogni livello ha un tipo di dato predefinito, ad es. Punto , Linea, Poligono , ed ha delle proprietà che possono essere cambiate anche successivamente all’inserimento degli oggetti. Tali livelli layer corrisponderanno ad altrettanti shapefile che possono essere utilizzati come tali oppure, convertiti e caricati su un database spaziale . In questo esempio sono stati convertiti tramite shp2sdo e caricati su database Oracle Express Edition. Ecco nella foto sottostante i terreni etichettati con il loro numero di particella, le strade rappresentate come linee spezzate e il tutto sovrapposto all’immagine raster del territorio sottostante, in questo caso il nord è già impostato verso l’alto. Tramite lo stesso software è possibile aggiungere attributi associati alle forme geometriche ed eventualmente inserire anche dei valori.

Page 30: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 30

Page 31: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 31

Convertire gli shapefile e caricarli sul DB Oracle A questo punto ottenuti gli shapefile terreni e strade non rimane che convertirli tramite l’utility shp2sdo.exe e in uscita avremo un file con le istruzioni per creare la tabella che ospiterà i dati più un file che contiene i dati che verranno caricati, ecco il file terreni.sql : -- terreni.sql -- -- This script creates the spatial table. -- -- Execute this script before attempting to use SQL*Loader -- to load the terreni.ctl file. -- -- This script will also populate the USER_SDO_GEOM_METADATA table. -- Loading the .ctl file will populate the TERRENI table. -- -- To load the .ctl file, run SQL*Loader as follows -- substituting appropriate values: -- sqlldr username/password terreni.ctl -- -- After the data is loaded in the TERRENI table, you should -- migrate polygon data and create the spatial index -- -- Creation Date : Mon Dec 03 20:13:08 2007 -- Copyright 1999, 2004 Oracle Corporation -- All rights reserved -- DROP TABLE TERRENI; CREATE TABLE TERRENI ( SHAPE_ID NUMBER(38) PRIMARY KEY, Particella NUMBER, Nome VARCHAR2(16), CF_P_IVA VARCHAR2(13), Edificabile VARCHAR2(10), Fabbricato VARCHAR2(10), Indirizzo VARCHAR2(30), GEOM MDSYS.SDO_GEOMETRY); DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'TERRENI' AND COLUMN_NAME = 'GEOM' ; INSERT INTO USER_SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) VALUES ('TERRENI', 'GEOM', MDSYS.SDO_DIM_ARRAY (MDSYS.SDO_DIM_ELEMENT('X', 13.139379662, 13.151123667, 0.000000050), MDSYS.SDO_DIM_ELEMENT('Y', 45.685847731, 45.698387437, 0.000000050) ), NULL); COMMIT; Ed il file strade.sql: -- strade.sql -- -- This script creates the spatial table. -- -- Execute this script before attempting to use SQL*Loader

Page 32: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 32

-- to load the strade.ctl file. -- -- This script will also populate the USER_SDO_GEOM_METADATA table. -- Loading the .ctl file will populate the STRADE table. -- -- To load the .ctl file, run SQL*Loader as follows -- substituting appropriate values: -- sqlldr username/password strade.ctl -- -- After the data is loaded in the STRADE table, you should -- migrate polygon data and create the spatial index -- -- Creation Date : Mon Dec 03 20:12:24 2007 -- Copyright 1999, 2004 Oracle Corporation -- All rights reserved -- DROP TABLE STRADE; CREATE TABLE STRADE ( SHAPE_ID NUMBER(38) PRIMARY KEY, Nome VARCHAR2(20), Corsie NUMBER, Larghezza NUMBER, GEOM MDSYS.SDO_GEOMETRY); DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'STRADE' AND COLUMN_NAME = 'GEOM' ; INSERT INTO USER_SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) VALUES ('STRADE', 'GEOM', MDSYS.SDO_DIM_ARRAY (MDSYS.SDO_DIM_ELEMENT('X', 13.135910673, 13.148466720, 0.000000050), MDSYS.SDO_DIM_ELEMENT('Y', 45.683935230, 45.697081945, 0.000000050) ), NULL); COMMIT;

A questo punto possiamo lanciare questi due file di comando sql per generare le tabelle che ospiteranno i dati spaziali e non. A questo punto prima di procedere con il comando sqlldr occorre tassativamente cambiare settaggio per il sparatore dei decimali se il sistema windows che si sta usando non è impostato sull’americano: c:> SET NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1

Ora è possibile caricare i dati, altrimenti verrebbe generato un file di errore perché i valori con decimali non vengono correttamente riconosciuti e la tabella resterebbe vuota. Come è altrettanto indispensabile eseguire il comando (valido per Oracle 9i o successivi) per poter accedere ai tipi di dato poligoni : EXECUTE SDO_MIGRATE.TO_CURRENT('TERRENI','GEOM');EXECUTE SDO_MIGRATE.TO_CURRENT('TERRENI','GEOM');EXECUTE SDO_MIGRATE.TO_CURRENT('TERRENI','GEOM');EXECUTE SDO_MIGRATE.TO_CURRENT('TERRENI','GEOM'); Per ogni tabella di Oracle che contiene i dati spaziali occorre definire un indice spaziale, altrimenti nonostante il caricamento di dati avvenga quando viene eseguita una richiesta non viene recuperata nessuna feature. Per creare l’indice spaziale:

Page 33: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 33

CREATE INDEX TERRENI_IDX

ON TERRENI(GEOM)

INDEXTYPE IS MDSYS.SPATIAL_INDEX;

A questo punto i dati sono pronti per essere utilizzati da GeoServer.

Caricamento dell’immagine raster Una volta ultimato è il caricamento dei dati è necessario configurare GeoServer perché possa utilizzare tali dati, la prima cosa da fare è creare un namespace per evitare conflitti con settaggi relativi alle demo installate assieme al server. Nell’esempio si utilizzerà il namespace lignano con il URI settato a localhost.

A questo punto copiamo l’immagine georeferenziata con il world file associato nella directory geoserver/datadir/coverages/lignano e seguiamo la procedura per l’aggiunta di un nuovo coverage, si seleziona “A raster file accompanied by a spatial data file”.

Successivamente si forniscono il tipo ed il percorso del file raster, come di consueto il file spaziale deve differire solo per l’estensione.

L’ultimo passo richiede di inserire le coordinate di riferimento, ma di solito vengono recuperate in automatico :

Page 34: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 34

Se non vengono segnalati errori possiamo selezionare Apply e Save in alto a sx, e l’immagine georeferenziata sarà visibile nella pagina demo del server.

Configurazione di GeoServer per l’utilizzo dei dati del DB Oracle Per questa fase è sufficiente seguire la procedura descritta in precedenza per collegare un database, quindi creare un nuovo datastore associato al namespace lignano per ognuna delle due tabelle “STRADE” e “TERRENI”. Successivamente due nuove featuretype con due stili associati, uno tipo poligono per i terreni e l’altro tipo linea per le strade.

Creazione di un client mediante l’utilizzo di OpenLayers Una volta settato correttamente il server si può accedere ai servizi offerti tramite interfaccia web, per questo scopo ci viene in aiuto la libreria javascript OpenLayers . Tramite questa libreria, realizzata per supportare le più comuni funzioni di gestione mappe, si possono visualizzare, modificare e perfino eseguire interrogazioni sui dati gestiti dal server. La libreria può essere prelevata in remoto sul sito openlayers.org oppure semplicemente si utilizza la copia installata in locale assieme a GeoServer . Per avere rapidamente un po’ di codice HTML che ci illustri come utilizzare la libreria possiamo aprire la pagina demo e visualizzare il codice delle pagine che vengono generate. <?xml version="1.0" encoding="utf-8"?>

Page 35: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 35

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>OpenLayers map preview</title> <style type="text/css"> #map { width: 600px; height: 550px; border: 1px solid black; } </style> <script src="http://localhost:8080/geoserver/openlayers/OpenLayers.js" type="text/javascript"> </script> <script defer="defer" type="text/javascript"> var map; var untiled; var untiled2; var untiled3; var tiled; function setHTML(response) { OpenLayers.Util.getElement('nodelist').innerHTML = response.responseText; }; function init(){ map = new OpenLayers.Map('map', {controls:[], 'projection': 'EPSG:4326', 'units':'degrees'}); OpenLayers.IMAGE_RELOAD_ATTEMPTS = 5; // setup untiled layer // untiled corrisponde al livello raster untiled = new OpenLayers.Layer.WMS.Untiled( "lignano:lignano", "http://localhost:8080/geoserver/wms", { height: '750', width: '800', layers: 'lignano:lignano', styles: '', srs: 'EPSG:4326', format: 'image/png' }, {maxExtent: bounds, maxResolution: 1.1357243322099309E-4, projection: "EPSG:4326"} ); untiled.ratio=1; untiled.setVisibility(true, true); // viene aggiunto map.addLayer(untiled); // untiled2 corrisponde al livello dei poligoni terreno untiled2 = new OpenLayers.Layer.WMS.Untiled( "lignano:TERRENI", "http://localhost:8080/geoserver/wms", {

Page 36: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 36

height: '750', width: '800', layers: 'lignano:TERRENI', transparent:'true', styles: '', srs: 'EPSG:4326', format: 'image/png' }, {maxExtent: bounds, maxResolution: 1.1357243322099309E-4, projection: "EPSG:4326"} ); untiled2.ratio=1; untiled2.setVisibility(false, false); untiled2.setIsBaseLayer(false); map.addLayer(untiled2); // untiled 3 corrisponde al livello delle linee strade untiled3 = new OpenLayers.Layer.WMS.Untiled( "lignano:STRADE", "http://localhost:8080/geoserver/wms", { height: '750', width: '800', layers: 'lignano:STRADE', transparent:'true', styles: '', srs: 'EPSG:4326', format: 'image/png' }, {maxExtent: bounds, maxResolution: 1.1357243322099309E-4, projection: "EPSG:4326"} ); untiled3.ratio=1; untiled3.setVisibility(false, false); untiled3.setIsBaseLayer(false); map.addLayer(untiled3); // setup controls and initial zooms map.addControl(new OpenLayers.Control.PanZoomBar({div:$('nav')})); map.addControl(new OpenLayers.Control.MouseDefaults()); map.addControl(new OpenLayers.Control.Scale($('scale'))); map.addControl(new OpenLayers.Control.MousePosition({element: $('position')})); map.addControl(new OpenLayers.Control.LayerSwitcher()); map.addControl(new OpenLayers.Control.OverviewMap()); map.zoomToExtent(bounds); // support GetFeatureInfo map.events.register('click', map, function (e) { OpenLayers.Util.getElement('nodelist').innerHTML = "Caricamento... attendere..."; // Interrogazione sul layer TERRENI var url = map.layers[1].getFullRequestString({ REQUEST: "GetFeatureInfo", EXCEPTIONS: "application/vnd.ogc.se_xml", BBOX: map.getExtent().toBBOX(), X: e.xy.x, Y: e.xy.y,

Page 37: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 37

INFO_FORMAT: 'text/html', QUERY_LAYERS: map.layers[1].params.LAYERS, FEATURE_COUNT: 50, layers: 'lignano:TERRENI,lignano:STRADE', styles: '', srs: 'EPSG:4326', WIDTH: map.size.w, HEIGHT: map.size.h}, "http://localhost:8080/geoserver/wms" ); OpenLayers.loadURL(url, '', this, setHTML,setHTML); // Interrogazione sul layer STRADE var url = map.layers[2].getFullRequestString({ REQUEST: "GetFeatureInfo", EXCEPTIONS: "application/vnd.ogc.se_xml", BBOX: map.getExtent().toBBOX(), X: e.xy.x, Y: e.xy.y, INFO_FORMAT: 'text/html', QUERY_LAYERS: map.layers[2].params.LAYERS, FEATURE_COUNT: 50, layers: 'lignano:TERRENI,lignano:STRADE', styles: '', srs: 'EPSG:4326', WIDTH: map.size.w, HEIGHT: map.size.h}, "http://localhost:8080/geoserver/wms" ); OpenLayers.loadURL(url, '', this, setHTML,setHTML); OpenLayers.Util.getElement('nodelist').innerHTML = "Caricamento... attendere."; Event.stop(e); }); } </script> </head> <body onload="init()"> <table> <tr> <td style="width:40px" valign="middle">&nbsp;</td> <td colspan="3" align="right"><!-- Switch layers when links are pressed --> <a id="untiledLink" href="#" onclick="map.removeLayer(tiled);map.addLayer(untiled)">Untiled</a> <a id="tiledLink" href="#" onclick="map.removeLayer(untiled);map.addLayer(tiled);">Tiled</a> </td> </tr> <tr> <td style="width:40px" valign="middle">&nbsp;</td> <td colspan="3"><div id="map"></div></td> </tr> <tr> <td style="width:40px" valign="middle"><div id="nav"></div></td> <td><div id="scale"></div></td>

Page 38: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 38

<td/></td> <td align="right"><div id="position"></div></td> </tr> <tr> <td style="width:40px" valign="middle">&nbsp;</td> <th>&nbsp;</th> <td/></td> <td align="right">&nbsp;</td> </tr> </table> <div id="nodelist">Click on the map to get feature infos</div> </body> </html> A questo punto otteniamo nella finestra del browser una mappa che è possibile zoomare, trascinare con il mouse. Inoltre a destra possiamo notare due ulteriori controlli, uno per selezionare i layer da sovrapporre all’immagine raster, e l’altro che presenta una vista di insieme e la posizione della finestra attualmente visualizzata. Inoltre in basso a destra si possono notare le coordinate spaziali (del sistema di riferimento scelto) del puntatore del mouse in ogni istante. Facendo click con il mouse sopra un qualsiasi punto della mappa viene lanciata una richiesta di interrogazione al server che richiede quali sono gli oggetti geometrici che intersecano il punto indicato dal cursore sulla mappa. In realtà l’intersezione viene valutata su un poligono attorno al punto ricavato dalla posizione del mouse, altrimenti utilizzando solo un punto sarebbe molto difficile selezionare le strade. Se la richiesta individua uno o più oggetti geometrici vengono riportati il nome della tabella e tutti i valori contenuti nei campi associati all’oggetto geometrico. Alcune funzionalità cambiano da browser a browser, per esempio Explorer 6.0 non supporta i livelli di trasparenza nei png, mentre il Firefox non gestisce connessioni distinte per ogni layer. Explorer 7 sembra il Browser che crea meno problemi di gestione delle funzionalità. Ecco un immagine del risultato finale:

Page 39: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 39

Page 40: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 40

Glossario

CITE Compliance & Interoperability Testing & Evaluation, Un iniziativa del OGC per testare la conformità alle specifiche del consorzio e in particolar modo l’interoperabilità. Se superati i processi di testing, il software può utilizzare il logo che ne garantisce la conformità :

Coverage Sono dei dati raster, in altre parole un immagine o un set di immagini. Coverage Store Il luogo dove GeoServer immagazzina i dati raster, di solito una directory. CRS coordinate reference system Datastore

Una fonte di dati spaziali, può essere un file o un insieme di files o una connessione a un database (ev. remoto)

EPSG European Petroleum Survey Group, comunità scientifica che ha messo a punto l’ EPSG Geodetic Parameter Set

GML Geographical Markup Language, tipo di documento in formato XML che rappresenta informazione geografica.

OGC Open Geospatial Consortium , la principale organizzazione che gestisce gli standard nel panorama geospaziale, simile al più famoso W3C per il web ma focalizzato sulle applicazioni geospaziali. Le due principali specifiche sono il WFS e il WMS, e GeoServer rappresenta un implementazione di riferimento sia del WFS che del WMS.

JDK

Java Development Kit , tool free di sviluppo applicazioni java scaricabile dal sito www.java.com KML

È un formato di file per visualizzare dati geografici in un Earth browser, come Google Earth, Google Maps, e Google Maps for mobile. KML utilizza una struttura basata sui tag con elementi annidati e attributi ed è basata sullo standard XML .

OWS OGC Web Services Shapefile SHP

Lo Shapefile ESRI è un popolare formato vettoriale per sistemi informativi geografici. Il formato è stato sviluppato e regolato da ESRI ed emesso come (quasi) Open Source, allo scopo di accrescere l'interoperabilità fra i sistemi ESRI e altri GIS. Di fatto è diventato uno standard per il dato vettoriale spaziale, e viene usato da una grande varietà di sistemi GIS. Con "shapefile" si indica di norma un insieme di file con estensione .shp, .dbf, .shx, altre che hanno in comune il prefisso dei nomi (per es. "laghi.*"). Spesso con shapefile si indica però solo i file ".shp". Tuttavia questo file da solo è incompleto poiché interpretazione ed utilizzo dipendono dagli altri file. Gli shapefile descrivono spazialmente punti, poligoni, polilinee utilizzabili, ad es., per rappresentare stagni, laghi e fiumi, rispettivamente. A ciascun elemento possono essere associati ulteriori attributi che descrivono le voci (ad es. nome o temperatura).

Page 41: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 41

SRID Spatial Reference IDentifier, specifica il sistema di coordinate spaziali per un sistema GIS. WCS

Web Coverage Service, supporta l’interscambio di dati geospaziali come "coverages" che contengono valori o proprietà di dati geospaziali. Diversamente dal Web Map Service, che ritorna mappe statiche (renderizzate dal lato server come immagini), il Web Coverage Service fornisce l’accesso alle informazioni spaziali intatte (unrendered), come necessarie per un client-side rendering, multi-valued coverages, e come ingressi nei modelli scientifici e altri clients oltre i semplici visualizzatori. Il Web Coverage Service composto da tre operazioni: GetCapabilities ritorna la descrizione del servizio con elementi che descrivono le collezioni di elementi multidimensionali richiesti; GetCoverage ritorna valori o proprietà di una zona geografica, impacchettati in un formato bben noto di coverage; DescribeCoverageType ritorna u a descrizione della struttura dei coverages che il WCS restituisce.

WFS

Web Feature Service ,un WFS permette l’accesso alle features archiviate sul server. Utilizzare un WFS quando si vuole effettuare operazioni come queste:

• esecuzione di query su un dataset e recupero delle features • recupero delle definizioni delle feature (feature's property names and types) • aggiunta di features al dataset • cancellazione di feature dal dataset • update feature in un dataset • lock delle features per impedirne la modifica

Quali sono le differenze tra WFS-T e WFS un WFS-T ("WFS-Transactional") è un WFS che supporta le transazioni - add, delete,

o update delle features.

Il Web Feature Service (WFS) è praticamente una delle principali specifiche dell’ OGC. Fornisce un metodo generico per accedere ai dati geografici in formato “raw” attraverso il web. All’utente generico può fornire una varietà di informazioni incorporate nelle mappe a visualizzare. Parte delle specifiche WMS cercano di implementare questa funzionalità,ma utilizzando un WFS si ottiene un maggior controllo sui metodi di accesso ai dati. I Complex Filters funzionano come l’ equivalente in OWS dello statement SQL WHERE, permettendo ad esempio di selezionare tutte le strade che hanno più di Quattro corsie , sono lunghe più di 2 km e il cui nome inizia per D. Un altra funzione interessante è la gestione delle transazioni, con la possibilità di inserire, aggiornare e cancellare delle feature su una mappa. L’esempio GeoServer UserMap è proprio un applicazione di questo concetto, gli utenti possono zoomare e selezionare’Add User' su uno specifico punto, e verrà inserito nel backend database. I meccanismi di locking aggiungono un controllo sulle transazioni, in modo che gli utenti non sovrascrivano quello che gli altri utenti stanno modificando. In breve, WFS porta ad una maggiore trasparenza ed apertura delle applicazioni che manipolano mappe. Invece di offrire semplicemente la vista dell’immagine della mappa, come il fornitore dei dati decide preventivamente, la grande innovazione è che è l’utente a decidere come e quanta informazione visualizzare. I dati possono essere scaricati e analizzati successivamente, oppure integrati con altri dati, o possono essere utilizzati in cascata con altri web services per realizzare altre soluzioni su web. La possibilità di gestire le transazioni permette ad utenti diversi di lavorare ad uno stesso progetto attraverso internet. Non sono più necessari per gli utenti i privilegi di accesso al database geospaziale, essi possono usare l’interfaccia standard WFS-T. Mediante questo

Page 42: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 42

sistema è possibile gestire soluzioni aperte per I geo-dati, simili a quanto già accade per lo sviluppo di codice open-source attraverso internet.

WMS Web Map Service, visualizza dati geografici come immagini raster (mappe) , dalla versione 1.1.0 GeoServer integra il supporto per il Web Map Service, questo permette agli utenti di visualizzare i dati sia come GML ( attraverso WFS) sia tramite immagini (tramite WMS) .

Page 43: Elaborato di basi di dati spaziali Lastusers.dimi.uniud.it/.../universita/corsi/bds/bds/gallo.pdf · 2007-12-11 · Università Degli Studi Di Udine A.A. 2006/2007 Facoltà di Scienze

Introduzione a GeoServer

Corso di Basi di Dati Spaziali

Pagina 43

Bibliografia Sito ufficiale GeoServer : http://www.geoserver.org Dove è possibile scaricare il pacchetto applicativo GeoServer e consultare specifiche e

manuali Sito ufficiale OGC : http://www.opengeospatial.org Sito ufficiale GeoTools: http://www.geotools.org Sono le librerie utilizzate per lo sviluppo di geoserver Sito ufficiale OpenLayers: http://www.openlayers.org Sito OpenSourceGis: http://opensourcegis.org Sono contenuti numerosi Link ad applicazioni, librerie, utility per il mondo GIS. Sito MapWindow GIS: http://www.mapwindow.org Il programma MapWindow GIS offre numerose funzionalità per la gestione delle immagini

raster, vettoriali e delle sorgenti di dati che vengono poi utilizzate all’interno dei GIS.