Un serveur topographique (ou serveur d’élévation) expose une API HTTP permettant de récupérer l’altitude pour une ou plusieurs coordonnées GPS. C’est typiquement utilisé pour :
-
profil altimétrique (dénivelé) d’un itinéraire,
-
enrichissement de traces GPX,
-
calculs de pente / analyse terrain,
-
affichage d’altitude côté application.
Dans ce guide, on met en place OpenTopoData, une API d’élévation open source, avec Docker, puis on la rend “prod-friendly” via systemd, et on détaille la gestion des datasets (SRTM / EU-DEM).
OpenTopoData
1) Installation
Pré-requis
Installer Docker.
OpenTopoData est fourni avec une image Docker ; c’est le chemin le plus simple et le plus reproductible.
Récupérer le projet et construire l’image
Cloner puis builder :
git clone https://github.com/ajnisbet/opentopodata.git cd opentopodata/ make build make run-
make build : construit l’image Docker
-
make run : lance le container (optionnel, pour test rapide)
Lancer le serveur via Docker (commande directe)
Il est aussi possible de lancer sans make run, directement en CLI, en montant le répertoire des données en lecture seule :
docker run --rm -it --volume "/home/www/opentopodata/data:/app/data:ro" -p 5000:5000 opentopodata:`cat VERSION`Explications :
-
--volume "/home/www/opentopodata/data:/app/data:ro" : expose vos datasets au container
-
-p 5000:5000 : expose l’API sur le port 5000
-
opentopodata:\cat VERSION`` : lance la version taggée identique au repo
Tracez votre propre parcours
MapPlanner vous aide à calculer les distances, le dénivelé, la durée et à planifier vos randonnées, courses à pied et sorties vélo sur une carte interactive.
- Calcul automatique des distances et du dénivelé
- Cartes topographiques, satellite et IGN
- Export GPX/KML pour votre GPS
- Suivi GPS en temps réel
2) Créer un service systemd (démarrage automatique)
L’objectif : démarrer OpenTopoData comme un service, redémarrable automatiquement, et gérable avec systemctl.
Créer le service :
sudo nano /etc/systemd/system/elevation.serviceContenu :
[Unit] Description=OpenTopoData elevation API After=network.target [Service] Type=simple User=lx Group=lx WorkingDirectory=/home/www/opentopodata ExecStart=docker run --rm --volume '/home/www/opentopodata/data:/app/data:ro' -p 5000:5000 --network host opentopodata:1.10.0 # if we crash, restart TimeoutSec=30 Restart=on-failure #Type=notify #NotifyAccess=all TimeoutStartSec=120 TimeoutStopSec=30 # output goes to /var/log/syslog StandardOutput=journal StandardError=journal SyslogIdentifier=opentopodata-elevation [Install] WantedBy=multi-user.targetPoints importants pour que le service fonctionne :
-
déclarer la version (1.10.0)
-
ne pas utiliser les options t et i
-
utiliser docker en mode network pour pouvoir être appelé localement
Activer et démarrer :
sudo systemctl daemon-reload sudo systemctl enable elevation.service sudo systemctl start elevation.service sudo systemctl status elevation.serviceAlternative : installation sans Docker
Il est possible d’installer sans Docker :
https://www.opentopodata.org/notes/running-without-docker/
Mais les performances sont les mêmes avec ou sans docker.
3) Choisir et configurer les données topographiques
OpenTopoData supporte plusieurs datasets. Deux pages utiles :
-
liste des datasets (API publique) :
https://www.opentopodata.org/ (§Public API) -
tailles des datasets :
https://www.opentopodata.org/notes/dataset-sizes/
Après ajout de données, il faut rebuild le docker.
Datasets utilisés : historique et situation actuelle
Dans la version actuelle, seul les données SRTM30 sont utilisés pour le monde entier.
Ancienne configuration :
-
Europe : EUDEM
-
Amérique du Nord : SRTM30
-
Autre : SRTM90
Comparaison des données
-
SRTM30 : données les plus précises (2x plus lent que SRTM90m)
-
SRTM90 : données approximatives (le plus rapide)
-
EU-DEM : 25m mais données moins précises que SRTM30 (3x plus lent que SRTM90m)
4) Monde : SRTM (SRTM30m / SRTM GL1)
Dataset OpenTopoData (SRTM) :
Créer un compte sur Opentopography :
Taille totale des tif : 126Go.
Les données sont stockées sur S3, pour les télécharger les données, installer d'abord aws-cli :
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/installPuis dans le répertoire voulu :
aws s3 cp s3://raster/SRTM_GL1/ . --recursive --endpoint-url https://opentopography.s3.sdsc.edu --no-sign-requestLe fichier global VRT sera aussi téléchargé (-32768 pour les no values).
Optimiser : convertir en GeoTIFF compressé
Si les fichiers ne sont pas déjà en tif (ou si vous voulez optimiser l’I/O), convertir en GeoTIFF compressé :
Installer GDAL :
sudo apt install gdal-binConversion :
for f in *.hgt.zip; do gdal_translate -co COMPRESS=DEFLATE -co PREDICTOR=2 "$f" "${f%.*}.tif"; doneNettoyage :
rm *.zipTemps pour Nord Amérique de génération des TIF : 30min.
Déployer les données sur le serveur et rebuild
Recopier les fichier tif générés vers le serveur puis mettre à jour le fichier config.yml et rebuild le docker :
make buildRedémarrer le service :
sudo systemctl restart elevation.serviceTester (si serveur accepte requête en local) :
curl http://localhost:5000/v1/srtm30m?locations=57.688709,11.975) Europe : EU-DEM
Dataset OpenTopoData (EU-DEM) :
Téléchargement (Copernicus DEM) :
-
https://spacedata.copernicus.eu/collections/copernicus-digital-elevation-model
-
https://ssoidp.copernicus.eu/idp/umsso20/adapter?conversation=e1s1
Étapes :
-
Télécharger toutes les données en une fois
-
Extraire tous les fichiers
-
Ne garder que les fichiers TIF
Taille totale des tif : 38Go.
Ajouter EU-DEM dans OpenTopoData
Dans le répertoire d'opentopodata :
mkdir ./data/eudemCopier les TIF dans ce répertoire (les renommer : https://www.opentopodata.org/datasets/eudem/)
Créer le fichier config.yaml en spécifiant la base de donnée :
datasets: - name: eudem25m path: data/eudem/ filename_epsg: 3035 filename_tile_size: 1000000Rebuilder et relancer le docker :
make build && make runTest (si serveur accepte requête en local) :
curl http://0.0.0.0:5000/v1/eudem25m?locations=57.688709,11.9764046) Récupérer un continent spécifique pour SRTM
Référence :
Il faut renommer l'extension du fichier et ajouter l'URL au début de chaque ligne.