Cette carte n'est pas une photo retouchée : c'est une illustration
3D de la Martinique entière, modélisée et rendue dans
Blender à partir de données publiques, vue de dessus, puis
découpée en ~100 000 tuiles d'image (zooms 10 à 18). Tout est produit par
des scripts, sans retouche à la main.
1. La grille : de l'île aux blocs
- Emprise : 61,245° O – 60,8° O, 14,38° N – 14,885° N, en projection
Web Mercator (EPSG:3857), celle des cartes web.
- Tuiles de 256 px au standard XYZ ; au zoom 18, un pixel vaut
0,6 m Mercator (≈ 0,58 m au sol à cette latitude).
- Rendu par blocs de 8 × 8 tuiles (2 048 px, ≈ 1,2 km),
regroupés en sections de 2 × 2 blocs : ni les données ni
la scène 3D de l'île ne tiennent en un seul morceau.
- Un relief grossier (pixels de 25 m) désigne les blocs utiles : la terre,
les hauts-fonds et une couronne de mer d'un bloc autour des côtes, soit
1 211 blocs en 334 sections. Le large n'est pas rendu :
c'est la couleur de fond de la carte.
2. Les données et leurs sources
Tout vient de services ouverts, interrogés directement en Web Mercator,
par requêtes de 2 048 px au plus :
- Relief et bathymétrie — IGN, RGE ALTI
- Service WMS de la Géoplateforme (
data.geopf.fr), couche
ELEVATION.ELEVATIONGRIDCOVERAGE.HIGHRES, altitudes en float 32
bits. La Martinique n'a pas de LiDAR HD : la grille native est de 5 m, lissée
pour effacer les marches. Le RGE ALTI inclut la bathymétrie côtière
(Litto3D, jusqu'à −50 m environ).
- Orthophotographie — IGN, BD ORTHO 20 cm
- Couche WMS
ORTHOIMAGERY.ORTHOPHOTOS, téléchargée à
≈ 0,3 m par pixel : elle guide les couleurs du sol et la végétation, et une
version à 1 m débarrassée des bateaux donne les motifs des fonds marins
(récifs, herbiers, sable).
- Vecteurs — IGN, BD TOPO V3
- Service WFS, en GeoJSON : bâtiments (emprise, hauteur, altitude du toit),
tronçons de route (nature, largeur), zones de végétation (forêt, mangrove…),
cours d'eau et plans d'eau, estran (plages de sable), terrains de sport,
cimetières.
- Cultures — IGN / ASP, Registre parcellaire graphique
- Couche WFS
RPG.LATEST:parcelles_graphiques : type de culture
de chaque parcelle déclarée (bananeraies, canne à sucre, vergers, prairies,
maraîchage…).
- Occupation du sol — ESA WorldCover 2021
- Carte mondiale à 10 m de l'Agence spatiale européenne (tuiles GeoTIFF
sur AWS S3) : distingue forêts, arbustes, prairies, cultures, sols nus et
eau, là où l'orthophoto seule confond forêt et prairie.
- Libellés — OpenStreetMap
- API Overpass : communes, lieux-dits et rues nommées.
Toutes les coordonnées sont ramenées en mètres Mercator locaux. Comme
Mercator dilate les distances horizontales de 1/cos(latitude), altitudes et
hauteurs sont multipliées par ce même facteur (≈ 1,03 ici) pour garder les
proportions et des ombres justes.
3. Le relief et la mer
- Au large, le levé n'a plus de mesures (valeurs aberrantes) : les trous sont
comblés une fois pour toute l'île en prolongeant les fonds
voisins, avec une plongée progressive jusqu'à −60 m sur 800 m, puis lissés
et fondus sur 60 m avec les fonds mesurés. Comblés section par section,
chaque morceau aurait inventé sa propre mer.
- Le levé bathymétrique a enregistré les bateaux au mouillage
comme des hauts-fonds : ils sont effacés par une ouverture morphologique
(filtre minimum puis maximum).
4. La végétation : 1 arbre = 1 objet 3D
Sans LiDAR de hauteur de végétation, les arbres sont
plantés par programme :
- Un candidat tous les ~4,5 m (grille légèrement aléatoire), gardé selon un
score : verdeur et ton sombre de l'orthophoto (vert moins rouge, car la brume
tropicale bleuit la forêt), part d'arbres WorldCover, zones boisées
BD TOPO.
- Jamais d'arbres sur les bâtiments, routes, stades, cimetières et plans
d'eau ; seulement des arbres isolés dans les champs et prairies du RPG ; les
ombres profondes des ravines restent boisées.
- Espèces selon le lieu : cocotiers près des plages et dans les bourgs,
palétuviers dans la mangrove, deux silhouettes de feuillus ailleurs, petits
fruitiers dans les vergers.
- Bananeraies : bananiers en rangs de 3,5 × 2,4 m, orientés
d'après les rayures visibles sur l'orthophoto (tenseur de structure) et calés
sur un bord de la parcelle. La canne à sucre est un couvert dense au sol.
- La plantation suit les coordonnées absolues : deux sections voisines
plantent exactement les mêmes arbres dans leur recouvrement, sans raccord
visible.
5. La modélisation dans Blender
Un script Python (bpy) construit la scène de chaque section dans
Blender 5.2, sans interface :
- Terrain : maillage tiré du relief (un sommet tous les
~2 m), sous la terre comme sous la mer.
- Sol : matériau procédural. L'orthophoto floutée ne donne
que les grandes teintes (≈ 30 %) ; le détail est généré (touffes, grain,
micro-relief). Des masques ajoutent plages, champs de canne, galets des
rivières et roche sur les à-pics.
- Mer : couleur selon la profondeur, motifs du fond repris
de l'orthophoto, écume au rivage ; au-delà de 25 à 55 m de fond, un bleu uni
(#0b3f78) identique au fond de la carte.
- Arbres : modèles low-poly (feuillus, cocotier, palétuvier,
bananier, fruitier) instanciés par Geometry Nodes sur les points de
plantation, à leur hauteur, avec une rotation aléatoire.
- Bâtiments : emprises BD TOPO extrudées jusqu'à l'altitude
du toit, toits plats aux couleurs des tôles.
- Routes et cours d'eau : rubans drapés sur le relief,
largeur selon la nature (9 m pour une route à 2 chaussées, 5 m à
1 chaussée, 2,5 m un chemin, 1,2 m un sentier) ; tunnels et liaisons
maritimes ignorés. Bassins et étangs en plans d'eau plats.
- Lumière : un soleil unique venant du nord-ouest (convention
cartographique), 45° au-dessus de l'horizon, plus la lumière du ciel : les
ombres portées sont les mêmes partout.
6. Le rendu des images
- Moteur Eevee : 32 échantillons, ombres, lancer de rayons
et illumination globale rapide (occlusion ambiante), transformée de couleurs
Standard, filtre de reconstruction réduit à 1 px pour la netteté.
- Caméra orthographique verticale, nord en haut : aucune
perspective, chaque pixel tombe exactement sur la grille des tuiles.
- Chaque bloc est rendu avec une marge de 64 px (image de
2 176 px, ≈ 1,3 km) recadrée ensuite : les ombres des arbres et bâtiments
voisins ne sont pas coupées aux bords.
- Une section à la fois (Blender monte à ~7 Go de mémoire) : ≈ 1 minute par
section, environ 5 h 30 pour l'île entière ; données et rendus de chaque
section sont effacés une fois découpés.
7. Le découpage en tuiles
- Avec la bibliothèque
sharp (Node.js), chaque bloc rendu est
recadré puis découpé en 64 tuiles de 256 px au zoom 18, en WebP.
- Les zooms 17 à 10 sont construits en assemblant 4 tuiles filles et en
réduisant le résultat de moitié.
- Environ 100 000 tuiles (≈ 1,8 Go), hébergées sur Cloudflare R2.
8. Les libellés et la visionneuse
- Les noms ne sont pas peints dans l'image : communes,
lieux-dits et rues d'OpenStreetMap forment une couche vectorielle à part,
qui reste lisible à toutes les échelles.
- Affichage avec MapLibre GL (source raster XYZ +
couches de texte), application compilée avec Vite.
Licences
- Relief, orthophotographie, BD TOPO, RPG : © IGN, licence ouverte
Etalab 2.0.
- Occupation du sol : ESA WorldCover 2021, CC BY 4.0.
- Libellés : © contributeurs OpenStreetMap, licence ODbL.