18 October, 2019
Ciao :)
Con questo tutorial vedremo come convertire tracce GPX in una Heatmap o Mappa di calore, usando Python ed alcune librerie!
Dalle tracce GPX Strava alla Heatmap
Scarica tutti i tuoi tracciati da Strava
Come riportato nella pagina relativa di Strava Esportazione dell’intero archivio :
- Accedi al tuo account su Strava.com da cui vuoi esportare l’archivio.
- Passa il cursore sul tuo nome nell’angolo in alto a destra della pagina Strava. Seleziona “impostazioni” e vai alla scheda “Il mio account” dal menù sulla sinistra.
- Seleziona “Per iniziare” sotto a “Scarica o cancella l’account.”
- Seleziona “Richiedi l’archivio” nella pagina successiva.
- Riceverai una email con un link da cui scaricare i dati (l’email può arrivare anche dopo qualche ora) e per questo motivo assicurati di poter accedere all’account email collegato al tuo profilo Strava.
Una volta che hai scaricato l’archivio, dovresti avere una cartella con all’interno un’altra chiamata “activities” e un csv “activities.csv”
Elaborazione dati
Per la successiva elaborazione useremo, python ed alcune librerie, come pandas , geopandas , togeojsontiles e matplotlib
import os
import pandas as pd
import geopandas as gpd
import togeojsontiles
import matplotlib.pyplot as plt
Selezione dei dati di interesse
os.chdir('YOUR PATH') # Move to the Strava directory
activities = pd.read_csv('./activities.csv')
Ora si possono visualizzare le prime righe di activities con activities.head()
activities.head()
Qualora le abbreviazioni per il mese delle attività fossero in una lingua diversa dall’inglese, dovrai impostare la lingua locale
import locale
locale.setlocale(locale.LC_ALL, 'it_IT')
Ora è necessario convertire ‘Data dell’attività’ in un formato datatime
activities['Data dell’attività'] = pd.to_datetime(activities['Data dell’attività'], errors='coerce', format='%d %b %Y, %H:%M:%S')
Imposta i filtri a cui sei interessato, per esempio:
start_date = pd.to_datetime('10 giu 2018, 14:00:00', errors='coerce', format = '%d %b %Y, %H:%M:%S')
end_date = pd.to_datetime('20 lug 2018, 14:00:00', errors='coerce', format = '%d %b %Y, %H:%M:%S')
selected = activities[(activities['Data dell’attività'] > start_date) & (activities['Data dell’attività'] < end_date) & (activities['Tipo attività'] == 'Ciclismo')]
Convertire da gpx a geojson
I nuovi file geojson saranno creati in una nuova cartella ‘geojson’
rows = len(selected.index)
indice = selected.index
newpath = './geojson/'
if not os.path.exists(newpath):
os.makedirs(newpath)
for i in range(rows):
filename = './'+selected.loc[indice[i],'Nome del file']
activity = filename.partition('s/')[-1].rpartition('.')[0] # Isolated activities name
jsonname = './geojson/'+activity+'.geojson' #
togeojsontiles.gpx_to_geojson(file_gpx=filename, file_geojson=jsonname)
Lista dei file geojson da aprire
list_gj = []
for (dirpath, dirnames, filenames) in os.walk('./geojson/'):
list_gj.extend(filenames)
break
Riproiezione
os.chdir('YOUR PATH TO GEOJSON FOLDER')
original = dict(ellps='WGS84', datum='WGS84', proj='longlat')
target = dict(ellps='WGS84', datum='WGS84', proj='utm', zone=32, units='km', no_defs=True) # edit zone if needed
Plotting
fig, ax = plt.subplots(1, figsize=(12, 12))
ax.axis('off')
for i in range(len(list_gj)):
giro = gpd.read_file(list_gj[i])
giro_series = gpd.GeoSeries(giro['geometry'])
giro_series.crs = original
track = giro_series.to_crs(crs=target).plot(ax=ax, alpha=0.5) # You can change colors, trasparency, etc. here
plt.show()
Spero che questo tutorial possa essere stato utile!
Happy heatmapping ;)
Kerook