Forum OSM France

[guide] Heatmap Strava offline sur osmand

Bonjour a tous et toutes,
Un petit tuto pour avoir la heatmap strava détaillée en surcouche hors connection sur Osmand.
La heatmap strava est une carte qui agrège tous les déplacements vélo, course a pied… des utilisateurs.

Une fois sur Osmand cela donne quelque chose comme ça :


Et cela permet de facilement savoir quels sont les chemins les plus empruntés pour se repérer en plein air !
Avertissement:
Je n’ai pas été regarder les conditions d’utilisation de strava mais je suis a peu près sur que ce genre d’usage n’est pas autorisé, a vos risques et périls donc.
Toutes les infos et codes sont issues des sources suivantes, merci à elles et eux !
Ici pour récupérer les accès a strava
Ce super repo git pour récupérer des images tiff depuis un serveur TMS
Et ce tuto pour convertir les images tiff en sqlitedb exploitable par osmand
Ce repo pour convertir les fichiers mbtiles en sqlite

TL;DR
  • Récupérer l’url d’accès a strava comme dans le wiki
    git clone https://github.com/gumblex/tms2geotiff
    python tms2geotiff/tms2geotiff.py -s "URL" -f 48.682620,1.817721 -t 48.157658,2.444350 -z 15 output.tiff
    gdal_translate output.tiff output.mbtiles
    gdaladdo -r nearest output.mbtiles 2 4 8 16
    git clone https://github.com/tarwirdur/mbtiles2osmand
    python3 mbtiles2osmand/mbtiles2osmand.py output.mbtiles output.sqlitedb
    (optionnel) python3 unite_osmand.py fichier1.sqlitedb fichier2.sqlitedb fichierFinal.sqlitedb

Accès a strava et cookies

Dans un premiers temps, il faudra pouvoir accéder au serveur TMS de strava depuis python (on va utiliser des scripts pour télécharger les tuiles).
Il fut un temps ou l’on pouvait librement accéder a la heatmap détaillée, mais maintenant sans compte (gratuit) on n’a plus accès qu’a une bouillie de pixels (zoom 10 max) .
La première étape va donc être de se créer un compte sur strava.

Si besoin...

Si vous ne voulez pas créer de compte, je peux passer des token d’accès sur demande par MP :slight_smile:

Une fois que c’est fait, il faut récupérer les valeur des cookies cloudflare comme pour accéder a Strava sur josm (procédure détaillée sur le wiki) .
Pour faire court, sous firefox :

  • Accéder a la heatmap depuis le site web
  • Shift+F9 ( chrome://settings/cookies/detail?site=strava.com sur chrome)
  • Et on récupère les valeurs des cookies suivants :
    – CloudFront-Key-Pair-Id
    – CloudFront-Policy
    – CloudFront-Signature
    Valeurs que l’on remplace alors dans l’url suivante :
    https://heatmap-external-a.strava.com/tiles-auth/$ACTIVITY/$COLOR/{z}/{x}/{y}.png?Key-Pair-Id=$VALEUR&Policy=$VALEUR&Signature=$VALEUR
    En remplaçant VALEUR par les valeurs des cookies respectives obtenues ci-avant.
    Alternativement, il y a une extension firefox et chrome permettant de récupérer cette url directement ici.
    $ACTIVITY est l’activité a afficher et peut prendre les valeurs suivantes:
Activités
  • run :course a pied
  • ride : vélo
  • winter : sports d’hiver
  • water : Sports nautiques
  • all : Tout ce qui précéde, agrégé

Et $COLOR est la couleur d’affichage :

Couleurs
  • blue
  • bluered
  • purple
  • hot → en couleurs vives
  • gray

A noter que les valeurs des cookies expirent au bout d’une semaine, si ce n’était pas le cas on aurait pu utiliser la couche TMS dans Osmand directement en ligne.

Téléchargement du fichier tiff

On peut maintenant accéder a strava directement depuis un logiciel comme si s’était identifié par navigateur grace a l’url trouvée avant :partying_face:
On va pouvoir commencer à télécharger depuis le serveur TMS !
Pour cela, tout ce qu’il faut est sur ce git
Il nous faut d’abord le fichier requirements.txt qui donne les paquets python a installer.
On exécute juste pip install -r requirements.txt (sous linux) dans l’invite de commande et le tour est joué… Ou pas parce que GDAL est connu pour poser des soucis…

Soucis avec GDAL?

Les problèmes varient selon les gens, pour moi (arch) il a fallu que j’installe le paquet gdal des repos sinon le pip install plante. Sous debian c’est « gdal-bin » qu’il faut installer il me semble

Sous windows

Soit vous avez python et la procédure est la même que sous linux,
Soit vous avez anaconda et il faut installer les 4 paquets a la main via conda install <paquets>
Vous allez aussi avoir des problèmes avec GDAL (en tout cas j’en ai eu, un peu plus tard) parce qu’il trouvait pas un fichier contenant les projections.
La solution pour moi était de mettre au début du script tms2geotiff.py les données d’environnement suivantes :
import os
os.environ['GDAL_DATA']="C:/Users/NOM_UTILISATEUR/Anaconda3/Library/share/gdal"
os.environ['PROJ_LIB']="C:/Users/NOM_UTILISATEUR/Anaconda3/Library/share/proj"
Les chemins peuvent varier entre les install, faites vos propres recherches :male_detective:

On va alors exécuter le fichier tms2geotiff.py avec la commande suivante:
python tms2geotiff.py -s "https://heatmap-external-a.strava.com/tiles-auth/$ACTIVITY/$COLOR/{z}/{x}/{y}.png?Key-Pair-Id=$VALEUR&Policy=$VALEUR&Signature=$VALEUR" -f $DEBUTZONE-t $FINZONE -z $ZOOM sortie.tiff
Avec l’url remplie avec les infos trouvées plus haut, $DEBUTZONE les coordonnées gps haut gauche de votre zone de téléchargement, par ex 48.682620,1.817721 et $FINZONE les coordonnées bas droite de la zone, par ex 48.157658,2.444350. Ces coordonnées sont trouvables ici par exemple.
$ZOOM est le niveau de zoom que vous voulez pour votre carte, un niveau égal a 15 marche bien et donne une carte bien détaillée chez moi.
Si gdal pose des soucis a l’éxécution sous windows, revenez plus haut, il y a une section pour vous :slightly_smiling_face:
Note: Ne téléchargez pas des zones trop grandes, non seulement c’est pas très utile mais en plus ça sature très (très) vite votre ram (je suis rapidement monté a 40GO d’utilisés !)
Vous pouvez télécharger les fichiers en plusieurs fois et suivre la même procédure pour tous, il y a un mécanisme pour les fusionner a la fin du post !

Ajout de niveaux de zoom supplémentaires

Toutes les infos (presque) a partir d’ici viennent de ce blog
Pour pouvoir passer dans un format utilisable pour la suite, on va utiliser gdal_translate :
gdal_translate sortie.tiff sortie.mbtiles
depuis l’invite de commande (cmd sous windows)
On rajoute ensuite des niveaux de zoom supplémentaires pour que la surcouche puisse être affichée même lorsque l’on dézoome la carte :
gdaladdo -r nearest sortie.mbtiles 2 4 8 16
On a maintenant la carte comme on veut , mais Osmand veut du sqlitedb…

Passage à osmand

On récupère le fichier mbtiles2osmand.py depuis ce git .
On l’éxectute simplement par :
python3 mbtiles2osmand.py sortie.mbtiles sortie.sqlitedb

Sous windows

Pour une raison assez mystérieuse, cette partie la ne marchait pas sous l’invite ce commande de conda pour moi.
Il a fallu que je passe par visual studio pour l’exécuter, étrange

il faut maintenant l’importer dans votre appareil android en mettant le fichier sqlitedb dans le dossier $OSMAND/tiles/sortie.sqlitedb
$OSMAND le dossier principal d’osmand , par ex Android/data/net.osmand.plus/ sous android.
Sinon vous l’ouvrez juste depuis n’importe ou et osmand devrait se proposer de l’importer.
Et enfin, vous pouvez afficher votre superbe surcouche via, dans osmand:
Paramétrer la carte → surcouche de carte → < votre nom de votre carte >
Félicitations si vous en êtes arrivés la !

Annexe: Fusionner les fichiers

Si vous vous voulez des zones plus grandes, vous pouvez suivre la procédure au dessus avec plusieurs fihciers .tiff et fusionner les fichiers .sqlitedb a la fin comme suit:
Téléchargez le fichier unite_osmand.py depuis ce git.
Puis vous l’éxécutez comme suit :
python3 unite_osmand.py fichier1.sqlitedb fichier2.sqlitedb fichierFinal.sqlitedb
Et importez fichierFinal.sqlitedb dans osmand!
Enjoy!