Geologia e Python: come creare una webmap dei vulcani giapponesi

La cartografia ha fatto passi da giganti con il progresso tecnologico ad esempio, in seguito all’esplosione del web, sono nate 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 verrà spiegato come costruire una webmap dei vulcani in Giappone: cliccando su un vulcano, che verrà rappresentato da un cerchio verde (inattivo) o rosso (attivo), si aprirà una vignetta con delle informazioni sul vulcano stesso.

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

Il modulo folium

Folium è una libreria Python che ci permette di visualizzare i dati spaziali in modo interattivo. Folium costruisce le mappe unendo i punti di forza di Python con quelli di LeafletJS: 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:

La webmap dei vulcani giapponesi

Nella creazione della webmap 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 quale lo analizzeremo anche; con la libreria pandas dovrà essere importata anche la libreria folium.

 
import folium 
import pandas as pd 

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:

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]

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.

def colorazione(stato):
    if stato == 'Active':
        return 'red'
    else:
        return 'green'

Adesso implementiamo la mappa con il seguente codice:

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

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:

fgv = folium.FeatureGroup(name='Vulcani')

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.

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))

Siamo arrivati all fine della creazione della webmap, dato che dobbiamo soltanto aggiungere il Control Layer e il layer dei vulcani alla variabile mappa ed infine salvare il file .html risultante.

mappa.add_child(fgv)

mappa.add_child(folium.LayerControl())

mappa.save("vulcani-giapponesi.html")

Il risultato è il seguente:

Spread the love

Lascia un commento

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