Ricevere e visualizzare layer WMS

Per ricevere layer trasmessi da un server WMS con OL3, abbiamo a disposizione due metodi:

  • ol.source.ImageWMS: riceve una singola immagine creata al momento per ricoprire tutta la vista mappa rappresentata alla data risoluzione.
  • ol.source.TileWMS: riceve un reticolo di immagini (tiles) che compongono (mosaico) la vista mappa e cambiamo (numero e dimensione) in base alla risoluzione;

il secondo metodo (TileWMS) consente una  maggiore velocità di rendering perchè le tiles sono preformate e salvate in cache, ma richiede più spazio di memoria.

Quando il fornitore dei layers è un server WMS si possono usare entrambi indifferentemente; quando invece si tratta di un server WMTS, si può usare solo il metodo ol.source.TileWMS.

I due metodi sono molto simili cioè, a parte qualche differenza per il TileWMS, prevedono le stesse opzioni e gli stessi sotto-metodi (vd. OL3 API docs). Le due opzioni fondamentali sono:

  • url  per specificare l’indirizzo da cui il server fornisce il servizio WMS;
  • params per specificare i parametri della richiesta GetMap WMS: service, layers, styles, bbox, format, transparent, … etc.

Il seguente è un esempio di codice che definisce un layer WMS di tipo “image”, ricevendo un servizio WMS fornito dal PCN (Portale Cartografico Nazionale):

e questo è l’equivalente definendo invece un layer WMS di tipo “tile”:

qui c’è l’ esempio completo che mette a confronto i due metodi.

E’ ovvio che per ricevere correttamente una mappa WMS, bisogna specificare il nome del layer che la costituisce (o dei layers se più d’uno); nel caso del nostro esempio il nome è ‘GE.CARTAGEOLOGICA’.

Per conoscere quali sono i layers (e quindi i nomi) che costituiscono una mappa WMS si effettua direttamente sul browser una richiesta GetCapabilities. 

esempio GetCapabilities

Oppure si usa un client WMS, come per esempio quello in QGIS, che esegue la GetCapabilities al posto nostro e poi ci restituisce i nomi dei layers nella sua GUI.

Il parametro transparent ci dice se il layer WMS deve essere trasparente (true), cioè sovrapporsi alla basemap senza oscurarla, oppure no (false); se non specificato il valore di default è false. Se comunque il layer WMS non ha zone trasparenti (come nell’esempio fatto prima), la scelta di questo parametro è indifferente.

Nel caso di mappe WMS composte da più layers, questi possono essere ricevuti specificando l’elenco con i loro nomi (separati da virgole e senza spazi) nel parametro layers.

Mappa WMS multi-layer Per esempio, questo è il codice che carica una mappa delle aree protette del Piemonte di cui selezioniamo tre layers nominati: AreeProtette, ZPS e SIC

Facendo in questo modo ovviamente, i diversi layers che compongono la mappa WMS, non possono essere gestiti singolarmente, cioè il layer.Tile prodotto in OL3 è unico. Qui vedi l’esempio completo.

Altrimenti dobbiamo definire un layer.Tile distinto per ciascun layer che compone la mappa WMS. Così nel caso dell’esempio precedente, dobbiamo scrivere:

condividi: