| 
  • If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • You already know Dokkio is an AI-powered assistant to organize & manage your digital files & messages. Very soon, Dokkio will support Outlook as well as One Drive. Check it out today!

View
 

Personalizzare il WMS con SLD

Page history last edited by Amedeo Fadini 10 years, 2 months ago

05/02/2014

Da quando ho cominciato ad interessarmi di webgis e infrastrutture di dati territoriali, mi sono reso conto del fatto che il grande lavoro di definizione degli standard da parte dell'Open Geospatial Consortiium ci consente ormai di integrare e sovrapporre i dati grografici creando infinite combinazioni. In quest'ottica la definizione dello standard SLD - Style Layer Descriptor è un po' il grimaldello che consente di personalizzare la visualizzazione dei servizi WMS. Spesso quando si parla del servizio WMS lo dfinidamo come una mappa già confezionata, infatti viene fornito all'utente come una immagine georiferita o un insieme di tiles. Quando si progetta e implementa una infrastruttura di dati, ad esempio pubblicando un livello con Geoserver spesso si perde non poco tempo nelal definizione (o nel reperimento) di diversi stili predefiniti tra i quali l'utente potrà scegliere quello che più si adatat alla sua applicazione. Le specifiche SLD però consentono anche di inviare al server uno stile personalizzato rendendo infinite le possiblità di visualizzazione di un singolo servizio. L'intero testo xml dello stile viene inviato al server sempre seconodo il protocollo http con il metodo GEt oppure POST. Significa che possiamo costruire delle librerie di stili su un server e inglobarli liberamente nelal chiamata ad altri servizi. Vediamo come questo avviene nel dettaglio. Per prima cosa occorre assicurarsi che il servizio a cui vogliamo accedere supporti questa funzionaliltà degli stili definiti dall'utente: occorre interrogare il servizio con la richiesta GetCapabilities e verificare che il documento di risposta contenga la riga: <UserDefinedSymbolization SupportSLD="1" UserStyle="1"/> Ad esempio qui faccio riferimento al livello della litologia regionale disponibile come WMS all'indirizzo: http://idt.regione.veneto.it/WMS_c0501_Litologia/wmservice.aspx Poi andiamo a creare uno stile SLD che faccia riferimento agli atributi del layer in questione, ad esmpio utilizzando Qgis 2.01 ho creato questo codice che categorizza i terreni in base alla permabilità colorandoli dal blu al verde (qui la regola per permeabilità = 0)         

<se:Rule>
          <se:Name>0</se:Name>
          <se:Description>
            <se:Title>0</se:Title>
          </se:Description>
          <ogc:Filter>
            <ogc:PropertyIsEqualTo>
              <ogc:PropertyName>PERMEABILI</ogc:PropertyName>
              <ogc:Literal>0</ogc:Literal>
            </ogc:PropertyIsEqualTo>
          </ogc:Filter>
          <se:PolygonSymbolizer>
            <se:Fill>
              <se:SvgParameter name="fill">#0000ff</se:SvgParameter>
            </se:Fill>
            <se:Stroke>
              <se:SvgParameter name="stroke">#000000</se:SvgParameter>
              <se:SvgParameter name="stroke-width">0.26</se:SvgParameter>
            </se:Stroke>
          </se:PolygonSymbolizer>
        </se:Rule>

Le modalità con cui è possibile passare uno stile SLD al server sono quattro:

1 -(http get) SLD=(URL) dove l'indirizzo del file SLD è inviato come parametro

2 - (http get) SLD_BODY=... dove viene inviato in GET l'intero testo SLD

3 - (http post) WMS GetMap 1.2 invia SLD (e altri parametri richiesti) in un documento Post XML

4 - (http post) GET Parameters modalità mista : POST per SLD e GET per i parametri

 

Andiamo a testare la modalità n 1 che consentirebbe di creare e condividere librerie di stili SLD riutilizzabili.

Dapprima pubblico su un sito accessibile dall'esterno lo stile sld appena creato e memorizzo l'indirizzo corrispondente (http://www.amefad.it/sld/permeabilita.sld)

 

Questa è l'immagine della provincia di Treviso ottenuta con lo stile "default":

http://idt.regione.veneto.it/WMS_c0501_Litologia/wmservice.aspx?service=WMS&version=1.1.1&request=GetMap&layers=c0501031_LitologiaReg&bbox=1712986.27,5047030.15,1786866.83,5108676.87&srs=EPSG:3003&format=image/png&height=450&width=450&styles=

 

 

E questa è la stessa area aggiungendo il parametro SLD=http://www.amefad.it/sld/permeabilita.sld

 

 

Come si può notare una bella differenza in termini di informazione!

I problemi di questo approccio non mancano perchè occorre risolvere alcuni probelmi di compatibilità del codice SLD con gli atributi così come sono esposti dal server, problemi di codifica e di comunicazione cross-domain... però il risultato merita questa fatica.

 

 

Amedeo Fadini Riferimenti http://geo-solutions.blogspot.it/2012/04/dynamic-wms-styling-with-geoserver-sld.html http://stackoverflow.com/questions/14187187/how-to-add-sld-style-to-a-wms-layer-dynamically-through-javascript

Comments (0)

You don't have permission to comment on this page.