QGIS: come estrarre le curve di livello da un DTM
16 Gennaio 2019
Che cosa è un’analisi granulometrica
11 Febbraio 2019
QGIS: come estrarre le curve di livello da un DTM
16 Gennaio 2019
Che cosa è un’analisi granulometrica
11 Febbraio 2019
Show all

Geologia e Python: come creare una web map

Le web map sono tra i risultati cartografici più moderni, ottenuti grazie al progresso informatico.In seguito all’esplosione del web sono nate diverse applicazioni per lo sviluppo di cartografia on-line.

Fra queste applicazioni va citato Leaflet.js, una libreria Javascript open source di soli 38KB per permette di realizzare mappe interattive e mobile friendly. Lavora efficientemente su tutte le piattaforme, sia mobile sia desktop, ed è certamente una delle scelte migliori tra quelle a disposizione.

In questo post vediamo come costruire una web map dei vulcani in Giappone: cliccando su un vulcano, che verrà rappresentato da un cerchio verde (inattivo) o rosso (attivo), si aprirà una vignetta (popup) con delle informazioni sul vulcano stesso.

monte-fuji-web-map
Il Monte Fuji, il vulcano più alto del Giappone (3776 metri). Immagine tratta da Wikipedia.

Creare una web map con Folium

Folium è una libreria Python che ci permette di visualizzare i dati spaziali in modo interattivo. Folium costruisce le mappe interattive, usando i punti di forza di Python uniti a quelli di LeafletJS: infatti i dati vengono elaborati con Python e visualizzati con LeafletJS attraverso Folium.

Questa libreria, open-source, è altamente intuitiva e consente un alto grado di interazione. La documentazione ufficiale è consultabile in questo link.

Approfondimenti

Se volete approfondire l’argomento trattato in questo post, vi consiglio i seguenti libri:

Sei digiuno di Python e vuoi acquisire nozioni su questo potente linguaggio di programmazione? Ti consiglio il corso “Python 3.8 Guida Completa: da Principiante a Esperto” (LINK) presente su Udemy. Sicuramente saper usare questo linguaggio di programmazione e le sue librerie è molto utile, anche perchè possiamo creare degli scripts per le nostre analisi invece che comprare software propietari.

La web map dei vulcani giapponesi

Nella creazione della web map dei vulcani del Giappone il primo passo da fare è avere un file .csv che contiene tutte le informazioni dei vulcani come ad esempio il nome, l’altezza, lo stato di attività, la quota e le coordinate. Questo file si può scaricare da qui.

Analizziamo il file vulcani-giapponesi.csv, usato in questo esempio, che contiene i campi: Name, Elevation, Latitudes, Longitudes e Status. I valori contenuti in questi campi verranno mostrati nei popup che si apriranno al click del mouse.

Una volta ottenuto il file lo importiamo nel progetto usando la libreria pandas. Con la libreria pandas dovrà essere importata anche la libreria folium.

[python] import folium import pandas as pd [/python]

Importate le due librerie necessarie, creiamo una variabile dataframe per leggere il file (attraverso il comando pd.read_csv) e quindi creiamo le variabili nelle quali posizioniamo le informazione da usare nella generazione della mappa:

[python] dataframe = pd.read_csv("vulcani-giapponesi.txt") nome= dataframe.iloc[:,0] elev = dataframe.iloc[:,1] lat = dataframe.iloc[:,2] long= dataframe.iloc[:,3] stato = dataframe.iloc[:,4] [/python]

Usiamo il comando iloc[] per prelevare le informazioni dalle colonne del dataframe: ad esempio nella prima colonna (NB: il linguaggio inizia a contare da zero) ci sono i nomi dei vulcani, che verranno posizionati nella variabile nome.

Nelle variabili elev, lat e long vengono inserite rispettivamente la quota e le coordinate (latitudine e longitudine) dei coni vulcanici. Infine nella variabile stato viene indicato se un vulcano è attivo o inattivo.

Una volta che abbiamo le variabili contenenti tutte le info necessarie, implementiamo una funzione per definire la colorazione dei vulcani sulla base del loro stato di attività: se lo stato è attivo il vulcano viene colorato di rosso mentre se è inattivo di verde.

[python] def colorazione(stato): if stato == ‘Active’: return ‘red’ else: return ‘green’ [/python]

Adesso implementiamo la mappa con il seguente codice:

[python] mappa = folium.Map(location=[36.2048, 138.2529], zoom_start=6, tiles=’Mapbox Bright’) [/python]

Con location impostiamo l’estensione della mappa, con zoom_start lo zoom iniziale e con tiles inseriamo la mappa di sfondo. Adesso possiamo creare una variabile per poter inserire il layer dei vulcani nella legenda:

[python] fgv = folium.FeatureGroup(name=’Vulcani’) [/python]

Siamo arrivati al punto di creare il layer dei vulcani da sovrapporte al tiles creato con la variabile mappa: con un ciclo for prendiamo i valori delle coordinate geografiche, di elevazione, stato e nome dei vulcani che verranno rappresentati con dei cerchi (attraverso il comando folium.CircleMarker). Usiamo il comando radius per impostare la grandezza dei cerchi (il valore è espresso in pixel), con fill_color impostiamo il colore del cerchio (attraverso la funzione definita in precedenza, e dando True al comando fill), con color=white coloriamo di bianco il bordo del cerchio ed infine diamo al riempimento un opacità (con fill_opacity) pari a 0.7. Infine con il comando popup creiamo una vignetta, contenente le informazione riguardante i vulcani, che si attiva al click del mouse.

[python] for lt, ln, el, st, vnm in zip(lat, long, elev, stato, nome): fgv.add_child(folium.CircleMarker(location=[lt, ln], radius = 5, popup= "<b>Nome</b>:" + vnm + ", " + "<b>Altezza</b>:" + str(el)+"metri" + ", "+ "<b>Stato</b>:"+st, fill_color=colorazione(st), fill=True, color=’white’, fill_opacity=0.7)) [/python]

Non ci rimane che aggiungere il Control Layer e il layer dei vulcani alla variabile mappa ed infine salvare il file .html risultante.

[python] mappa.add_child(fgv) mappa.add_child(folium.LayerControl()) mappa.save("vulcani-giapponesi.html") [/python]
Antonio Nirta
Antonio Nirta
Geologo classe '86, laureato in Scienze e Tecnologie Geologiche all'Università di Pisa. Oltre a fare divulgazione geologica, svolgo la libera professione di geologo ed insegno Matematica e Scienze. Adoro la scienza, la tecnologia e la fotografia. Lettore appassionato dei romanzi fantasy e dei romanzi storici, ho un debole per la pizza e tifo Juve.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *