Managing GeoServer and Ortomaps

Il GeoServer offre è la possibilità si salvare un'enorme mole di dati in ambito geografico sottoforma di layers. Questi ultimi identificano intere collezioni di immagini JPEG o PNG, permettendo l'estrazione esclusiva delle immagini strettamente necessarie per un ristretto campo di visualizzazione. Tale estrazione può essere effettuata tramite diverse tipologie di servizi, e la scelta del servizio è fondamentale per l'ottimizzazione delle tempistiche relative alla resa grafica sulla mappa. Tale servizio, unito ai servizi dei browser di salvataggio di dati nella memoria Cache, permettono di visualizzare interi database di immagini (ad es. rilevazioni satellitari) senza la necessità di scaricare di volta in volta l'intera mole di dati, riducendo così drasticamente la complessità spaziale e temporale per il caricamento.

 

WMS

La specifica principale che  stata utilizzata tramite GeoServer è WMS (Web Map Service), un servizio definito dall'OCG (Open Geospatial Consortium) che da vita a una riproduzione dinamica dei dati geospaziali restituendo una serie di immagini JPEG, PNG o GIF idonee a essere visualizzate su un browser.

La specifica WMS prevede un client che utilizzi il protocollo HTTP, passando come parametri nell'URL le caratteristiche di visualizzazione richieste.

Esistono diverse versioni della specifica WMS; nel nostro caso utilizzeremo la versione 1.1.0.

 

3.3 Generazione di ortomappe

 

Leaflet offre diverse funzioni per la visualizzazione di ortomappe; nel nostro caso l'implementazione relativa alla generazione di ortomappe è stata effettuata con due metodologie differenti, sulla base della tipologia di ortomappa da caricare.

 

1. Il primo metodo, utilizzato nel nostro esempio specificatamente per le ortomappe che risiedono su server esterni, prevede la creazione di un layer attraverso la funzione L.tileLayer() che restituisce un nuovo layer aggiungibile successivamente alla mappa con la funzione .addTo(map). Tale layer è identificato da immagini raster in tiles con protocollo TMS (Tile Map Service), cioè splittando la mappa in una piramide di immagini con differenti livelli di zoom.

 

La visualizzazione di un cosiddetto tileLayer è una specifica efficace per la visualizzazione di ortomappe perchè prevede il caricamento dinamico delle singole immagini che compongono l'ortomappa andando a richiamare direttamente l'URL delle immagini stesse sulla base delle relative coordinate spaziali passate come parametri.

Per essere più chiari, un esempio di URL richiamabile è il seguente (nel codice sovracitato è identificato dalla variabile menu.linkUrl):  

https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png

 

dove {s} rappresenta il particolare sottodominio da interrogare utilizzato per l'organizzazione delle immagini, {z} rappresenta il livello di zoom identificato e  {x} e {y} rappresentano le coordinate spaziali relative all'immagine che occorre estrarre per la visualizzazione richiesta. Come parametro secondario la suddetta funzione può ricevere le opzioni relative all'ortomappa, come l'attribuzione dell'autore, le specifiche dello zoom e così via.

 

2. Il secondo metodo, utilizzato nel nostro esempio per le ortomappe che risiedono sul GeoServer, prevede l'interrogazione del GeoServer stesso tramite specifica WMS:

 

L'aggiunta della funzione wms() restituisce un nuovo livello da aggiungere alla mappa e prevede sempre l'utilizzo della specifica TileLayer e degli stessi parametri della funzione precedente, ma in questo caso l'URL che il GeoServer riceverà sarà simile al seguente: 

http://localhost:8080/geoserver/ambiti_amministrativi_toscana/wms

dove la radice del'URL rappresenta l'indirizzo locale del GeoServer, mentre la dicitura

ambiti_amministrativi_toscana/wms

rappresenta il workspace salvato sul GeoServer che vogliamo interrogare (ambiti_amministrativi_toscana nel nostro caso) e la relativa specifica da utilizzare (WMS nel nostro caso). Da evidenziare inoltre che nelle opzioni occorre anche specificare il layer che vogliamo andare ad utilizzare (nell'esempio identificato dalla variabile menu.layer), che deve avere la seguente precisa composizione: 

nome_workspace:nome_layer

Altre opzioni editabili sono l'estensione delle immagini da utilizzare (png o jpeg, la prima compatibile con il campo transparent), la versione della secifica WMS da utilizzare, etc.

 

3.4 Generazione di layers 

I layers si differenziano dalle ortomappe per il fatto che la loro visualizzazione prevede l'utilizzo di immagini vettoriali composte da punti, linee e poligoni, e non più raster come le specifiche precedenti. Questi ultimi sono infatti maggiormente utilizzati nel nostro esempio per l'esposizione di dati relativi a limiti amministrativi ed etichette.

L'implementazione prevede la lettura e la decodifica di specifici file contenenti i dati e lo stile dei layers da visualizzare, che possono essere di molti formati diversi. Nel nostro esempio utilizzeremo due funzioni diverse per l'estrazione dei dati, sulla base del file che contiene le informazioni e che andremo a leggere (KML e GeoJSON):

 

La prima funzione si avvale della libreria KML.js citata in (2) e prevede l'URL in cui si trova il file KML da leggere, restituendo cosi il layer aggiungibile alla mappa; come opzione è stata settata l'interrogazione asincrona del file. La seconda invece riceve direttamente la data contenente il codice JSON da analizzare e restituisce un nuovo layer.