Les modèles numériques de terrain (DEM – Digital Elevation Model) permettent de représenter le relief terrestre. Une des représentations les plus utilisées en cartographie est le hillshade, qui simule l’ombre portée sur le relief pour donner une impression de volume.
Dans cet article, nous allons voir comment générer un hillshade global ou régional à partir des données SRTM, puis le convertir en tuiles raster WebP utilisables sur un serveur web cartographique.
La méthode utilisée s’inspire du projet suivant :
https://github.com/nst-guide/terrain
Actuellement, une grande partie de la topographie mondiale utilisée dans les applications web est générée à partir des données SRTM30. Ces données servent également à générer les courbes de niveau, dérivées du hillshade.
1. Télécharger les données topographiques
Les données de terrain proviennent principalement :
-
SRTM (Shuttle Radar Topography Mission)
-
EU-DEM pour l’Europe
Dans ce guide, nous utiliserons SRTM GL1 (30m de résolution).
Historiquement, les données étaient directement disponibles via la NASA, mais ce service n’est plus accessible. Elles sont maintenant disponibles via OpenTopography.
Accès aux métadonnées :
https://portal.opentopography.org/datasetMetadata
Pour télécharger uniquement une zone spécifique :
Résolutions disponibles
-
SRTM GL3 : résolution de 90m
-
SRTM GL1 : résolution de 30m (taille totale d’environ 126 Go)
Les données sont stockées sur Amazon S3.
Installation de AWS CLI
Pour télécharger les données depuis le bucket S3 :
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/installEnsuite, se placer dans le répertoire de destination et lancer :
aws s3 cp s3://raster/SRTM_GL1/ . --recursive --endpoint-url https://opentopography.s3.sdsc.edu --no-sign-requestCette commande télécharge :
-
l’ensemble des fichiers TIF SRTM
-
le fichier VRT global
Le fichier VRT utilise la valeur -32768 pour représenter les zones sans données (NoData).
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. Installer les outils nécessaires
Les données SRTM sont fournies au format GeoTIFF.
Pour les exploiter dans une application web cartographique, il faut :
-
les reprojeter
-
les transformer en tuiles raster
-
les encoder en WebP
Plusieurs outils sont nécessaires.
Installer GDAL
GDAL est la bibliothèque principale pour manipuler les données raster et vectorielles.
sudo apt-get install gdal-binInstaller rio-rgbify
L’outil rio-rgbify (développé par Mapbox) permet de convertir des données d’élévation en tuiles raster utilisables dans les moteurs de rendu cartographiques.
git clone git@github.com:mapbox/rio-rgbify.git cd rio-rgbifyUne correction doit être apportée dans le fichier :
nano ./rio_rgbify/mbtiler.pyModifier la ligne suivante :
w, s, e, n = transform_bounds(*[src_crs, "epsg:4326"] + bbox, densify_pts=2)Installer ensuite le package globalement.
sudo apt install python3-pip python3-setuptools sudo python3 setup.py install3. Générer un VRT global
Lorsque les données sont réparties en plusieurs fichiers GeoTIFF, il est pratique de créer un VRT (Virtual Raster).
Un VRT agit comme une mosaïque virtuelle de tous les fichiers raster.
gdalbuildvrt -vrtnodata -32768 SRTM_GL1_srtm.vrt SRTM_GL1_srtm/*.tifIci :
-
-vrtnodata -32768 définit la valeur NoData
-
tous les fichiers .tif sont combinés dans un seul raster virtuel
4. Reprojection des données
Pour une utilisation web (notamment avec Mapbox GL ou MapLibre), les données doivent être projetées en EPSG:3857 (Web Mercator).
Pour l’Europe :
gdalwarp -r cubicspline -s_srs EPSG:4269 -t_srs EPSG:3857 -dstnodata 0 -co COMPRESS=DEFLATE data/data.vrt data/data_epsg3857.vrtExplication :
-
-r cubicspline : interpolation pour un rendu plus lisse
-
-s_srs : système de coordonnées source
-
-t_srs : projection cible
-
-dstnodata 0 : valeur pour les zones vides
-
COMPRESS=DEFLATE : compression du raster
5. Générer les tuiles raster MBTiles
Les données doivent maintenant être transformées en tuiles raster pyramidales.
L’outil rio rgbify permet de générer directement un fichier MBTiles contenant les tuiles.
rio rgbify -b -10000 -i 0.1 --min-z 6 --max-z 12 -j 22 --format webp SRTM_GL1_srtm.vrt data_hillshade.mbtilesParamètres principaux :
-
--min-z 6 : zoom minimum
-
--max-z 12 : zoom maximum
-
-j 22 : parallélisation
-
--format webp : compression des tuiles
-
-b et -i : paramètres de codage de l’élévation
6. Génération par zones
Pour éviter les traitements trop lourds, il est possible de générer les données par régions.
Chaque région génère un fichier MBTiles, puis tous les fichiers peuvent être fusionnés avec tippecanoe :
tile-join -pk -o europe.mbtiles *.mbtilesOption :
-
-pk : empêche l’outil de supprimer les tuiles supérieures à 500 kB
7. Performance et ressources nécessaires
Temps de génération
-
Amérique du Nord :
-
40 Go de RAM
-
15h de génération
-
11 processus
-
-
Monde entier :
-
37h
-
12 processus
-
jusqu’à 200 Go de RAM
-
Espace disque
Pour un traitement global :
-
MBTiles final : 182 Go
-
WebP décompressé : 208 Go
-
Nombre de tuiles : 8 940 823
8. Limites de Tileserver
Un fichier MBTiles global est trop volumineux pour être servi efficacement par tileserver.
La solution consiste à extraire les tuiles raster dans une structure de fichiers.
9. Décompresser les MBTiles en tuiles WebP
Installer mb-util.
git clone https://github.com/mapbox/mbutil.git cd mbutil sudo python3 setup.py installDécompresser les tuiles :
mb-util data_hillshade_12.mbtiles tiles --image_format=webpStructure générée :
tiles/{z}/{x}/{y}.webp10. Déployer les tuiles sur le serveur
Copier les tuiles dans :
/home/www/hillshade/dataCréer ensuite un fichier TileJSON.
nano /home/www/hillshade/data/data_hillshade_12.jsonContenu :
{"tiles":["https://hillshade.map-planner.com/data/{z}/{x}/{y}.webp"],"name":"Europe Hillshade 25m WEBP","format":"webp","basename":"europe_hillshade_12","id":"europe_hillshade_12","description":"Europe Hillshade 25m WEBP","version":"1","type":"baselayer","minzoom":6,"maxzoom":12,"center":[2.8125,46.779279304705625,9],"attribution":"EU-DEM","tilejson":"2.0.0"}Ce fichier décrit :
-
l’URL des tuiles
-
les niveaux de zoom
-
les métadonnées
11. Configurer le serveur web (Caddy)
Exemple de configuration Caddy :
sudo nano /etc/caddy/CaddyfileConfiguration :
hillshade....com { root * /home/www/hillshade file_server header { Access-Control-Allow-Origin "*" Access-Control-Allow-Methods "POST, GET, OPTIONS, PUT, DELETE" Access-Control-Allow-Headers "*" X-Content-Type-Options nosniff X-XSS-Protection "1; mode=block;" X-Robots-Tag none X-Frame-Options SAMEORIGIN Cache-Control "public, max-age=5184000" } @blocked { path *.mbtiles } respond @blocked 403 # encode gzip log { output file /var/log/caddy/maps_access.log } }Cette configuration :
-
sert les tuiles statiques
-
active le cache navigateur
-
bloque l’accès direct aux fichiers .mbtiles
12. Ajouter la source dans Maputnik pour vérifier
Dans Maputnik, ajouter une source de type :
Raster DEM
avec l’URL TileJSON (déclaré dans le fichier Caddyfile) :
https://hillshade....com/data/europe_hillshade_12.jsonLes tuiles peuvent ensuite être utilisées pour :
-
hillshade dynamique
-
rendu relief
-
analyse terrain