Makina Blog
Représentation des modèles numériques de terrain sur le web : ombrage et 3D
Les Modèles Numériques de Terrain sont des données représentant la forme du terrain. Sur une carte ces données ajoutent du réalisme. Cet article parcourt les méthodes actuelles pour faire ça sur la cartographie web.
Les Modèles Numériques de Terrain (MNT), ou Digital Elevation Model (DEM), sont une cartographie de l’élévation du sol. C’est un ensemble de relevés d’altitudes suivant les points d’une grille. Le plus souvent ces relevés sont faits depuis des satellites ou des avions à l’aide de radar, de laser (lidar) ou de photographies stéréoscopiques.
Ces données peuvent être stockées dans différents formats de fichiers. Les fichiers ASCII (.ASC) sont des fichiers texte contant la matrice des altitudes. Mais les MNT sont plus couramment stockés comme des images GeoTiff.
La résolution d'un MNT, qui correspond à l’espacement entre les points de la grille, est variable suivant les sources. On trouve en accès libre :
- La BD ALTI® produite par l’IGN en version Opendata à 75m,
- L’EU-DEM disposition sur l’intégralité de l’Europe à 30m,
- Le STRM par la NASA à 30m.
Sur data.gouv.fr il y a également de multiple jeux de données à l'échelles locales pouvant par exemple aller jusqu’à une résolution de 5m.
Les exemples qui suivent sont réalisés avec le MNT du SICOVAL, communauté d'agglomération au sud-est de Toulouse, avec une résolution de 20m.
Représentation avec une palette de couleur du MNT du SICOVAL. Le GeoTiff est de 1862x1565 pixels, plus un pixel est blanc, plus l’altitude est élevé.
Détail du MNT en plein résolution. On distingue les ravinements créés par les cours d’eau.
Ombrage raster : statique
Un des usages les plus classiques qui est fait d’un MNT est de calculer l’ombrage du terrain. Par convention le relief est éclairé depuis le coin en haut à gauche. Les faces des collines et montagnes éclairées vont apparaître plus claires que les faces qui restent dans l’ombre.
Pour le calcul d’ombrage on utilise le couteau suisse GDAL avec sa méthode gdaldem :
# Calcule l’ombrage du relief gdaldem hillshade MNT_SICOVAL_20m_cc43.tif MNT_SICOVAL_20m_cc43-shadow.tif
Le résultat peut ensuite être intégré à une carte.
Il est également possible de calculer des courbes de niveaux avec la méthode gdal_contour de GDAL
# Extrait des courbes de niveaux espacées de 10m en format vectoriel GeoPackage gdal_contour -i 10.0 MNT_SICOVAL_20m_cc43.tif MNT_SICOVAL_20m_cc43.gpkg
Ombrage vectoriel : statique mais stylable
Dans le cadre de cartes affichées sous forme de tuiles vectorielles il peut être intéressant de convertir l’ombrage en données vectorielles pour ne pas avoir à stocker ou transférer des images raster. L’intensité et la couleur de l’ombrage peuvent ensuite être ajustés à l’affichage.
Détail d’un ombrage vectoriel, tuiles terrain Mapbox.
Avec un peu plus de recul l’ombrage est plus réaliste, mais manque tout de même de détail et de douceur.
Ombrage 3D : dynamique et stylable
Un autre type d’ombrage à fait son apparition dans les kits d’affichage de cartes en WebGL, d’abord chez feu Mapzen, puis dans Mapbox GL JS. Il s’agit d’envoyer directement des tuiles MNT. L’avantage de cette solution est de conserver la finesse des données d’origines, mais aussi de pouvoir gérer l’affichage : styler la couleur, l’intensité et choisir la position de la source de lumière. Lorsque l’on fait pivoter la carte, la source de lumière doit-elle suivre la carte, ou rester par exemple en haut à gauche ? Avec l’ombrage dynamique on a le choix.
Les MNT doivent alors être préparés spécifiquement pour cet usage. Il faut les découper en tuiles, mais surtout les rééchelonner et encoder l’image dans le format attendu par Mabpox GL JS. Ce format est fixe et requière d'encoder l’altitude avec un pas de 10 cm sur les trois canaux de couleurs, l’altitude la plus basse est à -10000 m. Chaque canal de couleur va de 0 à 255, donc : altitude = -10000 + ((Rouge * 256 * 256 + Vert * 256 + Bleu) * 0.1).
En France, avec une latitude de 45 °, on a :
- niveau de zoom 10 : 108 m/pixel,
- niveau de zoom 11 : 54 m/pixel,
- niveau de zoom 12 : 26 m/pixel.
- niveau de zoom 13 : 14 m/pixel.
Pour notre MNT du SICOVAL à 20 m par pixel on va donc créer une pyramide de tuiles jusqu’au zoom 13. Les tuiles à ce niveau de zoom seront constituées d’un étirement des données d’origines. Les niveaux de zoom suivant seront faits lors de l’affichage par un étirement de ces dernières tuiles (méthode nommée "overzoom").
Le travail de reprojection, rééchelonnage, encodage et découpage en tuiles est réalisé par l’outil rasterio et son plugin rio-rgbify
rio rgbify -b -10000 -i 0.1 --max-z 13 --min-z 5 MNT_SICOVAL_20m_3857.tif MNT_SICOVAL.mbtiles
Le traitement ne prend que 5 secondes et convertit le GeoTiff compressé de 1862x1565 pixels du SICOVAL de 1,6 Mo en un fichier MBTiles avec 9 niveaux de zoom (niveaux 5 à 13) de 7 Mo.
Une tuile résultante du traitement. Les images ne sont pas faites pour être directement affichées.
Le même traitement avec les données de la BD ALTI® à 75 m de 16 000x15 000 pixels, avec un niveau de zoom 11 comme cible, prend 14 min avec 4 CPU. Un GeoTiff compressé de 250 Mo est converti en un MBTiles de 1,0 Go.
# Extraction de la BD ALTI® 7z x BDALTIV2_2-0_75M_ASC_LAMB93-IGN69_FRANCE_2018-01-15.7z # Assemblage des tuiles ASC en une image virtuelle gdalbuildvrt -a_srs EPSG:2154 -hidenodata BDALTIV2_MNT_75M_ASC_LAMB93_IGN69_FRANCE.virt *.asc # Conversion de l’image virtuelle en GeoTiff gdal_translate -co compress=lzw -of GTiff BDALTIV2_MNT_75M_ASC_LAMB93_IGN69_FRANCE.virt BDALTIV2_MNT_75M_ASC_LAMB93_IGN69_FRANCE.tif # Passage des données en mer à l'altitude 0 gdal_calc.py --co="COMPRESS=LZW" --type=Float32 -A BDALTIV2_MNT_75M_ASC_LAMB93_IGN69_FRANCE.tif --outfile=BDALTIV2_MNT_75M_ASC_LAMB93_IGN69_FRANCE_.tif --calc="A*(A>0)" --NoDataValue=0 rio rgbify -b -10000 -i 0.1 --max-z 11 --min-z 5 BDALTIV2_MNT_75M_ASC_LAMB93_IGN69_FRANCE.tif BDALTIV2_FRANCE.mbtiles
Le résultat de la BD ALTI® à 75 m, avec un style graphique.
Overzoom de niveau 15 depuis des tuiles calculées au niveau 11. On commence à distinguer l’étirement des pixels.
Terrain 3D
On peut également représenter l’élévation du terrain directement en 3D, puis y appliquer une texture de photographie aérienne ou de carte.
Les représentations 3D qui suivent sont réalisées avec Cesium, une bibliothèque JavaScript dédiée à l’affichage cartographique en 3D. Pour faire les représentations, il utilise également des tuiles de photographies aériennes ou de cartes ainsi que des tuiles de terrain 3D.
L’ombrage est alors fait lors de l’affichage par un calcul depuis une source de lumière. La représentation de surfaces en 3D est basée sur la décomposition de ces surfaces en facettes triangulaires. Il convient donc convertir la grille de points du MNT en une série de triangles.
Cesium Terrain Builder (CTB) permet de découper le MNT en tuiles et de calculer ces triangles. Il prépare des tuiles de 65x65 « pixels ». En France, à 45 ° de latitude nord, au zoom 12 on a 106 m/pixel.
L’algorithme de CTB pour générer les triangles est relativement simple, il est dénommé dense mesh. Il génère deux triangles pour chaque cellule de la grille du MNT.
Sur les données de la BD ALTI® à 75 m il transforme le GeoTiff compressé de 250 Mo en 255 Mo de tuiles terrain en 12 min avec 8 CPU.
# Extraction de la BD ALTI® 7z x BDALTIV2_2-0_75M_ASC_LAMB93-IGN69_FRANCE_2018-01-15.7z # Assemblage des tuiles ASC en une image virtuelle gdalbuildvrt -a_srs EPSG:2154 BDALTIV2_MNT_75M_ASC_LAMB93_IGN69_FRANCE.virt *.asc # Reprojection, découpage en tuiles et calcul des triangles ./ctb-tile --start-zoom 12 --end-zoom 0 BDALTIV2_MNT_75M_ASC_LAMB93_IGN69_FRANCE.virt
Mais une tuile qui représenterait un terrain strictement plat n’aurait pas besoin d’autant de petits triangles, mais uniquement de deux grands pour la couvrir dans son ensemble.
Pour qu’un affichage 3D soit rapide et fluide, il faut minimiser le poids des données et donc le nombre de triangles. On peut créer un réseau de triangles irréguliers. On nomme cette approche Triangulated Irregular Network (TIN) ou encore Quantized Mesh. L’idée est donc d’optimiser le positionnement des triangles pour en réduire leur nombre.
CTB à un autre défaut, il ne calcule pas les normales aux triangles. Elles permettent d’indiquer dans quelle direction sont orientés les triangles et donc de calculer l’ombrage. Il est nécessaire de les précalculer lors de la création des tuiles de terrain.
Différence de rendu sans les normales, puis avec.
Il existe une version expérimentale de CTB pour construire des tuiles plus optimisées, en regroupant des triangles. Cette version inclut également le calcul des normales.
# Reprojection, découpage en tuiles et calcul des triangles # Calcul des Normales, et format de sortie en « Metch » ./ctb-tile --start-zoom 11 --end-zoom 0 --vertex-normals --output-format Mesh BDALTIV2_MNT_75M_ASC_LAMB93_IGN69_FRANCE.virt
Le résultat ne pèse plus cette fois que 99 Mo.
Tin-terrain de HERE Maps implémente également différents algorithmes de simplification. Avec une approche de répartition totalement irrégulière des triangles il offre de meilleurs résultats. Par contre il ne calcule pas (encore) les normales.
Les tuiles sont cette fois de 256x256 « pixels », au niveau de zoom 10 on a 108 m/pixel.
# Reprojection gdalwarp -co compress=lzw -of GTiff -t_srs EPSG:3857 BDALTIV2_MNT_75M_ASC_LAMB93_IGN69_FRANCE.virt BDALTIV2_MNT_75M_3857_FRANCE.tif tin-terrain dem2tintiles --min-zoom=0 --max-zoom=10 --input BDALTIV2_MNT_75M_3857_FRANCE.tif BDALTIV2
Le temps de traitement est de 25 min mais uniquement sur un seul CPU et produit 20 Mo de tuiles.
Scripts et données
La procédure complète pour produites des tuiles vectorielles de courbes de niveau ainsi que les tuiles pour un ombrage dynamique sont disponibles. Sont également disponible les résultats des traitements sur la BD ALTI® 75 m sur la métropole :
Conclusion
Le web moderne avec le WebGL permet aujourd’hui de faire des rendus de terrain particulièrement réaliste en 2D et en 3D, tout en étant à la fois dynamiques et interactifs. Toutes ces technologies et les données nécessaires sont disponibles en OpenData et en logiciels libres.
Si vous aussi vous voulez des cartes plus réalistes et intuitives, contactez-nous!
Formations associées
Actualités en lien
Extraction d'objets pour la cartographie par deep-learning : évaluation du modèle
Voici le dernier article de notre série sur la cartographie par deep-learning. Après avoir expliqué comment choisir et utiliser un modèle d'extraction d'objets, nous allons maintenant en évaluer les performances. Que pouvons-nous attendre du modèle entraîné ? Quels sont ses limites et ses sensibilités ?
Extraction d'objets pour la cartographie par deep-learning : création d'une vérité terrain
Cette série d'articles parle de cartographie par deep-learning à partir d'images aériennes ou satellitaires. Dans ce 1er article, l'étape préliminaire à toute utilisation d'un modèle d'apprentissage supervisé est abordée: la création du jeu de données d'apprentissage. Notre outil geolabel-maker est mis à votre disposition pour vous aider.
Recherche et développement d’indicateurs pour l’aménagement d’un territoire
Nous explorons l’intérêt de calculer automatiquement des indicateurs d’aménagement du territoire en croisant des données OpenStreetMap et des analyses d’images satellitaires.