Accueil / Blog / Métier / 2019 / Représentation des modèles numériques de terrain sur le web : ombrage et 3D

Représentation des modèles numériques de terrain sur le web : ombrage et 3D

Par Frédéric Rodrigo — publié 11/02/2019, édité le 12/02/2019
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.
Représentation des modèles numériques de terrain sur le web : ombrage et 3D

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.

SICOVAL MNT

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é.

SICOVAL MNT 100%

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

SICOVAL Ombrage 

Le résultat peut ensuite être intégré à une carte.

SICOVAL MNT-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

SICOVAL courbes de niveau

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.

Mapbox terrain détail

Détail d’un ombrage vectoriel, tuiles terrain Mapbox.

Mapbox terrain

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.

SICOVAL RGB

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.

BD ALTI ombrage

BD ALTI ombrage et carte

BD ALTI overzoom

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.

Cesium tuiles 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

Cesium dense mesh

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.

Cesium, sans et avec ombres

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.

Cesium quantized mesh

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.

Cesium tin-terrain

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 :

https://www.data.gouv.fr/fr/datasets/bd-alti-r-75-m-tuiles-pour-courbes-de-niveau-et-ombrage-dynamiques/

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, !

ABONNEZ-VOUS À LA NEWSLETTER !
Voir aussi
Détecter des formes dans des photos de paysage Détecter des formes dans des photos de paysage 14/02/2019

Et parce que c'est la St-Valentin, on détecte des cœurs !

Cartographier le manteau neigeux avec Python Cartographier le manteau neigeux avec Python 08/01/2019

En quelques lignes de code, nous vous proposons de cartographier le manteau neigeux. Nous ...

Cartographie Web 3D - possibilités techniques en logiciels libres 08/01/2019

Au début, les cartes sur le web étaient planes. Puis, avec de plus en plus de données (imagerie ...

Retour State of the Map France 2018 Retour State of the Map France 2018 23/07/2018

L'équipe de Makina attendait avec impatience l'événement de l'année, State Of The Map 2018 à ...

Calcul d'itinéraires piétons avec OSRM Calcul d'itinéraires piétons avec OSRM 02/02/2018

Cet article présente différentes techniques utilisées dans le cadre du projet MoodWalkR pour ...

Nos formations
Formation Leaflet