15 Anni di programmazione

Aneddoti e Codici di un inguaribile ottimista

June 2012 - Post

Tematizzare mappe con OpenLayers

Concludiamo questa serie di articoli su OpenLayers mostrando come è possibile tematizzare un layer usando OpenLayers.

Tempo fa abbiamo visto come ciò fosse possibile lato server utilizzando SharpMap e lavorando su uno ShapeFile.

Il nostro scopo è produrre una mappa del genere,

clip_image002

nella quale possiamo scegliere il livello base tra Open Street Map, Open Layers e Google.

image

L’Europa è divisa in 5 regioni, ognuna delle quali è caratterizzata da un proprio stile. Lo stile è definito anche per l’evento click. Se per esempio clicchiamo sulla Francia, avremo il seguente risultato.

image

A ciascuna regione dell’Europa corrisponde un layer in formato GeoJson. Avremo dunque un file dove ogni nazione viene descritta come un complesso multipoligono.

 

image

 

Esistono su Internet diverse fonti che offrono i poligoni dei confini delle nazioni del mondo in vari formati. Nel mio caso sono partito da un file in formato .kml  che poi ho convertito nel formato geojson utilizzando il convertitore offerto dal seguente sito web.

Creiamo ora una pagina in formato html dove andremo a inserire il codice seguente:

image

Il tag body contiene al solito un div chiamato map che ospiterà la mappa. In corrispondenza dell’onload della pagina verrà chiamata la funzione init che semplicemente invoca un’altra funzione chiamata InserisciMappaConGeoJson definita in un file esterno .js

Anzitutto definiamo la mappa:

image

E quindi i layer base:

image

Prima di poter definire il layer GeoJson creiamo una funzione che crei uno stile da associare a un layer

 

image

 

La funzione è molto semplice e consente di definire un colore di riempimento per i poligoni in condizioni normali di visualizzazione (normalColor) e un altro (selectcolor) quando invece il poligono viene selezionato.

La funzione per definire un layer che carichi un file geojson necessita di conoscere il nome che verrà dato al layer, l’url del file json e lo stile che vogliamo applicare:

image

Riassumendo dunque:

image

A questo punto occorre definire e aggiungere alla mappa (per i layer che desideriamo) l’operazione di selezione di una feature.

image

Infine, vogliamo potere intercettare l’evento di click sulla mappa e associarvi un centraggio e uno zoom

image

La funzione è abbastanza complessa ma fortunatamente è ben documentata sul sito web di OpenLayers:

image

Il risultato è visibile al seguente indirizzo.

L’esperimento successivo è stato utilizzare questo codice in un progetto ASP.NET MVC 4. Il risultato è positivo purchè su IIS si definisca il MIME Type json! In caso contrario la mappa viene caricata ma non i layer GeoJson con un errore che genera confusione (il famoso “404” file not found).

Nella View il codice che ho utilizzato è il seguente:

image

La funzione stavolta accetta come argomento il percorso della cartella contenente i file .json

 

image