diff --git a/lidar_pipeline/index.py b/lidar_pipeline/index.py
index 990141a..d835729 100644
--- a/lidar_pipeline/index.py
+++ b/lidar_pipeline/index.py
@@ -1,8 +1,9 @@
-"""Carte globale interactive des tuiles LiDAR traitées.
+"""Carte continue interactive des tuiles LiDAR traitées.
Génère une page HTML unique (output/index.html) présentant toutes les tuiles
-1×1 km traitées, positionnées sur une grille Lambert 93, avec zoom/pan natifs
-et sélecteur de visualisation. Permet de choisir rapidement la tuile à examiner.
+1×1 km traitées, affichées en carte continue sans bordure, avec zoom/pan fluide
+et sélecteur de visualisation. Au clic sur une tuile, un modal affiche l'image
+avec légende et permet de télécharger en PDF.
Sortie:
- output/index.html : page interactive auto-suffisante
@@ -42,6 +43,27 @@ VIZ_LABELS = {
'topo': 'Carte topographique IGN',
}
+# Informations de colormap pour génération de légende côté navigateur.
+# Utilisées par le JS pour dessiner la légende sur le canvas avant export PDF.
+VIZ_COLORMAPS = {
+ 'hillshade_multi': {'cmap': 'gray', 'diverging': False},
+ 'slope': {'cmap': 'inferno', 'diverging': False},
+ 'aspect': {'cmap': 'twilight', 'diverging': False},
+ 'mslrm': {'cmap': 'seismic', 'diverging': True},
+ 'sailore': {'cmap': 'seismic', 'diverging': True},
+ 'positive_openness': {'cmap': 'YlOrBr', 'diverging': False},
+ 'negative_openness': {'cmap': 'PuBu', 'diverging': False},
+ 'svf': {'cmap': 'hot_r', 'diverging': False},
+ 'aniso_open': {'cmap': 'seismic', 'diverging': True},
+ 'roughness': {'cmap': 'plasma', 'diverging': False},
+ 'wavelet': {'cmap': 'cividis', 'diverging': False},
+ 'flow_acc': {'cmap': 'YlGn', 'diverging': False},
+ 'solar': {'cmap': 'gray', 'diverging': False},
+ 'anomaly': {'cmap': 'YlOrRd', 'diverging': False},
+ 'ortho': {'cmap': 'rgb', 'diverging': False},
+ 'topo': {'cmap': 'rgb', 'diverging': False},
+}
+
# Visualisation par défaut pour la vignette (si disponible).
DEFAULT_VIZ = 'hillshade_multi'
@@ -225,7 +247,7 @@ def _pick_display_viz(viz_keys):
def build_index(output_dir, output_format='avif'):
- """Génère la carte interactive HTML des tuiles traitées.
+ """Génère la carte continue HTML des tuiles traitées.
Scanne output_dir/visualisations/, génère les vignettes JPEG, puis écrit
output_dir/index.html (auto-suffisant) + output_dir/index_thumbs/.
@@ -312,7 +334,7 @@ def build_index(output_dir, output_format='avif'):
def _render_html(tile_records, bbox, all_viz_keys, output_format):
- """Construit le HTML complet avec CSS et JS natifs (zoom/pan)."""
+ """Construit le HTML complet avec CSS et JS (carte continue + modal PDF)."""
# Ordre des viz dans le sélecteur (selon ordre préféré puis alpha).
ordered_viz = [v for v in _VIZ_FALLBACK_ORDER if v in all_viz_keys]
for v in sorted(all_viz_keys):
@@ -325,6 +347,12 @@ def _render_html(tile_records, bbox, all_viz_keys, output_format):
'vizList': ordered_viz,
}, ensure_ascii=False)
+ viz_meta_json = json.dumps({
+ k: {'label': VIZ_LABELS.get(k, k), 'cmap': VIZ_COLORMAPS.get(k, {}).get('cmap', 'terrain'),
+ 'diverging': VIZ_COLORMAPS.get(k, {}).get('diverging', False)}
+ for k in ordered_viz
+ }, ensure_ascii=False)
+
options_html = '\n'.join(
f' '
@@ -337,6 +365,7 @@ def _render_html(tile_records, bbox, all_viz_keys, output_format):
return _HTML_TEMPLATE.format(
data_json=data_json,
+ viz_meta_json=viz_meta_json,
options_html=options_html,
n_tiles=n_tiles,
grid_w=grid_w,
@@ -350,10 +379,10 @@ _HTML_TEMPLATE = """
-Carte globale des tuiles LiDAR
+Carte continue LiDAR
-
Carte globale LiDAR
+
Carte continue LiDAR
{n_tiles} tuile(s) • {grid_w}×{grid_h} km