Geoserver, protocollo WMS - laboratorio di...

Post on 15-Jun-2018

214 views 0 download

transcript

Geoserver, protocollo WMS

Como 22/01/2007Geoserver, un server OpenSDI a standard OGC

Andrea Aime

Geoserver lead developerThe Open Planning Project

2

WMS, Web Map Service

Protocollo per la creazione di mappe a standard OGC

Abbiamo una idea di layer e di stile, ma non è noto cosa siano internamenteNel caso di Geosever, un layer è un feature type WFS o una coverage WCSLo stile è sempre una descrizione in SLD (Styled Layer Descriptor)

Supportato il protocollo WMS 1.1.1, ma non l'1.3 (non è prevista una sua realizzazione).CITE compliant

3

WMS, operazioni

GetCapabilities

GetMapGetFeatureInfo

GetLegendGraphicDescribeLayerGetStyle

PutStyle

WMS

Estensioni SLD a WMS

WMS

5

WMS GetCapabilities

E' analoga alle GetCapabilities di WFS e WCS

La risposta elenca I soliti metadati sul serverLe chiamate supportateL'elenco dei layer, con lo stile di default e l'elenco dei sistemi di riferimento in cui possono essere restituiti

La parte relativa ai layer è interessante per quanto riguarda i sistemi di riferimentoL'elenco dei layer è gerarchico, si può definire un layer padre astratto che contiene definizioni comuni ai layer figli

Geoserver usa questa capacità per fornire una sola volta il lungo elenco di SRS supportati

6

WMS GetCapabilities, i layer<Layer> <Title>My GeoServer WMS</Title> <Abstract>This is a description of your Web Map Server.</Abstract> <!--common SRS:--> <SRS>EPSG:4326</SRS> <!--All supported EPSG projections:--> <SRS>EPSG::2000</SRS> <!-- altri 3000 e più SRS... --> <SRS>EPSG::69036405</SRS> <LatLonBoundingBox minx="-180.0" miny="-90.0" maxx="180.0" maxy="90.0" /> <Layer queryable="1"> <Name>topp:tasmania_roads</Name> <Title>tasmania_roads_Type</Title> ... <SRS>EPSG:4326</SRS> <!-- WKT definition of this CRS: GEOGCS["WGS 84", DATUM["World Geodetic System 1984", SPHEROID["WGS 84", 6378137.0, 298.257223563, AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]], PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], UNIT["degree", 0.017453292519943295], AXIS["Geodetic longitude", EAST], AXIS["Geodetic latitude", NORTH], AUTHORITY["EPSG","4326"]]--> <LatLonBoundingBox minx="145.19754" miny="-43.423512" maxx="148.27298000000002" maxy="-40.852802" /> <BoundingBox SRS="EPSG:4326" minx="145.19754" miny="-43.423512" maxx="148.27298000000002" maxy="-40.852802" /> <Style> ... </Style> </Layer>

Layer generale

Singolo layer

7

WMS GetCapabilities, time and dimension

La specifica WMS permette di allegare “dimensioni” ai layer, in modo da poter estrarre una specifica vista“Time” viene usata per layer di cui si dispongono varie versioni, valide in diversi istanti temporali“Elevation” consente invece di accedere allo stesso layer “affettato” su una certa quota (da voxel a semplice raster, ad esempio)

Geoserver non supporta queste estensioni al momento, probabilmente verranno aggiunte nella versione 1.6.x

8

WMS GetMap

Permette di ottenere una mappa specificando nella chiamata:

Un elenco di layer da visualizzareUn elenco di stili (può essere vuoto per adottare gli stili di defalt)L'area da visualizzareLa dimensione dell'immagineIl formato di immagine restituitoIl colore di sfondo, l'eventuale trasparenza dell'immagine

Lo standard base richiede di supportare le richieste di tipo GET, Geoserver ha una estensione che consente di usare anche POST (per richieste molto lunghe/complesse)

9

GetMap, esempio

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

10

GetMap, esempio 2

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

Antialiasing

Risoluzione conflitti etichette

11

GetMap, formati supportati

Dal documento GetCapabilities di Geoserver 1.5.x (in blu le novità non presenti in 1.4.0):

image/jpegimage/png (png 24 bit)image/gifimage/tiff

image/geotiff

image/svg+xmlapplication/pdf

application/vnd.google-earth.kml+xmlapplication/vnd.google-earth.kmz

Raster classici

Raster georeferenziati

Vettoriali

Google Earth

12

GetFeatureInfo

Permette di realizzare un tool “info”, ovvero sapere cosa c'é in un determinato punto e quali sono le sue proprietà

Si possono interrogare solo i layer con queryable=”true” nella risposta di GetCapabilities

Vari formati di uscita, puro testo e un HTML fissoI layer di tipo raster al momento non sono interrogabiliNella prossima release (1.6) aggiungeremo un sistema di templating per consentire di ottenere output ad hoc per la propria applicazione

13

GetFeatureInfo, esempio

http://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--------------------------------------------

SLD, Styled Layer Descriptor

15

SLD, Styled Layer Descriptor

SLD è una sofisticata specifica OGC per la vestizione di layer vettoriali e rasterE' molto flessibile, anche se nella sua generalità risulta di difficile comprensione e non ha sintassi semplificate per i tipi di rendering più comuni

Una volta presa padronanza dello strumento si possono realizzare styling piuttosto sofisticatiSi tratta di documenti XML, dove vengono riusate sia le specifiche GML che le specifiche Filter

16

SLD schema, UserStyle, FeatureTypeStyle, Rule

Un foglio di stile definisce stili per diversi FeatureType

Ogni regola descrive come vestire le Feature che soddisfano un certo filtro OGC, in un certo intervallo di scale

Ogni FeatureType viene vestitoapplicando in sequenza una o più regole

Il Symbolizer contiene le informazioni di vestizione

17

SLD schema, line symbolizer

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)

18

SLD schema, polygon symbolizer

Si applica solo a tipi poligonali (polygon, multipolyon, ring)

19

SLD schema, point symbolizer

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

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).

20

SLD schema, text symbolizer

Si applica a tutti i tipi di geometriaIl centroide viene scelto automaticamenteAbbiamo un semplice algoritmo di risoluzione dei conflitti (il primo vince)

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

21

SLD Schema, Raster symbolizer

Specifica piuttosto riccaAl momento Geoserver supporta color map e opacity

22

Come creare file SLD

SLD è potente, ma allo stesso tempo, è una giungla...

Per crearlo si possono adottare varie strategie:Usare un editor SLD capace di creare gli stili più comuni. Udig ne possiede uno.Usare un editor XML con supporto per XML schema, in grado di creare uno scheletro di partenza e di auto-completare il codicePartire da esempi già fatti e effettuare piccole modifiche

23

Esempi SLD, linea semplice

<?xml version="1.0" encoding="ISO-8859-1"?><StyledLayerDescriptor version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" 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"> <NamedLayer> <Name>Default Line</Name> <UserStyle> <FeatureTypeStyle> <Rule> <LineSymbolizer> <Stroke> <CssParameter name="stroke">#AA3333</CssParameter> <CssParameter name="stroke-width">2</CssParameter> </Stroke> </LineSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer></StyledLayerDescriptor>Una semplice linea, colore definito come in HTML, spessore 2.Si applica a qualunque feature type, poiché non abbiamo specificato un nome di feature type.Un color chooser online: http://www.december.com/html/spec/colorchooser.html

24

Esempi SLD, con etichette

...<FeatureTypeStyle> <Rule> <LineSymbolizer> <Stroke> <CssParameter name="stroke">#50B050</CssParameter> <CssParameter name="stroke-width">2</CssParameter> </Stroke> </LineSymbolizer> <TextSymbolizer> <Label> <ogc:PropertyName>TYPE</ogc:PropertyName> </Label> <Font> <CssParameter name="font-family">Times New Roman</CssParameter> <CssParameter name="font-size">16</CssParameter> <CssParameter name="font-weight">bold</CssParameter> </Font> <LabelPlacement> <LinePlacement> <PerpendicularOffset>5</PerpendicularOffset> </LinePlacement> </LabelPlacement> </TextSymbolizer> </Rule></FeatureTypeStyle>....

25

Esempi SLD, con filtri

<FeatureTypeStyle> <!-- Rule 1 --> <Rule> <ogc:Filter> <ogc:Not> <ogc:PropertyIsEqualTo> <ogc:PropertyName>TYPE</ogc:PropertyName> <ogc:Literal>highway</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Not> </ogc:Filter> <LineSymbolizer> <Stroke> <CssParameter name="stroke">#50B050</CssParameter> <CssParameter name="stroke-width">2</CssParameter> </Stroke> </LineSymbolizer> <TextSymbolizer> <Label> <ogc:PropertyName>TYPE</ogc:PropertyName> </Label> <Font> <CssParameter name="font-family">Times New Roman</CssParameter> <CssParameter name="font-size">12</CssParameter> <CssParameter name="font-weight">bold</CssParameter> </Font> </TextSymbolizer> </Rule> .... continua --->

26

Esempi SLD, con filtri, 2

<Rule> <ogc:Filter> <ogc:PropertyIsEqualTo> <ogc:PropertyName>TYPE</ogc:PropertyName> <ogc:Literal>highway</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Filter> <LineSymbolizer> <Stroke> <CssParameter name="stroke">#444444</CssParameter> <CssParameter name="stroke-width">8</CssParameter> <CssParameter name="stroke-linecap">round</CssParameter> </Stroke> </LineSymbolizer> <LineSymbolizer> <Stroke> <CssParameter name="stroke">#999999</CssParameter> <CssParameter name="stroke-width">4</CssParameter> <CssParameter name="stroke-linecap">round</CssParameter> </Stroke> </LineSymbolizer> ... continua -->

27

Esempi SLD, con filtri, 3

<TextSymbolizer> <Label> <ogc:PropertyName>TYPE</ogc:PropertyName> </Label> <Font> <CssParameter name="font-family">Times New Roman</CssParameter> <CssParameter name="font-size">18</CssParameter> <CssParameter name="font-weight">bold</CssParameter> </Font> <Halo> <Radius> <ogc:Literal>2</ogc:Literal> </Radius> <Fill> <CssParameter name="fill">#FFF88B</CssParameter> <CssParameter name="fill-opacity">0.85</CssParameter> </Fill> </Halo> <Fill> <CssParameter name="fill">#FF0000</CssParameter> </Fill> </TextSymbolizer></Rule>That's all folks!

28

Esempi SLD, raster symbolizer

<FeatureTypeStyle> <Rule> <RasterSymbolizer> <Opacity>1.0</Opacity> <ColorMap> <ColorMapEntry color="#000000" quantity="-500" opacity="0.0"/> <ColorMapEntry color="#00ff00" quantity="-500" /> <ColorMapEntry color="#00fa00" quantity="-417" /> ... <ColorMapEntry color="#c85000" quantity="1400" /> <ColorMapEntry color="#be4100" quantity="1600" /> <ColorMapEntry color="#963000" quantity="2000" /> <ColorMapEntry color="#3c0200" quantity="3000" /> <ColorMapEntry color="#ffffff" quantity="5000" /> <ColorMapEntry color="#ffffff" quantity="13000" /> </ColorMap> </RasterSymbolizer>...

Gtopo30 w020n90, particolare vestito con la color map specificata nell'SLD

29

Sigma, un esempio complesso

Demo di sigma.openplans.org

Le strade principali sono un layer Postgis di alcuni gigabyte, con tre geometrie a tre diversi livelli di generalizzazione, e vari attributiIl foglio di stile che le disegna contiene 21 FeatureTypeStyle, ciascuno con una o più regoleSceglie lo styling in base alla scala (e di conseguenza adotta la geometria più adatta) e alle caratteristiche della stradaIn totale, è oltre 2000 righe... di fatto è un piccolo programma

WMS – estensioni SLD

31

DescribeLayer

Quando si scrive un SLD, occorre conoscere gli attributi dei feature type e le caratteristiche delle grid coverage

Queste informazioni sono fornite dai rispettivi servizi WFS e WCS

DescribeLayer consente di chiedere dove trovare il layer nel WFS e nel WCS, o se al contrario questo non è possibile (layer che rappresentano raggruppamenti di altri layer, ad esempio)

http://localhost:8080/geoserver/wms?request=DescribeLayer&layers=topp:tasmania_roads<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE WMS_DescribeLayerResponse SYSTEM ...><WMS_DescribeLayerResponse version="1.0.0"> <LayerDescription name="topp:tasmania_roads" wfs="http://localhost:8080/geoserver/wfs/WfsDispatcher?"> <Query typeName="topp:tasmania_roads" /> </LayerDescription></WMS_DescribeLayerResponse>

32

GetStyle/PutStyle/GetLegendGraphic

GetStyle e PutStyle consentono rispettivamente di ottenere il codice SLD di uno stile, e di caricare un nuovo stile sul server

Un client avanzato può sfruttare questa possibilità per ottenere un rendering specifico per le sue necessità

GetLegendGraphic permette di ottenere elementi grafici per creare la legenda di una mappa

33

Pratica

Preview di layer in MapBuilder

Caricamento di SLDSemplice uso di OpenLayer per ottenere mappe tiledUso di uDig per visualizzare mappe e creare SLD