Introduzione a GeoServer ed ai servizi OGC

161
Introduzione a GeoServer Andrea Aime, Simone Giannecchini www.geo-solutions.it www.geoserver.org

description

Slide di Introduzione al GeoServer con particolare enfasi sui protocolli OGC da esso supportati. La presentazione ripercorre con buon livello di dettaglio le funzionalità offerte da GeoServer proponendo dove necessario una breve introduzione ai servizi OGC da esso implementati in modo da rendere l'utente autonomo per quanto riguarda la comprensione dei concetti alla base delle funzionalità di GeoServer stesso.

Transcript of Introduzione a GeoServer ed ai servizi OGC

Page 1: Introduzione a GeoServer ed ai servizi OGC

Introduzionea

GeoServer

Andrea Aime, Simone Giannecchini

www.geo-solutions.it

www.geoserver.org

Page 2: Introduzione a GeoServer ed ai servizi OGC

OGC: Open Geospatial Consortium

• www.opengeospatial.org

• Organizzazione internazionale no-profit

• Crea standard per il contenuto, i servizi e l'interscambio di dati

• L'accesso alle specifiche è libero

• I più noti standard:– WMS (Web Map Service)

– WFS (Web Feature Service)

– WCS (Web Coverage Service)

– CS-W (Catalogue service for Web)

– GML (Geographic Markup Language)

– KML (Keyhole Markup Language)

Page 3: Introduzione a GeoServer ed ai servizi OGC

Lo scenario

• Evoluzione dell'uso di dati cartografici– file + workstation GIS

– dbms spaziali, server centralizzati (SDE)

– l'esplosione del web mapping

– l'accesso alla cartografia per le masse (Google Maps, Google Earth)

• Numero sempre crescente di utenti occasionali, non professionalizzati

• La spinta alla distribuzione dei dati verso il pubblico

Page 4: Introduzione a GeoServer ed ai servizi OGC

Dati

• Dati chiusi in silos

• Comunicazioni assenti o rese difficili da mancanza di standard condivisi

• Il potenziale del dati è largamentesotto-sfruttato

• La partecipazione delcomune cittadino assente

Dati

Dati

Page 5: Introduzione a GeoServer ed ai servizi OGC

Dati

• Apertura verso il web, maggiore fruibilità del dato geografico

• Disponibilità di protocolli condivisi e standardizzati (OGC)

• Partecipazione di una più ampia utenza grazie a sistemi pensati per il mercato di massa(es, Google Maps, Google Earth)

Dati

Dati

Page 6: Introduzione a GeoServer ed ai servizi OGC

OGC

Dati

• Client desktop

– visualizzazione personalizzata

– modifica

– analisi

• Client web per tecnici

– vestizione fissa

– strumentazione avanzata

– piccolo editing

• Client web

– vestizione fissa

– strumentazione minima

– integrazione con G.Maps, VE, Yahoo Maps

• Globi

– integrazione con Google Earth (KML)

Page 7: Introduzione a GeoServer ed ai servizi OGC

Protocolli OGC, velocemente

• WMS (Web Map Service) + SLD (Styled Layer Descriptor)

– creare di mappe a partire da dati grezzi, interrogare, legende

• WFS (Web Feature Service)– descrivere, fornire e modificare

dati vettoriali

• WCS (Web Coverage Service)– descrivere e fornire dati raster

• WPS (Web Processing Service)– eseguire analisi spaziali

Osservare,comprendere

ma nonanalizzare,

creare

Esportazione,filtro,

modifica

Analisi,indagine

Page 8: Introduzione a GeoServer ed ai servizi OGC

OGC e INSPIRE

• Le specifiche OGC vengono spesso trasformate in standard ISO

• La direttiva europea INSPIRE richiederà agli enti pubblici di pubblicare dati secondo tali standard

• In particolare:– WMS 1.3

– WFS 1.2

• Queste versioni dei protocolli ad oggi non sono di larga diffusione. No client, no server per WFS 1.2, un solo server open source per WMS 1.3

• → bisogna fare ancora un po' di strada, per iniziare ci si può appoggiare alle versioni di larga diffusione, WMS 1.1 e WFS 1.0

Page 9: Introduzione a GeoServer ed ai servizi OGC

OGC e la comunità Open Source

• OGC sponsorizza “reference implementations” per diversi standard

• Queste sono sempre Open Source

• Libero accesso alle specifiche:– molti software open source rispettano una o più

specifiche OGC

– spesso i software open source fanno da avanguardia nella realizzazione delle specifiche, creando massa critica (standard nella pratica oltre che sulla carta)

– ecosistema di prodotti interoperabili

• Esempi: DeeGree, GeoServer, gvSig, MapGuide, MapServer, OpenJump, OpenLayers, uDig, ...

Page 10: Introduzione a GeoServer ed ai servizi OGC

I client

Andrea Aime, Simone Giannecchini

www.geo-solutions.it

www.geoserver.org

Page 11: Introduzione a GeoServer ed ai servizi OGC

uDig

● User-friendly Desktop Internet GIS

● udig.refractions.net● Permette di integrare

sorgenti dati locali (shapefile, postgis) e remote (WMS/WFS)

● Creazione di carte tematiche

● Editing di dati (diretto o tramite WFS)

Page 12: Introduzione a GeoServer ed ai servizi OGC

OpenLayers

● API Javascript per l'esplorazione di servizi OGC in un browser

● Permette di integrare in una sola mappa– strati serviti da server WMS– strati serviti da server WFS– mappe di base come Google Maps/MS

Virtual Earth/Yahoo Maps● Pensato per sviluppatori JavaScript.● GeoServer lo integra per avere una rapida

anteprima dei layer WMS

Page 13: Introduzione a GeoServer ed ai servizi OGC

Gmaps satellite+ overlay WMS

Gmaps strade+ overlay WFS

Semplice

Page 14: Introduzione a GeoServer ed ai servizi OGC

“Slippy map”

● L'immagine è in realtà composta da mattonelle 256x256

● I livelli di zoom sono fissi● Questo rende il “caching” possibile, le immagini

possono essere generate una volta sola

Page 15: Introduzione a GeoServer ed ai servizi OGC

Google Earth

● Globo 3D● Dettagliate foto satellitari con copertura globale● Tutti i livelli più comuni e decine di extra con

collegamenti● Terreno tridimensionale● Possibilità di integrare i propri dati usando il

linguaggio KML (Keyhole Markup Language)

Page 16: Introduzione a GeoServer ed ai servizi OGC

Overlay dati da GSOverlay dati da GS

Page 17: Introduzione a GeoServer ed ai servizi OGC

GeoServer

Andrea Aime, Simone Giannecchini

www.geo-solutions.it

www.geoserver.org

Page 18: Introduzione a GeoServer ed ai servizi OGC

• www.geoserver.org• Server Open Source realizzato in Java• Pubblica dati geografici in rete:

– con una forte enfasi sugli standard OGC(WMS, WFS, WCS, SLD, ...)

– con estensioni per il mercato di massa integrate nei protocolli OGC (Shapefile, SVG, PDF, GeoRSS, GeoJSON)

• Interfaccia di amministrazione web• In rapida crescita

Page 19: Introduzione a GeoServer ed ai servizi OGC

Geo

Serve r

WFS 1.0

WMS 1.1

PostGISDB2OracleMySql

Shapefile-------

----------

----------

---------

---

----------

----------

---------

----------

----------

----------

---------

----------

ArcSDEWFS

PNG, GIFJPEGTIFF, GeoTIFFSVG, PDFKML/KMZ

Shapefile.zipGML2GML3GeoRSSGeoJSONCSV/XLSDati

vettoriali

Server

Mappe

DBMS

Dati vettoriali

WFS 1.1

WCS 1.0

GeoTIFFArcGridGTopo30Img+worldMosaicPyramidMrSidJPEG 2000Dati raster

Dati raster

GeoTIFFArcGridGTopo30Img+World

1.7.0

WCS 1.1

GWCKML superoverlaysGoogle maps tilesVirtual Earth tiles

Page 20: Introduzione a GeoServer ed ai servizi OGC

Client webOpenLayersFlamingo M.C.WMS + WFS

(GML, GeoJSON, GeoRSS)

Client desktopgvSigQGIS, JumpArcMap, uDigWMS + WFS

ServerMapServerMapBenderDeeGree

WMS + WFS

WMS (KML, GeoRSS)

Globi, mappe comm.Google EarthGoogle MapsYahoo MapsVirtual Earth

Ge

oS

erver

Page 21: Introduzione a GeoServer ed ai servizi OGC

Glossario GeoServer

● DataStore: una connessione a una sorgente dati. Ad esempio PostGIS/Oracle, o uno Shapefile

● FeatureType: una “tabella” all'interno di un DataStore.

● CoverageStore: una connessione a una sorgente dati raster. Ad esempio un file GeoTiff

● Coverage: un raster contenuto all'interno di un Coverage Store

Page 22: Introduzione a GeoServer ed ai servizi OGC

GeoServerGeoServer

Esempio

landmarks.shp

PostGIS

NYC

Landmarks

Roads

Buildings

Hydrography

DataStore FeatureType

Page 23: Introduzione a GeoServer ed ai servizi OGC

EPSG (www.epsg.org)

• European Petroleum Survey Group

• L'autorità internazionale in fatto di sistemi di riferimento geografici

• Elenco di codici numerici, ciascuno individua un sistema di riferimento (esistono più di 3000 codici)

• Fornisce un database con tali codici, la definizione degli ellissoidi, posizionamento datum, proiezioni ecc.

• Gli standard OGC riferiscono i codici come:– ESPG:<codice> (EPSG:3003)

– urn:ogc:def:crs:EPSG:<codice> (urn:ogc:def:crs:EPSG:3003)

Page 24: Introduzione a GeoServer ed ai servizi OGC

EPSG:3003

PROJCS["Monte Mario / Italy zone 1", GEOGCS["Monte Mario", DATUM["Monte Mario", SPHEROID["International 1924", 6378388.0, 297.0, AUTHORITY["EPSG","7022"]], TOWGS84[-50.2, -50.4, 84.8, -0.69, -2.012, 0.459, -5.791915759418465], AUTHORITY["EPSG","6265"]], PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], UNIT["degree", 0.017453292519943295], AXIS["Geodetic longitude", EAST], AXIS["Geodetic latitude", NORTH], AUTHORITY["EPSG","4265"]], PROJECTION["Transverse Mercator", AUTHORITY["EPSG","9807"]], PARAMETER["central_meridian", 9.0], PARAMETER["latitude_of_origin", 0.0], PARAMETER["scale_factor", 0.9996], PARAMETER["false_easting", 1500000.0], PARAMETER["false_northing", 0.0], UNIT["m", 1.0], AXIS["Easting", EAST], AXIS["Northing", NORTH], AUTHORITY["EPSG","3003"]]

• Monte Mario Zona 1, definito con sintassi WKT (Well Known Text)

Page 25: Introduzione a GeoServer ed ai servizi OGC

Parte pratica, introduzione

● Installazione Java, GeoServer e uDig● Familiarizzare con l'interfaccia utente di

GeoServer (configurare un layer, usare l'anteprima mappa in OpenLayers)

● Familiarizzare con l'interfaccia utente di uDig● Toccare con mano WMS e WFS: GeoServer e

uDig come coppia di client e server (guardiamo layer WMS, WFS, tematizziamo questi ultimi)

Page 26: Introduzione a GeoServer ed ai servizi OGC

XML in cinque minuti

Andrea Aime, Simone Giannecchini

www.geo-solutions.it

www.geoserver.org

Page 27: Introduzione a GeoServer ed ai servizi OGC

Stato dei protocolli

• I protocolli sono ben realizzati in un buon numero di progetti Open Source e in alcuni software commerciali

• La comunicazione è a volte ancora complessa, gli standard non sono chiari in tutti i dettagli

• Se volessimo fare un paragone con le automobili, siamo ancora al tempo in cui per possederne una bisognava essere un po' meccanici

• I software open source spesso non hanno interfacce utente amichevoli o le hanno solo per parte della funzionalità

• → occorre ancora sporcarsi le mani con molto XML

Page 28: Introduzione a GeoServer ed ai servizi OGC

XML

• eXtensible Markup Language

• Un linguaggio in formato testo per descrivere “dati”

• Di ampio utilizzo nell'informatica moderna

• Alla base di quasi tutti i protocolli OGC

• Non è necessario essere programmatori, ma riuscire a leggerlo è fondamentale per districarsi nei protocolli OGC:

– molte chiamate presuppongono l'uso di XML (nella richiesta o nella risposta)

– OGC ha definito gli schema per ciascun documento passato nelle chiamate

Page 29: Introduzione a GeoServer ed ai servizi OGC

Esempio

• <note>, <to>, ecc. sono detti tag

• Sono bilanciati, per ogni tag aperto c'é il corrispondente tag di chiusura (</note>, </to>), salvo il caso di elemento vuoto (<footer/>)

• Sono innestati in una struttura gerarchica

• Possono avere un contenuto testo (“Students”) o contenere altri elementi

• Possono avere attributi (type=”simpleMessage”)

<note type=”simpleMessage” xmlns=”http://www.w3schools.com”> <from>Andrea</from> <to>Students</to> <heading>OGC protocols</heading> <body>OGC protocols live and die by XML</body> <footer/></note>

Page 30: Introduzione a GeoServer ed ai servizi OGC

XML Schema

• Un modo per specificare la struttura di un documento XML

• Indica come si chiamano gli elementi, quali sono i loro attributi, quale è il loro contenuto

• Indicano restrizioni, ad esempio:

– il contenuto di un tag deve essere un numero intero

– il tag “mother” contiene uno o più elementi “child”

– ecc.

• Un documento XML si dice ben formato se i tag sono bilanciati (e non contiene alcuni caratteri vietati)

• Un documento XML ben formato è conforme allo schema se riferisce uno schema e ne rispetta le regole

Page 31: Introduzione a GeoServer ed ai servizi OGC

Esempio<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" elementFormDefault="qualified">

<xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="from" type="xs:string" /> <xs:element name="to" type="xs:string" /> <xs:element name="heading" type="xs:string" /> <xs:element name="body" type="xs:string" /> <xs:element name="footnote" type="xs:string" /> </xs:sequence> <attribute name="type" type="xs:string"/> </xs:complexType> </xs:element>

</xs:schema>

Page 32: Introduzione a GeoServer ed ai servizi OGC

Namespace

• I tag XML e i relativi schemi possono essere definiti da chiunque → lo stesso tag potrebbe essere definito da più persone con significati diversi

• Namespace:– si usa un URI per identificare i tag di un certo

schema

– l'URI può essere lungo, si usa un prefisso breve al suo posto nel documento xml

<h:table xmlns:h="http://www.w3.org/TR/html4/"> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr></h:table>

<f:table xmlns:f="http://www.w3schools.com/furniture"> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length></f:table>

Page 33: Introduzione a GeoServer ed ai servizi OGC

OGC e namespace

• OGC fornisce molti schema, per ciascuno c'è un URI e un prefisso convenzionale

• Ogni servizio in genere usa diversi schemi e diversi namespace

•OWS 1.0OWS 1.0xmlns:ows=”xmlns:ows=”http://www.opengis.net/ows”http://www.opengis.net/ows”

GML 3.1.1GML 3.1.1xmlns:gml=”xmlns:gml=”http://www.opengis.net/gml”http://www.opengis.net/gml”

FILTER 1.1.0FILTER 1.1.0xmlns:ogc=”xmlns:ogc=”http://www.opengis.net/filter”http://www.opengis.net/filter”

WFS 1.1.0WFS 1.1.0xmlns:wfs=”xmlns:wfs=”http://www.opengis.net/wfs”http://www.opengis.net/wfs”

Page 34: Introduzione a GeoServer ed ai servizi OGC

Esempio con namespace multipli<wfs:GetFeature service="WFS" version="1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:topp="http://www.openplans.org/topp" 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="topp:states"> <ogc:PropertyName>topp:STATE_NAME</ogc:PropertyName> <ogc:PropertyName>topp:PERSONS</ogc:PropertyName> <ogc:Filter> <ogc:BBOX> <ogc:PropertyName>the_geom</ogc:PropertyName> <gml:Box srsName="http://www.opengis.net/gml/srs/epsg.xml#4326"> <gml:coordinates> -75.102613,40.212597 -72.361859,41.512517 </gml:coordinates> </gml:Box> </ogc:BBOX> </ogc:Filter> </wfs:Query></wfs:GetFeature>

Page 35: Introduzione a GeoServer ed ai servizi OGC

Web Map Servicein GeoServer

Andrea Aime, Simone Giannecchini

www.geo-solutions.it

www.geoserver.org

Page 36: Introduzione a GeoServer ed ai servizi OGC

Generalità

● WMS mette a disposizione un catalogo di strati per creare mappe, che possono essere fornite:

– in un insieme di formati di uscita (tipicamente raster, come PNG, GIF, JPEG)

– in un insieme di proiezioni cartografiche– ciascuno con uno o più stili predefiniti

● E' possibile interrogare la mappa in un punto

Page 37: Introduzione a GeoServer ed ai servizi OGC

GeoServerGeoServerWMSWMS

Dativettorialie raster

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

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

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

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

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

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

Stili (SLD)

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

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

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

Template(personalizzazione output)

GetMap

GetFeatureInfo

GetLegendGraphics

Disegno mappaPNG, GIF, JPEG, GeoTiff, KML, SVG, PDF, GeoRSS, ...

Interrogazione datiHTML, GML2, TXT

LegendaPNG, GIF

GetCapabilities

Catalogo layer, stili, funzionalità supportate

WMS 1.1.1

Page 38: Introduzione a GeoServer ed ai servizi OGC

uDiguDig GeoServer

GetCapabilities

GetMap

GetFeatureInfo

Metadati (titolo)

Stile (SLD)

Template (HTML)

Page 39: Introduzione a GeoServer ed ai servizi OGC

GetFeatureInfo

Template (HTML)

GetMap

Stile SLD

http://localhost:8080/geoserver/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&LAYERS=tiger:poly_landmarks&STYLES=&FORMAT=image/png&HEIGHT=256&WIDTH=256&SRS=EPSG:4326&BBOX=-73.94281675,40.6695265, -73.83148025,40.780863

Page 40: Introduzione a GeoServer ed ai servizi OGC

WMS GetCapabilities

• http://localhost:8080/geoserver/ows?service=WMS&request=GetCapabilities

• La risposta a questa chiamata è un documento XML, di norma piuttosto lungo (per la demo di GeoServer occuperebbe 78 pagine stampate in Arial corpo 10)

• La risposta elenca– Metadati sul server (titolo, gestore, ecc.)

– Informazioni sulle chiamate supportate (quali formati di uscita ecc.)

– L'elenco dei layer (titolo, abstract, sist. rif., area coperta, stili)

• E' un piccolo catalogo. Vediamone velocemente un estratto.

Page 41: Introduzione a GeoServer ed ai servizi OGC

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE WMT_MS_Capabilities SYSTEM "http://localhost:8080/geoserver/schemas/wms/1.1.1/WMS_MS_Capabilities.dtd"><WMT_MS_Capabilities version="1.1.1" updateSequence="77"> <Service> <Name>OGC:WMS</Name> <Title>GeoServer Web Map Service</Title> <Abstract>A compliant implementation of WMS 1.1.1 plus most of the SLD 1.0 extension (dynamic styling). Can also generate PDF, SVG, KML, GeoRSS </Abstract> <KeywordList> <Keyword>WMS</Keyword> <Keyword>GEOSERVER</Keyword> </KeywordList> <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://localhost:8080/geoserver/wms"/> <ContactInformation> <ContactPersonPrimary> <ContactPerson>Claudius Ptolomaeus</ContactPerson> <ContactOrganization>The ancient geographes INC</ContactOrganization> </ContactPersonPrimary> <ContactPosition>Chief geographer</ContactPosition> <ContactAddress> <AddressType>Work</AddressType> <Address/> <City>Alexandria</City> <Country>Egypt</Country> </ContactAddress> <ContactVoiceTelephone/> <ContactFacsimileTelephone/> <ContactElectronicMailAddress>[email protected] </ContactElectronicMailAddress> </ContactInformation> <Fees>NONE</Fees> <AccessConstraints>NONE</AccessConstraints> </Service>...

Page 42: Introduzione a GeoServer ed ai servizi OGC

...<Capability> <Request> <GetCapabilities> <Format>application/vnd.ogc.wms_xml</Format> ... </GetCapabilities> <GetMap> <Format>image/png</Format> ... <Format>application/openlayers</Format> <Format>application/pdf</Format> <Format>image/gif</Format> ... </GetMap> <GetFeatureInfo> <Format>text/plain</Format> <Format>text/html</Format> <Format>application/vnd.ogc.gml</Format> ... </GetFeatureInfo> ... <GetLegendGraphic> <Format>image/png</Format> <Format>image/jpeg</Format> <Format>image/gif</Format> ... <Exception> <Format>application/vnd.ogc.se_xml</Format> </Exception> <UserDefinedSymion SupportSLD="1" UserLayer="1" UserStyle="1" RemoteWFS="1"/>...

Page 43: Introduzione a GeoServer ed ai servizi OGC

<Layer> <Title>GeoServer Web Map Service</Title> <Abstract> … </Abstract> <!--All supported EPSG projections:--> <SRS>EPSG:WGS84(DD)</SRS> <SRS>EPSG:2000</SRS> … (tremila codici dopo) … <Layer queryable="1"> <Name>tiger:poly_landmarks</Name> <Title>Manhattan (NY) landmarks</Title> <Abstract>Manhattan landmarks, identifies water, lakes, parks, interesting buildilngs</Abstract> <KeywordList> <Keyword>DS_poly_landmarks</Keyword> <Keyword>poly_landmarks</Keyword> </KeywordList> <SRS>EPSG:4326</SRS> <LatLonBoundingBox minx="-74.047185" miny="40.679648" maxx="-73.90782" maxy="40.882078"/> <Style> <Name>poly_landmarks</Name> <Title>Manhattan polygon landmarks</Title> <Abstract>Colors NY landmark polygons with different colors according to their contents</Abstract> <LegendURL width="20" height="20"> <Format>image/png</Format> <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://localhost:8080/geoserver/wms/GetLegendGraphic? VERSION=1.0.0&amp;FORMAT=image/png &amp;WIDTH=20&amp;HEIGHT=20&amp;LAYER=tiger:poly_landmarks"/> </LegendURL> </Style> </Layer>

Page 44: Introduzione a GeoServer ed ai servizi OGC

GetMap

• Permette di ottenere una mappa specificando nella chiamata:

– Un elenco di layer da visualizzare

– Un elenco di stili (può essere vuoto per adottare gli stili di defalt)

– L'area da visualizzare

– La dimensione dell'immagine

– Il formato di immagine restituito

– Il colore di sfondo, l'eventuale trasparenza dell'immagine

Page 45: Introduzione a GeoServer ed ai servizi OGC

GetMap, esempio

http://localhost:8080/geoserver/wms?&request=GetMap&bbox=-130,24,-66,50&srs=EPSG:4326&layers=topp:states&styles=population&Format=image/png&width=550&height=250

minx,miny,maxx,maxybbox nel sistema di coordinate spec in SRS(srs è opzionale, se non specificato, si usa il nativo)

Page 46: Introduzione a GeoServer ed ai servizi OGC

GetMap, cambio di proiezionehttp://localhost:8080/geoserver/wms?LAYERS=topp:states&SRS=EPSG:2204&BBOX=-12022399,-4197587,9679320,8107511&WIDTH=582&HEIGHT=330&...

PROJCS["NAD27 / Tennessee", GEOGCS["NAD27", DATUM["North American Datum 1927", SPHEROID["Clarke 1866", 6378206.4, 294.9786982138982, AUTHORITY["EPSG","7008"]], TOWGS84[-4.2, 135.4, 181.9, 0.0, 0.0, 0.0, 0.0], AUTHORITY["EPSG","6267"]], PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], UNIT["degree", 0.017453292519943295], AXIS["Geodetic longitude", EAST], AXIS["Geodetic latitude", NORTH], AUTHORITY["EPSG","4267"]], PROJECTION["Lambert Conic Conformal (2SP)", AUTHORITY["EPSG","9802"]], PARAMETER["central_meridian", -86.0], PARAMETER["latitude_of_origin", 34.666666666666664], PARAMETER["standard_parallel_1", 35.25], PARAMETER["false_easting", 2000000.0], PARAMETER["false_northing", 100000.0], PARAMETER["standard_parallel_2", 36.416666666666664], UNIT["foot_survey_us", 0.30480060960121924], AXIS["Easting", EAST], AXIS["Northing", NORTH], AUTHORITY["EPSG","2204"]]

Page 47: Introduzione a GeoServer ed ai servizi OGC

GetMap, layer multipli

http://localhost:8080/geoserver/wms?request=GetMap&layers=tiger:poly_landmarks,tiger:tiger_roads,tiger:poi&styles=,,&bbox=-74.01,40.70,-73.98,40.73&format=image/png&width=800&height=800

Page 48: Introduzione a GeoServer ed ai servizi OGC

GetFeatureInfo

• Chiede al serve informazioni

• Cosa c'é nella mappa al pixel x,y?

• L'output può essere fornito in vari formati:– HTML

– testo

– GML (Geographic Markup Language, una forma di XML)

• L'output HTML è personalizzabile con un template (in GeoServer, non in generale)

Page 49: Introduzione a GeoServer ed ai servizi OGC

GetFeatureInfo, esempiohttp://localhost:8080/geoserver/wms?request=GetFeatureInfo&bbox=-130,24,-66,50&&layers=topp:states&styles=population&format=jpeg&width=550&height=250&info_format=text/plain&query_layers=topp:states&x=170&y=160

Results for FeatureType 'states':--------------------------------------------the_geom = [GEOMETRY (MultiPolygon) with 153 points]STATE_NAME = ArizonaSTATE_FIPS = 04SUB_REGION = MtnSTATE_ABBR = AZLAND_KM = 294333.462WATER_KM = 942.772PERSONS = 3665228.0FAMILIES = 940106.0HOUSHOLD = 1368843.0MALE = 1810691.0FEMALE = 1854537.0WORKERS = 1358263.0DRVALONE = 1178320.0CARPOOL = 239083.0PUBTRANS = 32856.0EMPLOYED = 1603896.0UNEMPLOY = 123902.0SERVICE = 455896.0MANUAL = 185109.0P_MALE = 0.494P_FEMALE = 0.506SAMP_POP = 468178.0-----------------------------

GetMap

Ovvero: cosa c'è alpixel 170,160 di quella mappa?

Page 50: Introduzione a GeoServer ed ai servizi OGC

GetFeatureInfo, secondo esempio

• Esempio nella preview:– usa javascript per

eseguire la GetFeatureInfo

– la chiamata ritorna un documento HTML che viene integrato nella pagina corrente

• La struttura del documento è pilotata da un “template” HTML → porzioni di HTML mescolate a segnaposto per variabili

Page 51: Introduzione a GeoServer ed ai servizi OGC

Template

• Costruiti sulla libreria FreeMarker http://freemarker.sourceforge.net/

• Al template viene dato in pasto un elenco di “feature” (record, geometrie con attributi) ciascuna con un “tipo” (struttura della tabella)

• Il template usa placeholder del tipo $${feature.NOME.value} per estrarre il valore di un certo attributo

• Si tratta di “piccola programmazione”

• Maggiori informazioni qui:

– http://geoserver.org/display/GEOSDOC/Freemarker+templates

Page 52: Introduzione a GeoServer ed ai servizi OGC

Esempio template<table class="featureInfo"> <caption class="featureInfo">${type.name}</caption> <tr> <th>fid</th><#list type.attributes as attribute> <#if !attribute.isGeometry> <th >${attribute.name}</th> </#if></#list> </tr>

<#assign odd = false><#list features as feature> <#if odd> <tr class="odd"> <#else> <tr> </#if> <#assign odd = !odd>

<td>${feature.fid}</td> <#list feature.attributes as attribute> <#if !attribute.isGeometry> <td>${attribute.value?string}</td> </#if> </#list> </tr></#list></table><br/>

sezionetitolo

Corpotabella

Sfondoalternato

Valoreattributi

Page 53: Introduzione a GeoServer ed ai servizi OGC

GetLegendGraphics

• Cosa significano i colori presenti in mappa?

http://localhost:8080/geoserver/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetLegendGraphic&FORMAT=image/png&WIDTH=20&HEIGHT=20&LAYER=topp:states

Page 54: Introduzione a GeoServer ed ai servizi OGC

CQL e WMS

• CQL: Catalog Query Language

• Un linguaggio testuale per la descrizione di semplici filtri su dati (molto semplici, del tipo attributo <opconfronto> valore)

• Mutuato dalla specifica CAT (Catalog Web Services)

• Estensione specifica di GeoServer, permette di effettuare filtri su richieste WMS

• Il protocollo WMS + SLD 1.0 propone altre vie per ottenere un risultato analogo (ma nettamente più complesse)

Page 55: Introduzione a GeoServer ed ai servizi OGC

CQL: esempi

• STATE_NAME = 'Montana'

• MALE > FEMALE

• LAND_KM > 300000

• Nel caso vi siano più layer, si può costruire una lista di filtri, uno per layer, usando INCLUDE per il layer che non si vuole filtrare, esempio:INCLUDE;ATT>10;INCLUDE

Page 56: Introduzione a GeoServer ed ai servizi OGC

Web Feature ServiceLivello “basic”

Andrea Aime, Simone Giannecchini

www.geo-solutions.it

www.geoserver.org

Page 57: Introduzione a GeoServer ed ai servizi OGC

Web Feature Service

• Protocollo per l'accesso e la modifica di “Feature” geografiche

• Al contrario di WMS, si lavora a livello di dato, non di rappresentazione. WFS opera a livello di “codice sorgente” dell'informazione geografica.

• Gli oggetti territoriali di WFS si chiamano Feature:– identificativo (FID, Feature ID),

– una o più geometrie (vettoriali),

– eventuali attributi

• Geoserver è la reference implementation di WFS 1.0 e di WFS 1.1

Page 58: Introduzione a GeoServer ed ai servizi OGC

Dativettoriali

Catalogo layer,capacità del server

Descrizione di ogni layer

Estrazione dati con filtri, selezione attributi, cambio proiezione

Editing dati

GeoServer è referenceimplementation WFS1.0 e 1.1

GeoServerGeoServerWFSWFS

GetCapabilities

DescribeFeatureType

GetFeature

TransactionLock

GetFeatureWithLock

Transaction

Page 59: Introduzione a GeoServer ed ai servizi OGC

WFS 1.0 vs 1.1

• Principali differenze– WFS 1.0 usa GML2 e FILTER 1.0

– WFS 1.1 usa GML3 e FILTER 1.1

• Dal punto di vista delle funzionalità, WFS 1.1 permette di

– cambiare la proiezione dei dati ritornati (GeoServer permette di cambiare il sistema di rif. anche in WFS 1.0, come vendor extension)

– ordinare il risultato in base agli attributi

• WFS 1.0 è supportato dalla maggior parte dei client, WFS 1.1 è praticamente assente dallo scenario dei client open source → vedremo WFS 1.0

Page 60: Introduzione a GeoServer ed ai servizi OGC

Il problema degli assi

• Tutte le realizzazioni open source di WFS 1.0 ritornano i dati geografici in ordine lon/lat

• La specifica non indicava chiaramente quale fosse l'ordine da utilizzare

• WFS 1.1 specifica chiaramente che l'ordine richiesto è l'opposto, lat/lon

• Questo ha creato non poca confusione, limitato notevolmente la diffusione di WFS 1.1

• Modi di esprimere un SRS:– EPSG:<codice>

– http://www.opengis.net/gml/srs/epsg.xml#<codice>

– urn:x-ogc:def:crs:EPSG:<codice>

WFS 1.0

WFS 1.1

Page 61: Introduzione a GeoServer ed ai servizi OGC

La scelta di GeoServer

• Per compatibilità con l'esistente GeoServer WFS 1.0 continua a ritornare dati in ordine lon/lat

• Se si usa WFS 1.1 invece i dati sono ritornati in lat/lon

• In particolare, tutto dipende da come vengono nominati gli SRS

• Il dato viene ritornato in lon/lat per:– EPSG:<codice>

– http://www.opengis.net/gml/srs/epsg.xml#<codice>

• Il dato viene ritornato in lat/lon per:– urn:x-ogc:def:crs:EPSG:<codice>

Page 62: Introduzione a GeoServer ed ai servizi OGC

Profili WFS

• Basic– GetCapabilities

– DescribeFeature

– GetFeature

• Transactional– Transaction

– GetFeatureWithLock

– Lock

Sola lettura

Lettura/Scrittura

Page 63: Introduzione a GeoServer ed ai servizi OGC

GetFeature

A = 'xyx'B like geo%G bbox x1,y1,x2,y2...

GML2GML3Shapefile.zipGeoJSON

WFS 1.1Cambioproiezione

● GetCapabilities → quali layer?

● DescribeFeatureType → quali attributi per il layer X?

● GetFeature → estrazione dati con scelta attributi e filtro

Basic WFS

Page 64: Introduzione a GeoServer ed ai servizi OGC

WFS GetCapabilities

• Strutturalmente simile alla GetCapabilities di WMS, ovvero:

– informazioni generali sul server

– chiamate e relativi formati di uscita

– elenco layer

• Ma questa volta si lavora a livello di dato grezzo, non ci sono stili

• Familiarizziamo con la struttura del documento

Page 65: Introduzione a GeoServer ed ai servizi OGC

<?xml version="1.0" encoding="UTF-8"?><WFS_Capabilities version="1.0.0" xmlns="http://www.opengis.net/wfs" xmlns:cite="http://www.opengeospatial.net/cite" xmlns:it.geosolutions="http://www.geo-solutions.it" xmlns:tiger="http://www.census.gov" xmlns:sde="http://geoserver.sf.net" xmlns:topp="http://www.openplans.org/topp" xmlns:sf="http://www.openplans.org/spearfish" xmlns:nurc="http://www.nurc.nato.int" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://localhost:8080/geoserver/schemas/wfs/1.0.0/WFS-capabilities.xsd"> <Service> <Name>WFS</Name> <Title>GeoServer Web Feature Service</Title> <Abstract>This is the reference implementation of WFS 1.0.0 and WFS 1.1.0, supports all WFS operations including Transaction.</Abstract> <Keywords>WFS, WMS, GEOSERVER</Keywords> <OnlineResource>http://localhost:8080/geoserver/wfs</OnlineResource> <Fees>NONE</Fees> <AccessConstraints>NONE</AccessConstraints> </Service> ...

Analogo a WMS

Page 66: Introduzione a GeoServer ed ai servizi OGC

<Capability> <Request> ... <DescribeFeatureType> <SchemaDescriptionLanguage> <XMLSCHEMA /> </SchemaDescriptionLanguage> <DCPType> <HTTP> <Get onlineResource="http://localhost:8080/geoserver/wfs?request=DescribeFeatureType" /> </HTTP> </DCPType> <DCPType> <HTTP> <Post onlineResource="http://localhost:8080/geoserver/wfs?" /> </HTTP> </DCPType> </DescribeFeatureType> <GetFeature> <ResultFormat> <GML3 /> <GML2 /> <SHAPE-ZIP /> <GEOJSON /> </ResultFormat> <DCPType> <HTTP> <Get onlineResource="http://localhost:8080/geoserver/wfs?request=GetFeature" /> </HTTP> </DCPType> <DCPType> <HTTP> <Post onlineResource="http://localhost:8080/geoserver/wfs?" /> </HTTP> </DCPType> </GetFeature>

Page 67: Introduzione a GeoServer ed ai servizi OGC

Quali operazionisono supportate

Informazioni diminima su un layer

<FeatureTypeList> <Operations> <Query /> <Insert /> <Update /> <Delete /> <Lock /> </Operations> ... <FeatureType> <Name>tiger:poly_landmarks</Name> <Title>Manhattan (NY) landmarks</Title> <Abstract>Manhattan landmarks, identifies water, lakes, parks, interesting buildilngs </Abstract> <Keywords> DS_poly_landmarks, poly_landmarks </Keywords> <SRS>EPSG:4326</SRS> <LatLongBoundingBox minx="-74.047185" miny="40.679648" maxx="-73.90782" maxy="40.882078" /> </FeatureType> <FeatureType> <Name>tiger:poi</Name> <Title>Manhattan (NY) points of interset</Title> <Abstract>Points of intereset, Manhattan, New York. One of the attributes contains the name of a file with a picture of the point of interest.</Abstract> <Keywords> poi, DS_poi </Keywords> <SRS>EPSG:4326</SRS> <LatLongBoundingBox minx="-74.0118315772888" miny="40.70754683896324" maxx="-74.00857344353275" maxy="40.711945649065406" /> </FeatureType>

In realtà, lon/lat

Page 68: Introduzione a GeoServer ed ai servizi OGC

Quali filtri sonosupportati da questoserver?

<ogc:Filter_Capabilities> <ogc:Spatial_Capabilities> <ogc:Spatial_Operators> <ogc:Disjoint /> <ogc:Equals /> <ogc:DWithin /> <ogc:Beyond /> <ogc:Intersect /> <ogc:Touches /> <ogc:Crosses /> <ogc:Within /> <ogc:Contains /> <ogc:Overlaps /> <ogc:BBOX /> </ogc:Spatial_Operators> </ogc:Spatial_Capabilities> <ogc:Scalar_Capabilities> <ogc:Logical_Operators /> <ogc:Comparison_Operators> <ogc:Simple_Comparisons /> <ogc:Between /> <ogc:Like /> <ogc:NullCheck /> </ogc:Comparison_Operators> <ogc:Arithmetic_Operators> <ogc:Simple_Arithmetic /> <ogc:Functions> <ogc:Function_Names> <ogc:Function_Name nArgs="1">abs</ogc:Function_Name> <ogc:Function_Name nArgs="1">acos</ogc:Function_Name>...

Page 69: Introduzione a GeoServer ed ai servizi OGC

DescribeFeatureType

• Ritorna la struttura delle Feature in forma di XML schema

• Lo schema estende la AbstractFeature definita nello schema GML (GML2 o GML3 a seconda della versione di WFS)

• Nel caso di GeoServer, questo schema (insieme al nome del FeatureType) è derivato direttamente dalla struttura dati pubblicata (tabella dbms spaziale, shapefile) → se si cambiano i nomi degli attributi o il loro tipo nel database, GeoServer riflette questo cambiamento

Page 70: Introduzione a GeoServer ed ai servizi OGC

Esempio: Tasmania roads<?xml version="1.0" encoding="UTF-8"?><xs:schema targetNamespace="http://www.openplans.org/topp" xmlns:topp="http://www.openplans.org/topp" xmlns:gml="http://www.opengis.net/gml" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0"> <xs:import namespace="http://www.opengis.net/gml" schemaLocation=" … /schemas/gml/2.1.2.1/feature.xsd" /> <xs:complexType name="tasmania_roads_Type"> <xs:complexContent> <xs:extension base="gml:AbstractFeatureType"> <xs:sequence> <xs:element name="the_geom" minOccurs="0" nillable="true" type="gml:MultiLineStringPropertyType" /> <xs:element name="TYPE" minOccurs="0" nillable="true"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:maxLength value="7" /> </xs:restriction> </xs:simpleType> </xs:element> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> <xs:element name="tasmania_roads" type="topp:tasmania_roads_Type" substitutionGroup="gml:_Feature" /></xs:schema>

Page 71: Introduzione a GeoServer ed ai servizi OGC

Quali geometrie?

Point MultiPoint LineString

LinearRing MultiLineString Polygon

MultiPolygon GeometryCollection

Page 72: Introduzione a GeoServer ed ai servizi OGC

GetFeature

• Estrae le Feature di uno o più FeatureType:– scelta degli attributi

– filtro per decidere quali Feature selezionare

• E' possibile estrarre le Feature nei formati dichiarati in GetCapabilities. Per GeoServer:

– GML2 (standard WFS 1.0)

– GML3 (standard WFS 1.1)

– GeoJSon (per client JavaScript)

– SHAPE-ZIP (per tutti gli altri!)

• Cambio di proiezione (solo in WFS 1.1, ma GeoServer lo supporta anche in WFS 1.0 come vendor extension)

Page 73: Introduzione a GeoServer ed ai servizi OGC

GetFeature, filtro su attributi<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:ogc="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="topp:states"> <ogc:PropertyName>STATE_NAME</ogc:PropertyName> <ogc:PropertyName>LAND_KM</ogc:PropertyName> <ogc:PropertyName>the_geom</ogc:PropertyName> <ogc:Filter> <ogc:PropertyIsBetween> <ogc:PropertyName>LAND_KM</ogc:PropertyName> <ogc:LowerBoundary> <ogc:Literal>140000</ogc:Literal> </ogc:LowerBoundary> <ogc:UpperBoundary> <ogc:Literal>150000</ogc:Literal> </ogc:UpperBoundary> </ogc:PropertyIsBetween> </ogc:Filter> </wfs:Query></wfs:GetFeature>

ovvero: 140000 < LAND_KM < 150000

Scelta attributi

Layer

Filtro

Page 74: Introduzione a GeoServer ed ai servizi OGC

<?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" … > <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=" "> -96.640396,30.361057 -80.89492,48.173923</gml:coordinates> </gml:Box> </gml:boundedBy> <gml:featureMember> <topp:states fid="states.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=" "> -88.071564,37.51099 -88.087883,37.476273 … (elenco completo delle coordinate omesso) … -88.071564,37.51099</gml:coordinates> </gml:LinearRing> </gml:outerBoundaryIs> </gml:Polygon> </gml:polygonMember> </gml:MultiPolygon> </topp:the_geom> <topp:STATE_NAME>Illinois</topp:STATE_NAME> <topp:LAND_KM>143986.61</topp:LAND_KM> </topp:states> </gml:featureMember> …

Risultato in GML2

Page 75: Introduzione a GeoServer ed ai servizi OGC

GetFeature, alternativa CQL

• Anche in WFS si può usare CQL_FILTER per eseguire rapidamente un filtro

• Attenzione però, è una soluzione specifica di GeoServer, non fa parte dello standard WFS

http://localhost:8080/geoserver/wfs?service=WFS&version=1.0.0&request=GetFeature&typeName=topp:states&propertyName=the_geom,STATE_NAME,LAND_KM&cql_filter=LAND_KM between 140000 and 150000

Page 76: Introduzione a GeoServer ed ai servizi OGC

GetFeature, bounding box<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:ogc="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="topp:states"> <ogc:PropertyName>STATE_NAME</ogc:PropertyName> <ogc:PropertyName>PERSONS</ogc:PropertyName> <ogc:PropertyName>the_geom</ogc:PropertyName> <ogc:Filter> <ogc:BBOX> <ogc:PropertyName>the_geom</ogc:PropertyName> <gml:Box srsName="EPSG:4326"> <gml:coordinates> -75,40 -72,41 </gml:coordinates> </gml:Box> </ogc:BBOX> </ogc:Filter> </wfs:Query></wfs:GetFeature>

Page 77: Introduzione a GeoServer ed ai servizi OGC

Alternative per bounding boxhttp://localhost:8080/geoserver/wfs?service=WFS&version=1.0.0&request=GetFeature&typeName=topp:states&propertyName=the_geom,STATE_NAME,LAND_KM&bbox=-75,40,-72,41

http://localhost:8080/geoserver/wfs?service=WFS&version=1.0.0&request=GetFeature&typeName=topp:states&propertyName=the_geom,STATE_NAME,LAND_KM&cql_filter=BBOX(the_geom,-75,40,-72,41)

Alternativastandard

Con CQL

Page 78: Introduzione a GeoServer ed ai servizi OGC

GetFeature, filtro geometrico<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:ogc="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="topp:states"> <ogc:Filter> <ogc:Intersects> <ogc:PropertyName>the_geom</ogc:PropertyName> <gml:Point srsName="EPSG:4326"> <gml:coordinates>-100,32</gml:coordinates> </gml:Point> </ogc:Intersects> </ogc:Filter> </wfs:Query></wfs:GetFeature>

http://localhost:8080/geoserver/wfs?service=WFS&version=1.0.0&request=GetFeature&typeName=topp:states&propertyName=the_geom,STATE_NAME,LAND_KM&cql_filter=INTERSECT(the_geom, POINT(-100 32))

Page 79: Introduzione a GeoServer ed ai servizi OGC

GetFeature, filtri con calcoli<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:ogc="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="topp:states"> <ogc:PropertyName>STATE_NAME</ogc:PropertyName> <ogc:Filter> <ogc:PropertyIsGreaterThan> <ogc:Div> <ogc:PropertyName>UNEMPLOY</ogc:PropertyName> <ogc:PropertyName>WORKERS</ogc:PropertyName> </ogc:Div> <ogc:Literal>0.10</ogc:Literal> </ogc:PropertyIsGreaterThan> </ogc:Filter> </wfs:Query></wfs:GetFeature>

http://localhost:8080/geoserver/wfs?service=WFS&version=1.0.0&request=GetFeature&typeName=topp:states&propertyName=the_geom,STATE_NAME,LAND_KM&cql_filter=UNEMPLOY > 0.1 * WORKERS

attrib <op> espressione

Ricerca disoccupazioneoltre il 10% (nel 1990)

Page 80: Introduzione a GeoServer ed ai servizi OGC

Styled Layer Descriptor

Andrea Aime, Simone Giannecchini

www.geo-solutions.it

www.geoserver.org

Page 81: Introduzione a GeoServer ed ai servizi OGC

Styled Layer Descriptor

• SLD è una sofisticata specifica OGC per la vestizione di layer vettoriali e raster

• E' molto flessibile, anche se nella sua generalità risulta di difficile comprensione e non ha sintassi semplificate per i tipi di vestizione più comuni

• Una volta presa padronanza dello strumento si possono realizzare vestizioni piuttosto sofisticate

• Si tratta di documenti XML, dove vengono riusate sia le specifiche GML che le specifiche Filter

• In questo documento si parla di SLD 1.0, nel frattempo OGC ha creato SLD 1.1 / SE 1.1

Page 82: Introduzione a GeoServer ed ai servizi OGC

Generalità sulla struttura

• Un documento SLD è in origine pensato per descrivere la struttura di una mappa

• Contiene quindi un elenco di UserLayer o NamedLayer, ciascuno dei quali contiene uno UserStyle

– UserLayer: definizione del contenuto di un layer come collezione GML

– NameLayer: riferimento a un layer noto al server (per nome)

– UserStyle: insieme delle regole necessarie

• Di fatto ignoreremo tutti gli elementi al di fuori di UserStyle

Page 83: Introduzione a GeoServer ed ai servizi OGC

Esempio di struttura

Page 84: Introduzione a GeoServer ed ai servizi OGC

Interpretazione

• FeatureTypeStyle: ci può essere più di un F.T.S., ciascuno funziona come una sorta di layer trasparente e viene disegnato in pieno prima di passare al successivo

• Rule: ci può essere più di una Rule per F.T.S., ciascuna contiene un filtro sulle feature (OGC Filter) ed eventualmente un filtro sulla scala. La prima Rule che cattura la Feature corrente viene eseguita.

• Symbolizer: ci può essere più di un Symbolizer per Rule. E' il pennello che disegna la Feature corrente.

Page 85: Introduzione a GeoServer ed ai servizi OGC

Il “tratto” può essere semplice o grafico. Le proprietà CSS sono:● color, width, opacity (elementi base)● lineJoin, lineCap (fine linea e congiunzioni)● dashArray, dashOffset (per definire stili a tratti)

Si applica solo a tipi lineari (linestring, multilinestring, ring), se applicato a un poligono ne disegna soltanto il contorno. Su un punto non fa nulla.

LineSymbolizer

Page 86: Introduzione a GeoServer ed ai servizi OGC

<?xml version="1.0" encoding="ISO-8859-1"?><StyledLayerDescriptor version="1.0.0" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"> <NamedLayer> <Name>Line</Name> <UserStyle> <FeatureTypeStyle> <Rule> <LineSymbolizer> <Stroke> <CssParameter name="stroke">#000000</CssParameter> </Stroke> </LineSymbolizer> </Rule>

</FeatureTypeStyle> </UserStyle> </NamedLayer></StyledLayerDescriptor>

http://www.colorschemer.com/online.html

#RRGGBB

Page 87: Introduzione a GeoServer ed ai servizi OGC

…<LineSymbolizer> <Stroke> <CssParameter name="stroke">#0000FF</CssParameter> <CssParameter name="stroke-width">2</CssParameter> </Stroke></LineSymbolizer>…

…<LineSymbolizer> <Stroke> <CssParameter name="stroke">#0000FF</CssParameter> <CssParameter name="stroke-width">6</CssParameter> <CssParameter name="stroke-linejoin">round</CssParameter> <CssParameter name="stroke-linecap">round</CssParameter> </Stroke></LineSymbolizer>…

butt

square

round

Page 88: Introduzione a GeoServer ed ai servizi OGC

…<LineSymbolizer> <Stroke> <CssParameter name="stroke">#000000</CssParameter> <CssParameter name="stroke-dasharray">10 0</CssParameter> </Stroke></LineSymbolizer>…

…<LineSymbolizer> <Stroke> <CssParameter name="stroke">#000000</CssParameter> <CssParameter name="stroke-dasharray">10 5 1 5</CssParameter> </Stroke></LineSymbolizer>…

…<LineSymbolizer> <Stroke> <CssParameter name="stroke">#0000FF</CssParameter> <CssParameter name="stroke-width">6</CssParameter> <CssParameter name="stroke-linejoin">round</CssParameter> <CssParameter name="stroke-linecap">round</CssParameter> <CssParameter name="stroke-opacity">0.5</CssParameter> </Stroke></LineSymbolizer>…

Page 89: Introduzione a GeoServer ed ai servizi OGC

Si applica solo a tipi poligonali (polygon, multipolyon, ring). Se applicato a un punto nonfa nulla, se applicato a una linea la chiude e latratta come un poligono

PolygonSymbolizer

Page 90: Introduzione a GeoServer ed ai servizi OGC

<?xml version="1.0" encoding="ISO-8859-1"?><StyledLayerDescriptor version="1.0.0" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"> <NamedLayer> <Name>Polygon</Name> <UserStyle> <FeatureTypeStyle> <Rule> <PolygonSymbolizer> <Fill> <CssParameter name="fill">#AAAAAA</CssParameter> <CssParameter name="fill-opacity">1.0</CssParameter> </Fill> <Stroke> <CssParameter name="stroke">#000000</CssParameter> </Stroke> </PolygonSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer></StyledLayerDescriptor>

Page 91: Introduzione a GeoServer ed ai servizi OGC

PointSymbolizer

Un punto si può vestire con una forma nota (Mark, sono cerchio, quadrato, ecc.) o con un file esterno (png, gif, svg, ecc.)

Si sceglie quale geometria vestire.Il point symbolizer si applica a tutte le geometrie (viene trovato un punto adatto nel caso in cui non sia un punto semplice).

PointSymbolizer

Page 92: Introduzione a GeoServer ed ai servizi OGC

Mark

• Un mark è una forma vettoriale che può essere riempita (Fill) e disegnata (Stroke)

• Lo standard prevede pochi mark di nome “ben noto”: square, circle, triangle, star,cross, x

• GeoServer permette di usare anche font TrueType come Wingdings come sorgenti di forme.

– <WellKnownName>ttf://<nomeFont>#<codiceCar>

• I programmatori possono estendere l'insieme noto creando mark propri (si veda “dynamic style objects” in GeoTools)

Page 93: Introduzione a GeoServer ed ai servizi OGC

<?xml version="1.0" encoding="ISO-8859-1"?><StyledLayerDescriptor version="1.0.0" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"> <NamedLayer> <Name>Point</Name> <UserStyle> <FeatureTypeStyle> <Rule> <PointSymbolizer> <Graphic> <Mark> <WellKnownName>square</WellKnownName> <Fill> <CssParameter name="fill">#FF0000</CssParameter> </Fill> </Mark> <Size>6</Size> </Graphic> </PointSymbolizer> </Rule>

</FeatureTypeStyle> </UserStyle> </NamedLayer></StyledLayerDescriptor>

Page 94: Introduzione a GeoServer ed ai servizi OGC

…<PointSymbolizer> <Graphic> <Mark> <WellKnownName>star</WellKnownName> <Fill> <CssParameter name="fill">#FFFF00</CssParameter> </Fill> <Stroke> <CssParameter name="stroke">#FF0000</CssParameter> <CssParameter name="stroke-width">2</CssParameter> </Stroke> </Mark> <Size>20</Size> </Graphic></PointSymbolizer>…

…<PointSymbolizer> <Graphic> <Mark> <WellKnownName>square</WellKnownName> <Stroke> <CssParameter name="stroke">#000000</CssParameter> <CssParameter name="stroke-width">2</CssParameter> </Stroke> </Mark> <Size>20</Size> <Rotation>45</Rotation> </Graphic></PointSymbolizer>…

Page 95: Introduzione a GeoServer ed ai servizi OGC

ExternalGraphics

• Riferimento a un disegno esterno:– una immagine: png, gif, jpeg

– un file SVG (Scalable Vector Graphics) che si può produrre, ad esempio, con InkScape o con alcuni prodotti di Adobe

• Occorre specificare il MIME type dell'immagine:– image/png, image/gif, image/jpeg,

image/svg+xml

• L'immagine può essere collocata:– online, si fa riferimento con il suo URL

– sul disco, si fornisce il percorso assoluto

– nella cartella styles, si fornisce solo in nome

Page 96: Introduzione a GeoServer ed ai servizi OGC

…<PointSymbolizer> <Graphic> <ExternalGraphic> <OnlineResource xlink:type="simple" xlink:href="flag.svg" /> <Format>image/svg+xml</Format> </ExternalGraphic> <Size> <ogc:Literal>20</ogc:Literal> </Size> </Graphic></PointSymbolizer>…

…<PointSymbolizer> <Graphic> <ExternalGraphic> <!-- avoid hot linking, this is just a sample --> <OnlineResource xlink:type="simple" xlink:href="http://www.google.com/mapfiles/marker.png" /> <Format>image/png</Format> </ExternalGraphic> </Graphic></PointSymbolizer>…

Page 97: Introduzione a GeoServer ed ai servizi OGC

Graphic in PolygonSymbolizer

• Graphic può essere usato anche per specificare il contenuto di un Fill o di uno Stroke, ovvero:

– specificare uno riempimento mediante la ripetizione di un Mark o di un ExternalGraphics

– disegnare una linea ripetendo un Mark o un ExternalGraphics come uno stampino

• Al momento il Fill non funziona correttamente con i Mark, e lo Stroke ne con Mark ne con ExternalGraphic

Page 98: Introduzione a GeoServer ed ai servizi OGC

…<PolygonSymbolizer> <Fill> <GraphicFill> <Graphic> <ExternalGraphic> <OnlineResource xlink:type="simple" xlink:href="grass_fill.png" /> <Format>image/png</Format> </ExternalGraphic> </Graphic> </GraphicFill> </Fill> <Stroke /></PolygonSymbolizer>…

Page 99: Introduzione a GeoServer ed ai servizi OGC

Si applica a tutti i tipi di geometriaIl centroide viene scelto automaticamente

Da notare che l'etichetta può essere un attributo o il risultato di una espressione complessa (calcoli, concatenazioni di stringhe)

TextSymbolizer

Page 100: Introduzione a GeoServer ed ai servizi OGC

<?xml version="1.0" encoding="ISO-8859-1"?><StyledLayerDescriptor version="1.0.0" … > <NamedLayer> <Name>Point</Name> <UserStyle> <FeatureTypeStyle> <Rule> <PointSymbolizer> <Graphic> <Mark> <WellKnownName>square</WellKnownName> <Fill/> </Mark> <Size>6</Size> </Graphic> </PointSymbolizer> <TextSymbolizer> <Label><ogc:PropertyName>NAME</ogc:PropertyName></Label> <Font> <CssParameter name="font-family">Arial</CssParameter> <CssParameter name="font-weight">bold</CssParameter> <CssParameter name="font-size">12</CssParameter> <CssParameter name="font-style">italic</CssParameter> </Font> </TextSymbolizer> </Rule>

</FeatureTypeStyle> </UserStyle> </NamedLayer></StyledLayerDescriptor>

Risoluzioneconflitti

Page 101: Introduzione a GeoServer ed ai servizi OGC

<TextSymbolizer> <Label><ogc:PropertyName>NAME</ogc:PropertyName></Label> <Font> <CssParameter name="font-size">16</CssParameter> </Font> <LabelPlacement> <PointPlacement> <AnchorPoint> <AnchorPointX>0.5</AnchorPointX> <AnchorPointY>1</AnchorPointY> </AnchorPoint> </PointPlacement> </LabelPlacement></TextSymbolizer> ABCDEFG

0,0 1,0

1,10,1 0.5,1

0,0.5

<TextSymbolizer> <Label><ogc:PropertyName>NAME</ogc:PropertyName></Label> <Font> <CssParameter name="font-size">16</CssParameter> </Font> <LabelPlacement> <PointPlacement> <AnchorPoint> <AnchorPointX>0.5</AnchorPointX> <AnchorPointY>1</AnchorPointY> </AnchorPoint> <Displacement> <DisplacementX>0</DisplacementX> <DisplacementY>-10</DisplacementY> </Displacement> </PointPlacement> </LabelPlacement></TextSymbolizer>

Page 102: Introduzione a GeoServer ed ai servizi OGC

<TextSymbolizer>… <LabelPlacement> <PointPlacement> <Displacement> <DisplacementX>5</DisplacementX> <DisplacementY>0</DisplacementY> </Displacement> <Rotation>-45</Rotation> </PointPlacement> </LabelPlacement></TextSymbolizer>

<TextSymbolizer> <Label><ogc:PropertyName>NAME</ogc:PropertyName></Label> <Font> <CssParameter name="font-family">Arial</CssParameter> <CssParameter name="font-size">12</CssParameter> <CssParameter name="font-weight">bold</CssParameter> </Font> <LabelPlacement> <PointPlacement> <Displacement> <DisplacementX>7</DisplacementX> <DisplacementY>0</DisplacementY> </Displacement> </PointPlacement> </LabelPlacement> <Halo> <Radius>2</Radius> <Fill><CssParameter name="fill">#000000</CssParameter></Fill> </Halo> <Fill><CssParameter name="fill">#FFFFFF</CssParameter></Fill></TextSymbolizer>

Page 103: Introduzione a GeoServer ed ai servizi OGC

<TextSymbolizer> <Label> <ogc:PropertyName>STATE_ABBR</ogc:PropertyName> </Label> <Font> <CssParameter name="font-family">Arial</CssParameter> <CssParameter name="font-size">14</CssParameter> </Font> <LabelPlacement> <PointPlacement> <AnchorPoint> <AnchorPointX>0.5</AnchorPointX> <AnchorPointY>0.5</AnchorPointY> </AnchorPoint> </PointPlacement> </LabelPlacement></TextSymbolizer>

<TextSymbolizer> <Label> <ogc:PropertyName>TYPE</ogc:PropertyName> </Label> <Font> <CssParameter name="font-family">Arial</CssParameter> <CssParameter name="font-size">14</CssParameter> </Font> <LabelPlacement> <LinePlacement> <PerpendicularOffset>10</PerpendicularOffset> </LinePlacement> </LabelPlacement></TextSymbolizer>

Page 104: Introduzione a GeoServer ed ai servizi OGC

<LineSymbolizer> <Stroke> <CssParameter name="stroke"> <ogc:Literal>#AA3333</ogc:Literal> </CssParameter> <CssParameter name="stroke-width"> <ogc:Literal>2</ogc:Literal> </CssParameter> </Stroke></LineSymbolizer><TextSymbolizer> <Label> <ogc:PropertyName>TYPE</ogc:PropertyName> </Label> <Font> <CssParameter name="font-family"> Arial </CssParameter> <CssParameter name="font-size"> 14 </CssParameter> </Font> <LabelPlacement> <LinePlacement/> </LabelPlacement> <Halo> <Radius>2</Radius> <Fill> <CssParameter name="fill"> #FFFFFF </CssParameter> </Fill> </Halo> <VendorOption name="followLine">true</VendorOption></TextSymbolizer>

Page 105: Introduzione a GeoServer ed ai servizi OGC

Rule

• Un FeatureTypeStyle può contenere una o più Rule

• Ciascuna contiene symbolizers sottoposti a due condizioni

– livello di scala

– un filtro OGC

• La prima rule che aggancia una Feature la disegna

• E' possibile usare <ElseFilter/> per catturare tutte le feature non catturate dalle Rule precedenti

• Usi– carte tematiche (vestizione in funzione di

attributi)

– disegno di una sola parte dei dati disponibili

Page 106: Introduzione a GeoServer ed ai servizi OGC

Uso per carte tematiche, esempio

• Abbiamo un campo Type che contiene il tipo di strada. Vogliamo evidenziare “highway” e “road” e disegnare tutte le altre strade nello stesso modo

– Type = “highway” → arancio, 4 px

– Type = “road” → nero, 1 px

– altrimenti → nero tratteggiato, 1px

• Si creano tre Rule, le prime due con un filtro, l'ultima con un ElseFilter, ciascuna con il proprio symbolizer

Page 107: Introduzione a GeoServer ed ai servizi OGC

… <FeatureTypeStyle> <Rule> <ogc:Filter> <ogc:PropertyIsEqualTo> <ogc:PropertyName>TYPE</ogc:PropertyName> <ogc:Literal>highway</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Filter> <LineSymbolizer> <Stroke> <CssParameter name="stroke">#F5B800</CssParameter> <CssParameter name="stroke-width">4</CssParameter> </Stroke> </LineSymbolizer> </Rule> <Rule> <ogc:Filter> <ogc:PropertyIsEqualTo> <ogc:PropertyName>TYPE</ogc:PropertyName> <ogc:Literal>road</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Filter> <LineSymbolizer> <Stroke> <CssParameter name="stroke-width">2</CssParameter> </Stroke> </LineSymbolizer> </Rule> <Rule> <ElseFilter/> <LineSymbolizer> <Stroke> <CssParameter name="stroke-width">2</CssParameter> <CssParameter name="stroke-dasharray">5 5</CssParameter> </Stroke> </LineSymbolizer> </Rule> </FeatureTypeStyle> …

Page 108: Introduzione a GeoServer ed ai servizi OGC

Rendering relativo alla scala

• Può essere usato in vari modi– per non visualizzare un layer quando si è a scala

troppo bassa (evitare di disegnare troppe Feature)

– per visualizzare solo parte di un layer molto ampio a bassa scala, e tutto il disponibile a scala più elevata (prima solo le autostrade, poi tutto)

– per cambiare la vestizione e l'etichettatura passando a vestizioni più dispendiose ma più gradevoli man mano che si procede nella esplorazione della mappa

Page 109: Introduzione a GeoServer ed ai servizi OGC

… <Rule> <MinScaleDenominator>40000000</MinScaleDenominator> <LineSymbolizer> <Stroke /> </LineSymbolizer> <TextSymbolizer> <Label> <ogc:PropertyName>STATE_ABBR</ogc:PropertyName> </Label>

</TextSymbolizer> </Rule> <Rule> <MaxScaleDenominator>40000000</MaxScaleDenominator> <LineSymbolizer> <Stroke /> </LineSymbolizer> <TextSymbolizer> <Label> <ogc:PropertyName>STATE_NAME</ogc:PropertyName> </Label>

</TextSymbolizer> </Rule> …

1:49M

1:25M

sld/rules/stateslabel.xml

Page 110: Introduzione a GeoServer ed ai servizi OGC

FeatureTypeStyle

• Raccoglie le rule relative a un certo FeatureType

• Ma può essere ripetuta più volte per lo stesso layer

• Ha l'effetto di creare layer trasparenti, impone ordine nel disegno delle Feature

autostrade, linea spessa

autostrade, linea sottile

altre strade

Page 111: Introduzione a GeoServer ed ai servizi OGC

<?xml version="1.0" encoding="ISO-8859-1"?><StyledLayerDescriptor version="1.0.0" … > <NamedLayer> <Name>Highways1</Name> <UserStyle> <FeatureTypeStyle> <Rule> <LineSymbolizer> <Stroke> <CssParameter name="stroke">#F5B800</CssParameter> <CssParameter name="stroke-width">8</CssParameter> <CssParameter name="stroke-linejoin">round</CssParameter> <CssParameter name="stroke-linecap">round</CssParameter> </Stroke> </LineSymbolizer> <LineSymbolizer> <Stroke> <CssParameter name="stroke">#FFFF00</CssParameter> <CssParameter name="stroke-width">4</CssParameter> <CssParameter name="stroke-linejoin">round</CssParameter> <CssParameter name="stroke-linecap">round</CssParameter> </Stroke> </LineSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer></StyledLayerDescriptor>

Page 112: Introduzione a GeoServer ed ai servizi OGC

<?xml version="1.0" encoding="ISO-8859-1"?><StyledLayerDescriptor version="1.0.0" … > <NamedLayer> <Name>Highways1</Name> <UserStyle> <FeatureTypeStyle> <Rule> <LineSymbolizer> <Stroke> <CssParameter name="stroke">#F5B800</CssParameter> <CssParameter name="stroke-width">8</CssParameter> <CssParameter name="stroke-linejoin">round</CssParameter> <CssParameter name="stroke-linecap">round</CssParameter> </Stroke> </LineSymbolizer> </Rule> </FeatureTypeStyle> <FeatureTypeStyle> <Rule> <LineSymbolizer> <Stroke> <CssParameter name="stroke">#FFFF00</CssParameter> <CssParameter name="stroke-width">4</CssParameter> <CssParameter name="stroke-linejoin">round</CssParameter> <CssParameter name="stroke-linecap">round</CssParameter> </Stroke> </LineSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer></StyledLayerDescriptor>

Page 113: Introduzione a GeoServer ed ai servizi OGC

Esempio carta tematica

• Quante e quali rule?

• Quanti e quali feature type style?

• Quali symbolizer?

Page 114: Introduzione a GeoServer ed ai servizi OGC

Altro esempio, dipendenze da scala

• Quante rule?

• Quanti feature type style?

• Quali symbolizer?

Page 115: Introduzione a GeoServer ed ai servizi OGC

Web Feature Service,transactional WFS

Page 116: Introduzione a GeoServer ed ai servizi OGC

WFS Transactional

• Transactional WFS significa poter:– Aggiungere

– Cancellare

– Modificare

• Attributi:– geometrici

– non geometrici

• La modifica può essere effettuata su singole Feature, o in massa, un filtro decide quali Feature vengono coinvolte

• Si possono modificare più FeatureType in una singola operazione

Page 117: Introduzione a GeoServer ed ai servizi OGC

Generalità

• Inserimento, modifica, cancellazione (combinate anche nella stessa chiamata)

• Proprietà ACID:– Atomicity: verificata su qualunque data store,

anche sugli shapefile

– Consistency: verifica dei vincoli di integrità, quando presenti. Si può attivare un validatore di Feature configurabile!

– Isolation: in funzione di come è configurato il server DBMS (di norma, il livello di isolamento è read-committed)

– Durability: in funzione di quale store è stato scelto (non c'è un log delle transazioni per gli shapefile).

Page 118: Introduzione a GeoServer ed ai servizi OGC

Limitazioni/problematiche

• L'operazione Transaction è tassativamente– espressa in GML

– effettuata come richiesta di tipo POST

• E' necessario disporre di una chiave primaria sulle tabelle di database (il FeatureID deve essere stabile), possibilmente di tipo “auto-incremento”

• Le proprietà ACID sono garantite solo se i backend sono database, e solo se tutti i feature type sono nello stesso database

• Per default GeoServer pubblica tutti i layer in modalità read/write, bisogna agire sul sottostema di sicurezza per limitare la scrittura di alcuni layer, o disabilitare WFS Transaction del tutto

Page 119: Introduzione a GeoServer ed ai servizi OGC

TransactionalWFS

11

22

33

Page 120: Introduzione a GeoServer ed ai servizi OGC

Transactional WFS, chiamate

roads.shp

Geo

Serv

e rG

eoS

erve r

uD

igu

Dig

GetFeature

Transaction

GetFeature

Page 121: Introduzione a GeoServer ed ai servizi OGC

<wfs:Transaction service="WFS" version="1.0.0" ...> <wfs:Insert> <topp:tasmania_roads> <topp:the_geom> <gml:MultiLineString srsName="EPSG:4326"> <gml:lineStringMember> <gml:LineString> <gml:coordinates decimal="." cs="," ts=" "> 494475,5433016 494982,5435041 </gml:coordinates> </gml:LineString> </gml:lineStringMember> </gml:MultiLineString> </topp:the_geom> <topp:TYPE>alley</topp:TYPE> </topp:tasmania_roads> </wfs:Insert></wfs:Transaction>

<?xml version="1.0" encoding="UTF-8"?><wfs:WFS_TransactionResponse version="1.0.0" … > <wfs:InsertResult> <ogc:FeatureId fid="new0" /> </wfs:InsertResult> <wfs:TransactionResult> <wfs:Status> <wfs:SUCCESS /> </wfs:Status> </wfs:TransactionResult></wfs:WFS_TransactionResponse>

RICHIESTA

RISPOSTA

INSERT

Page 122: Introduzione a GeoServer ed ai servizi OGC

<wfs:Transaction service="WFS" version="1.0.0" … > <wfs:Update typeName="topp:tasmania_roads"> <wfs:Property> <wfs:Name>TYPE</wfs:Name> <wfs:Value>street</wfs:Value> </wfs:Property> <ogc:Filter> <ogc:FeatureId fid="tasmania_roads.1" /> </ogc:Filter> </wfs:Update></wfs:Transaction> RICHIESTA

RISPOSTA

UPDATE

<?xml version="1.0" encoding="UTF-8"?><wfs:WFS_TransactionResponse version="1.0.0" … > <wfs:TransactionResult> <wfs:Status> <wfs:SUCCESS /> </wfs:Status> </wfs:TransactionResult></wfs:WFS_TransactionResponse>

Modifica attributo non geometrico

Filtra per identificativo

Page 123: Introduzione a GeoServer ed ai servizi OGC

RICHIESTA

RISPOSTA

DELETE<wfs:Transaction service="WFS" version="1.0.0" xmlns:cdf="http://www.opengis.net/cite/data" xmlns:ogc="http://www.opengis.net/ogc" xmlns:wfs="http://www.opengis.net/wfs" xmlns:topp="http://www.openplans.org/topp"> <wfs:Delete typeName="topp:tasmania_roads"> <ogc:Filter> <ogc:PropertyIsEqualTo> <ogc:PropertyName>topp:TYPE</ogc:PropertyName> <ogc:Literal>alley</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Filter> </wfs:Delete></wfs:Transaction>

<?xml version="1.0" encoding="UTF-8"?><wfs:WFS_TransactionResponse version="1.0.0" … > <wfs:InsertResult> <ogc:FeatureId fid="none" /> </wfs:InsertResult> <wfs:TransactionResult> <wfs:Status> <wfs:SUCCESS /> </wfs:Status> </wfs:TransactionResult></wfs:WFS_TransactionResponse>

Page 124: Introduzione a GeoServer ed ai servizi OGC

Dati rasterin GeoServer

Andrea Aime, Simone Giannecchini

www.geo-solutions.it

www.geoserver.org

Page 125: Introduzione a GeoServer ed ai servizi OGC

Struttura e nomenclatura

• I dati raster nel mondo OGC vengono detti coverage

• GeoServer supporta dati raster in vari formati e varie strutture

• Come per i vettoriali:– abbiamo CoverageStore e Coverage (rapporto 1-

1)

– un sistema di riferimento, area coperta

– uno stile di default

• Come per il vettorali, due servizi– WMS per il rendering

– WCS per ritornare direttamente una porzione di raster (analogo a WFS)

Page 126: Introduzione a GeoServer ed ai servizi OGC

Formati supportati

• Nell'installazione standard

– ArcGrid (puro testo, pixel quadrati, semplice, lento)

– GTOPO30 (binario, esempio di formato DEM)

– Immagini + world file + prj

– GeoTiff

– Mosaico di immagini• Con le estensioni GDAL

– MrSID, JPEG2000 (con librerie MrSID)

– DTED, Erdas, Ehdr, NITF

– .... e ECW?

Page 127: Introduzione a GeoServer ed ai servizi OGC

Il caso ECW

• Se il gruppo di sviluppo distribuisse le librerie ECW sarebbe perseguibile per violazione della licenza

• Le librerie ECW sono un prodotto commerciale, per utilizzarle liberamente in un prodotto di classe server occorre pagare una licenza

• E' possibile scaricare l'image SDK di ER-Mapper per effettuare valutazioni personali, ma non è possibile redistribuirlo

• Gli sviluppatori sono al lavoro per trovare un compromesso: il supporto ECW si attiva solo se l'utente aggiunge di persona le librerie ECW

• Questo sposta la responsabilità legale sulle spalle dell'utente

Page 128: Introduzione a GeoServer ed ai servizi OGC

Bande

• Mono banda o multi banda

Singola banda.Caso tipo, la misura di

un fenomeno nello spazio(quota, concentrazioni,

temperature, ecc.)

Multi bandaCasi tipo, immagini nel campo

del visibile (RGB o RBGA)o immagini satellitari multispetralli

Page 129: Introduzione a GeoServer ed ai servizi OGC

Compressione

• Alcuni formati supportano la compressione

• Ad esempio, JPEG, PNG + word file

• O il GeoTiff

• La compressione riduce lo spazio usato dal file anche notevolmente, ma lo spazio guadagnato si paga in termini di prestazioni

• Per i JPEG o i PNG tutto il file deve essere letto per poterne disegnare anche solo una parte

• Per i GeoTiff... dipende dal tiling

Page 130: Introduzione a GeoServer ed ai servizi OGC

Compressione wavelet

• ECW, MrSID e JPEG2000 usano metodi matematici di compressione basati sulle wavelet

• Garantiscono elevati fattori di compressione (10 volte meglio di un GeoTIFF)

• Possono essere lossless or meno

• A seconda della implementazione possono garantire anche prestazioni molto elevate, in particolare permettono estrazione di porzioni di immagini o di risoluzioni intermedie a elevata velocità

• Ma... le librerie a elevate prestazioni sono tutte commerciali, ErMapper per ECW (formato proprietario) e Kakadu per JPEG2000 (formato aperto)

Page 131: Introduzione a GeoServer ed ai servizi OGC

Tiling e overview

• Quando il raster è di grande volume (da centinaia di MB fino a decine di GB) si presentano due seri problemi

– accedere efficientemente a un sottoinsieme delle celle del raster

– visualizzare il raster a scala ridotta senza doverlo leggere tutto

• Tiling → la struttura fisica del raster è spezzata in mattonelle cui si può accedere velocemente

• Overview → il file contiene non solo il raster a risoluzione nativa, ma anche copie a risoluzione ridotta, spesso con dimensioni del pixel che variano con le potenze di due

Page 132: Introduzione a GeoServer ed ai servizi OGC

Accesso a una porzione di celle in un raster tiled

Page 133: Introduzione a GeoServer ed ai servizi OGC

Accesso alla overview con la risoluzione più simile per disegnare il raster a una scala inferiore alla nativa.Quando le overview sono a loro volta tiled, si parla di “piramide”

Page 134: Introduzione a GeoServer ed ai servizi OGC

GeoTiff

• GeoTIFF è un file TIFF con specifiche informazioni geografiche incluse nell'intestazione

– proiezione

– trasformazione image to world (da riga/colonna a x/y reali)

• Un GeoTiff può avere le più varie strutture interne– può essere compresso jpeg senza tiling →

equivalente 1-1 a un jpeg

– può essere tiled, le tile possono essere o meno compresse (vari tipi di compressione)

– può o meno essere dotato di overview

Page 135: Introduzione a GeoServer ed ai servizi OGC

GDAL Utilities

• Insieme di utility a linea di comando per manipolare dati raster e vettoriali

• Open Source

• Supporta decine di formati

• In particolare siamo interessati ai comandi:– gdalinfo: informazioni sulla struttura di un file

raster

– gdal_translate: conversione di formato o modifiche alla struttura

– gdaladdo: aggiunta di overview a un file che non ne sia dotato

Page 136: Introduzione a GeoServer ed ai servizi OGC

gdalinfo http://www.gdal.org/gdalinfo.html

gdalinfo merano.jpg

Driver: JPEG/JPEG JFIFFiles: merano.jpgSize is 6800, 5950Coordinate System is `'Origin = (663991.685767726740000,5172880.986841850000000)Pixel Size = (0.100000000000000,-0.100000000000000)Image Structure Metadata: SOURCE_COLOR_SPACE=YCbCr INTERLEAVE=PIXEL COMPRESSION=JPEGCorner Coordinates:Upper Left ( 663991.686, 5172880.987)Lower Left ( 663991.686, 5172285.987)Upper Right ( 664671.686, 5172880.987)Lower Right ( 664671.686, 5172285.987)Center ( 664331.686, 5172583.487)Band 1 Block=6800x1 Type=Byte, ColorInterp=Red Image Structure Metadata: COMPRESSION=JPEGBand 2 Block=6800x1 Type=Byte, ColorInterp=Green Image Structure Metadata: COMPRESSION=JPEGBand 3 Block=6800x1 Type=Byte, ColorInterp=Blue Image Structure Metadata: COMPRESSION=JPEG

No SRS!

Tre bande

Page 137: Introduzione a GeoServer ed ai servizi OGC

gdalinfo usaNaturalEarth.tif

Driver: GTiff/GeoTIFFFiles: usaNaturalEarth.tifSize is 18458, 9341Coordinate System is:GEOGCS["WGS 84", DATUM["WGS_1984", SPHEROID["WGS 84",6378137,298.2572235630016, AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]], PRIMEM["Greenwich",0], UNIT["degree",0.0174532925199433], AUTHORITY["EPSG","4326"]]Origin = (-135.002248347599960,57.002248153302645)Pixel Size = (0.004496695199910,-0.004496306605290)Metadata: AREA_OR_POINT=Area TIFFTAG_SOFTWARE=Adobe Photoshop CS Macintosh TIFFTAG_DATETIME=2005:09:07 14:07:19 TIFFTAG_XRESOLUTION=72 TIFFTAG_YRESOLUTION=72 TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch)Image Structure Metadata: INTERLEAVE=BANDCorner Coordinates:Upper Left (-135.0022483, 57.0022482) (135d 0'8.09"W, 57d 0'8.09"N)Lower Left (-135.0022483, 15.0022482) (135d 0'8.09"W, 15d 0'8.09"N)Upper Right ( -52.0022483, 57.0022482) ( 52d 0'8.09"W, 57d 0'8.09"N)Lower Right ( -52.0022483, 15.0022482) ( 52d 0'8.09"W, 15d 0'8.09"N)Center ( -93.5022483, 36.0022482) ( 93d30'8.09"W, 36d 0'8.09"N)Band 1 Block=256x256 Type=Byte, ColorInterp=Red Overviews: 4615x2336, 2308x1168, 1154x584, 577x292, 289x146Band 2 Block=256x256 Type=Byte, ColorInterp=Green Overviews: 4615x2336, 2308x1168, 1154x584, 577x292, 289x146Band 3 Block=256x256 Type=Byte, ColorInterp=Blue Overviews: 4615x2336, 2308x1168, 1154x584, 577x292, 289x146

WGS84

Overview,tile 256x256

Page 138: Introduzione a GeoServer ed ai servizi OGC

gdal_translate http://www.gdal.org/gdal_translate.html

• Trasformazione di formato, struttura, metadati, estrazione sottoinsiemi di dati

• Alcune opzioni dipendono dal formato, ad esempio: http://www.gdal.org/frmt_gtiff.html (creation options)

gdal_translate -a_srs EPSG:32632 -co "TILED=YES" -co "COMPRESS=JPEG" -co "JPEG_QUALITY=90" merano.jpg merano.tiffInput file size is 6800, 59500...10...20...30...40...50...60....

UTM 32N

Tile compresse

Page 139: Introduzione a GeoServer ed ai servizi OGC

gdaladdo http://www.gdal.org/gdaladdo.html

• Aggiunta di overview a file che le supportano (o overview esterne per altri tipi di file)

gdaladdo -r gauss --config COMPRESS_OVERVIEW JPEG merano.tiff 2 4 8 16 32 64

Algoritmo di riduzione

Compressionedelle overview

Risoluzioni delleoverview → 1/2, 1/4, ...

Page 140: Introduzione a GeoServer ed ai servizi OGC

Raster symbolizer

• Consente di:– attivare la visualizzazione dei raster

– applicare una scala colori a immagini mono-banda

– aumentare il contrasto di immagini in scala di grigi

DataSource: intero GTOPO30 in singolo file, JPEG2000 lossless166.392x21.587 pixels, 386MB(ftp://ftp.microimages.com/pub/outgoing/data/jp2/)

Page 141: Introduzione a GeoServer ed ai servizi OGC

Supporto KMLGeoServer

Andrea Aime, Simone Giannecchini

www.geo-solutions.it

www.geoserver.org

Page 142: Introduzione a GeoServer ed ai servizi OGC

Keyhole Markup Language

• Un dialetto XML promosso da Google e recentemente diventato standard OGC (KML 2.2)

• Un formato che a differenza di GML mescola nella stessa struttura xml:

– geometrie e attributi

– stili (piatti, con riferimenti a modelli 3D, o immagini piatte)

– annotazioni HTML

– specifiche temporali e di estrusione

• KML viene letto sia da Google Maps che da Google Earth, oltre che da un crescente numero di altri prodotti

Page 143: Introduzione a GeoServer ed ai servizi OGC

Documento KML minimo

<?xml version="1.0" encoding="UTF-8"?><kml xmlns="http://www.opengis.net/kml/2.2"> <Placemark> <name>Hello, Earth</name> <description>Here's where we developed Google Earth!</description> <Point> <coordinates>-122.084583,37.42227,0</coordinates> </Point> </Placemark></kml>

Page 144: Introduzione a GeoServer ed ai servizi OGC

Svariate possibilità

• Il KML può essere compresso per ridurne la dimensione. Si parla di KMZ in questo caso

• Il KML può essere– un lungo documento piatto (flat/dump)

– può puntare direttamente a immagini WMS (senza vettoriali)

– può alternare i due schemi di cui sopra a seconda della scala

– può usare una struttura gerarchica in cui ogni mattonella viene caricata solo quando viene raggiunto un certo livello di zoom (questo è il modo usato da Google Stessa) → SuperOverlay

Page 145: Introduzione a GeoServer ed ai servizi OGC

SuperOverlay

• Si assegnano regioni di spazio collegate fra loro

• Ogni regione si attiva da un certo livello di zoom in poi, ed è collegata a sottoregioni che si attivano a livelli di zoom inferiori (e così via)

• I dati vengono caricati un po' alla volta mentre si effettua lo zoom

Page 146: Introduzione a GeoServer ed ai servizi OGC

Esempio super-overlay

• Come si condivide un dataset di centinaia di MB?

• Un pezzo alla volta!

• GE carica ogni regione del SuperOverlay con una richiesta separata

Page 147: Introduzione a GeoServer ed ai servizi OGC

Relazione con lo zoom

Da lontano solo gli edificipiù “importanti” sono visualizzati

Page 148: Introduzione a GeoServer ed ai servizi OGC

Supporto KML in GeoServer

GeoServerGeoServer

Dativettorialie raster

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

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

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

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

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

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

Stili (SLD)

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

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

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

Template(personalizzazione output)

KML

Hmmm...dove ho già vistoquesto diagramma?

Page 149: Introduzione a GeoServer ed ai servizi OGC

In particolare...

• GeoServer usa l'SLD per decidere come disegnare le Feature (output simile a WMS)

• Per i vettoriali:– Usa un template FreeMarker per determinare

name e description

– Crea al volo un SuperOverlay basandosi su un attributo della Feature per determinare le feature più importanti (per default, la dimensione della geometria)

• Per i raster:– crea un SuperOverlay che chiede a GeoServer di

disegnare le tile di una piramide man mano che si effettuano gli zoom

Page 150: Introduzione a GeoServer ed ai servizi OGC

Esempi

• Nessuna personalizzazione dei template

• Non è presente un titolo

• La descrizione è un semplice elenco degli attributi con il Feature ID

Page 151: Introduzione a GeoServer ed ai servizi OGC

• Personalizzazione con template Freemarker

• Il nome viene preso dagli attributi

• La descrizione mette in narrativa alcuni altri attributi, e viene creato un collegamento a una immagine esterna

Page 152: Introduzione a GeoServer ed ai servizi OGC

Web Processing Service

Andrea Aime, Simone Giannecchini

www.geo-solutions.it

www.geoserver.org

Page 153: Introduzione a GeoServer ed ai servizi OGC

Web Processing Service

• Protocollo per l'analisi spaziale

• Al contrario di WFS/WMS non pubblica dati, ma algoritmi (di analisi spaziale) detti Processi

• Gli input possono essere caricati da remoto o essere presenti in locale

• I processi in GeoServer possono manipolare i dati di ingresso a una mappa (rendering transformation)

• Alcune chiamate possono richiedere molto tempo: supporto per richieste asincrone

Page 154: Introduzione a GeoServer ed ai servizi OGC

Dativettoriali

Catalogoprocessi,capacità analitiche del server

Descrizione input e output processo

Esecuzione e scarico risultati

GeoServerGeoServerWPSWPS

GetCapabilities

DescribeProcess

Execute

Datiraster

Page 155: Introduzione a GeoServer ed ai servizi OGC

WCSremoto

WFSremoto

ServerHTTP

WMSWMS

WPSWPS

Tutti i layer di Tutti i layer di GeoServerGeoServer

Interfaccia utente

GeoServer

Client WPS

Client WMS

Page 156: Introduzione a GeoServer ed ai servizi OGC

GetCapabilities

Elenco processi con nome e titolo

Page 157: Introduzione a GeoServer ed ai servizi OGC

DescribeProcess

http://localhost:8080/geoserver/ows?service=wps&version=1.0.0&request=DescribeProcess&identifier=JTS:buffer

Page 158: Introduzione a GeoServer ed ai servizi OGC

Execute<?xml version="1.0" encoding="UTF-8"?><wps:Execute version="1.0.0" service="WPS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/wps/1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:wcs="http://www.opengis.net/wcs/1.1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 ..."> <ows:Identifier>JTS:buffer</ows:Identifier> <wps:DataInputs> <wps:Input> <ows:Identifier>geom</ows:Identifier> <wps:Data> <wps:ComplexData mimeType="text/xml; subtype=gml/3.1.1"> <gml:LineString> <gml:posList>0.0 0.0 10.0 0.0 10.0 10.0</gml:posList> </gml:LineString> </wps:ComplexData> </wps:Data> </wps:Input> <wps:Input> <ows:Identifier>distance</ows:Identifier> <wps:Data> <wps:LiteralData>2</wps:LiteralData> </wps:Data> </wps:Input> </wps:DataInputs> <wps:ResponseForm> <wps:RawDataOutput mimeType="text/xml; subtype=gml/3.1.1"> <ows:Identifier>result</ows:Identifier> </wps:RawDataOutput> </wps:ResponseForm></wps:Execute>

Page 159: Introduzione a GeoServer ed ai servizi OGC

Execute<?xml version="1.0" encoding="UTF-8"?><gml:Polygon xmlns:sch="http://www.ascc.net/xml/schematron" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" srsDimension="2"> <gml:exterior> <gml:LinearRing srsDimension="2"> <gml:posList> 8.0 2.0 8.0 10.0 8.03842943919354 10.390180644032258 8.152240934977426 10.76536686473018 8.33706077539491 11.111140466039204 8.585786437626904 11.414213562373096 8.888859533960796 11.66293922460509 9.23463313526982 11.847759065022574 9.609819355967744 11.96157056080646 10.0 12.0 10.390180644032256 11.96157056080646 10.76536686473018 11.847759065022574 11.111140466039204 11.66293922460509 11.414213562373096 11.414213562373096 11.66293922460509 11.111140466039204 11.847759065022574 10.76536686473018 11.96157056080646 10.390180644032256 12.0 10.0 12.0 0.0 11.96157056080646 -0.3901806440322565 11.847759065022574 -0.7653668647301796 11.66293922460509 -1.1111404660392044 11.414213562373096 -1.414213562373095 11.111140466039204 -1.6629392246050905 10.76536686473018 -1.8477590650225735 10.390180644032256 -1.9615705608064609 10.0 -2.0 0.0 -2.0 -0.39018064403225733 -1.9615705608064606 -0.7653668647301807 -1.847759065022573 -1.1111404660392044 -1.6629392246050905 -1.4142135623730954 -1.414213562373095 -1.662939224605091 -1.111140466039204 -1.8477590650225737 -0.7653668647301793 -1.9615705608064609 -0.3901806440322567 -2.0 2.4492935982947064E-16 -1.9615705608064609 0.3901806440322572 -1.8477590650225735 0.7653668647301798 -1.6629392246050907 1.1111404660392044 -1.414213562373095 1.4142135623730951 -1.111140466039204 1.6629392246050907 -0.7653668647301786 1.847759065022574 -0.3901806440322551 1.961570560806461 0.0 2.0 8.0 2.0 </gml:posList> </gml:LinearRing> </gml:exterior></gml:Polygon>

Page 160: Introduzione a GeoServer ed ai servizi OGC

Estrazione isolinee

Page 161: Introduzione a GeoServer ed ai servizi OGC

Frecce del vento<StyledLayerDescriptor version="1.0.0" xmlns="http://www.opengis.net/sld" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sld ./StyledLayerDescriptor.xsd"> <NamedLayer> <Name>Wind</Name> <UserStyle> <Title>Wind</Title> <FeatureTypeStyle> <Transformation>

<ogc:Function name="gs:RasterAsPointCollection"> <ogc:Function name="parameter"> <ogc:Literal>data</ogc:Literal> </ogc:Function> </ogc:Function> </Transformation> <Rule> <PointSymbolizer> <Graphic> <Mark> <WellKnownName>

windbarbs://default(ogc:PropertyName>speed</ogc:PropertyName>)[m/s] </WellKnownName> <Stroke> <CssParameter name="stroke">#000000</CssParameter> <CssParameter name="stroke-width">1</CssParameter> </Stroke> <Fill> <CssParameter name="fill"> <ogc:Literal>#f5ffff</ogc:Literal> </CssParameter> </Fill> </Mark> <Size>8</Size> <Rotation> <ogc:PropertyName>direction</ogc:PropertyName> </Rotation> </Graphic> </PointSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer></StyledLayerDescriptor>