Borner le comblement du MNT à l'enveloppe des points, ajouter la couche précision et un affichage relief/précision, encoder les sous-tuiles une seule fois en q75

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Antoine Jacquin
2026-09-27 15:07:04 +02:00
parent c5097e21a0
commit 90dbe61f3b
17 changed files with 994 additions and 593 deletions

View File

@ -120,34 +120,38 @@ Quand le relief orienté est affiché, une rose des vents donne la couleur de
chaque orientation de pente (même formule CIELAB que le rendu) ; la clarté
porte le relief local (clair = bosse, sombre = creux).
## Pile de couches
## Affichage : relief et précision
La carte ne sert que les couches de `PANEL_VIZ` (`index.py`) : aujourd'hui le
seul **relief orienté**, qui fusionne openness locale et orientation des pentes
en une image. Les autres visualisations présentes sur disque ne sont ni listées
ni servies en tuiles.
La carte ne sert que les couches de `PANEL_VIZ` (`index.py`) : le **relief
orienté** (couche d'affichage principal, qui fusionne openness locale et
orientation des pentes) et la **précision** (`densite_sol` : densité des points
sol retenus pour le MNT). Les autres visualisations présentes sur disque ne
sont ni listées ni servies en tuiles.
Chaque couche du panneau porte trois réglages, tous persistés et transportés
par le lien de partage :
Il n'y a plus de pile de couches. Le panneau propose trois modes, un clic
chacun, ou la touche **P** pour passer au suivant :
- **ordre** — poignée ⠿ en glisser-déposer, ou boutons ▲▼ (les seuls
utilisables au doigt). La liste est encadrée par « Haut de pile — devant » et
« Bas de pile — derrière ». Pendant un glisser, la destination est explicite :
la ligne tirée s'estompe et une **barre d'insertion** marque le point de
chute, au-dessus ou en dessous de la ligne survolée selon la moitié visée ;
à l'arrivée, la couche déplacée clignote brièvement et est ramenée dans le
champ de vision ;
- **opacité** — curseur par couche ;
- **mode de fusion** — `mix-blend-mode` CSS : Normal, Produit, Écran,
Superposé, Doux, Lumière crue, Différence, Luminosité. La superposition ne se
réduit donc pas à de la transparence : « Produit » pose un ombrage sur une
rampe de couleur sans la délaver, « Superposé » creuse le contraste local,
« Différence » fait ressortir les écarts entre deux couches.
- **Relief** — le relief orienté seul ;
- **Précision** — la densité seule, en 16 gris (échelle log fixe : niveau k à
partir de 0,25 × 2^(k/2) pts/m², noir ≤ 0,35 ou aucun point, blanc ≥ 45) ;
se lit comme une carte de fiabilité géométrique ;
- **Les deux** — la précision en « produit » (`mix-blend-mode: multiply`) sur
le relief, opacité réglable (60 % par défaut) : les zones où le relief est
interpolé s'assombrissent sans masquer le relief.
La légende de la précision (16 paliers, info-bulle en pts/m² sur chaque
palier) s'affiche dès que la précision est visible. Les couches LiDAR vivent
dans un conteneur **isolé** (`isolation: isolate`) : le produit n'agit que sur
le relief, jamais sur le fond de carte.
Le lien de partage transporte la couche principale, le mode et l'opacité :
`#z/lat/lng&M=relief_oriente&P=both:60&B=1:85:1`. Les anciens liens de la pile
(`&L=…`) s'ouvrent sans erreur sur l'état courant.
### Figer la configuration
Le bouton **★ Définir par défaut** enregistre l'état courant — ordre, couches
allumées, opacités, modes de fusion, fond de carte et fusion de la pile — dans
Le bouton **★ Définir par défaut** enregistre l'affichage courant — couche
principale, mode, opacité de la précision, fond de carte — dans
`output/.map-defaults.json`. Tout navigateur sans réglage local part alors de
cette configuration ; **↺ Réinitialiser** oublie l'état local et y revient.
@ -157,14 +161,11 @@ curl -X DELETE http://localhost:8975/api/map/defaults # retour au registre
```
Sans fichier enregistré, les défauts viennent du registre du pipeline
(`DEFAULT_LAYERS`, `DEFAULT_OPACITY`, `DEFAULT_BLEND` dans `index.py`). Les
valeurs reçues sont filtrées : couches inconnues écartées, opacités bornées à
0–1, modes de fusion validés.
Les couches LiDAR vivent dans un conteneur **isolé** (`isolation: isolate`) :
les fusions agissent entre elles, jamais sur le fond de carte à travers les
zones sans donnée. La fusion de la **pile entière sur le fond** se règle à
part, en bas du panneau.
(`DEFAULT_VIZ`, `PRECISION_VIZ`, `DEFAULT_VIEW_MODE`,
`DEFAULT_PRECISION_OPACITY` dans `index.py`). Les valeurs reçues sont
filtrées : couche inconnue (ou la précision elle-même) refusée comme
principale, mode validé, opacités bornées à 0–1. Un fichier de l'ancienne pile
(`order`/`on`/`blend`) est ignoré, sauf le fond.
> **Licence** — LiDAR HD est diffusé sous **Licence Ouverte 2.0** :
> l'attribution IGN est obligatoire et doit rester visible chez le client.