Préréglage carte par défaut et serve-webapp.sh compatible Traefik

This commit is contained in:
Antoine Jacquin
2026-09-19 11:05:16 +02:00
parent e8a9b0187c
commit 9546173c07
7 changed files with 144 additions and 145 deletions

View File

@ -205,19 +205,23 @@ VIZ_LEGENDS = {
# Couches activées par défaut à l'ouverture de la carte : seules celles-ci
# sont allumées, toutes les autres sont désactivées (mais restent accessibles
# via le panneau). Ordre = pile basse → haute.
DEFAULT_LAYERS = ('slope', 'aspect', 'positive_openness')
# via le panneau). Ordre = pile basse → haute : une couche opaque (opacité 1)
# doit rester en bas pour ne pas masquer les autres.
DEFAULT_LAYERS = ('positive_openness', 'aspect')
# Opacité par défaut des couches allumées (0–1) ; les absentes restent à 1.
DEFAULT_OPACITY = {'aspect': 0.6}
# Couche « principale » (mise en avant ; index_tiles.json + affichage en
# direct de la webapp).
DEFAULT_VIZ = DEFAULT_LAYERS[0]
# Restriction du panneau de couches : seule la sélection DEFAULT_LAYERS est
# Restriction du panneau de couches : seule la sélection ci-dessous est
# proposée (couches conservées ; les autres ne sont plus ni affichées ni
# référencées). None = toutes les visualisations présentes sur disque.
# Le sélecteur de génération/régénération est piloté par le même registre
# (voir _render_html).
PANEL_VIZ = DEFAULT_LAYERS
# (voir _render_html). La pente y reste proposée mais éteinte par défaut.
PANEL_VIZ = ('slope', 'aspect', 'positive_openness')
# Correspondance mot-clé de fichier de sortie → nom d'étape --only du pipeline
# (les trois visualisations dont le nom de sortie diffère du nom d'étape,
@ -1118,6 +1122,7 @@ def build_index(output_dir, output_format='avif'):
'viz_meta': {k: {'label': VIZ_LABELS.get(k, k)} for k in ordered_viz},
'stats': {'default_viz': default_viz,
'default_layers': default_layers_present(all_viz_keys),
'default_opacity': dict(DEFAULT_OPACITY),
'n_tiles': len(display_tiles)},
}, ensure_ascii=False), encoding='utf-8')
@ -1233,6 +1238,7 @@ def _render_html(tiles, global_bbox, all_viz_keys, output_format):
stats_json = _json_for_script(
{'default_viz': default_viz,
'default_layers': default_layers_present(all_viz_keys),
'default_opacity': dict(DEFAULT_OPACITY),
'n_tiles': len(tiles)},
)
@ -1930,7 +1936,7 @@ _APP_JS = r"""'use strict';
// --- Données embarquées par index.py ---
// TILES : tuiles affichables (corners WGS84, viz {thumb, full}, meta)
// VIZ_META : {clé: {label}} des visualisations disponibles
// STATS : {default_viz, n_tiles}
// STATS : {default_viz, default_layers, default_opacity, n_tiles}
const viewport = document.getElementById('viewport');
@ -1998,9 +2004,26 @@ function defaultLayers() {
? STATS.default_layers
: ((STATS.default_viz && VIZ_META[STATS.default_viz])
? [STATS.default_viz] : [order[0]]);
const onSet = new Set(list.filter(k => VIZ_META[k]));
const defOrder = list.filter(k => VIZ_META[k]);
// La pile respecte l'ordre de default_layers (bas → haut) : une couche
// opaque (opacité 1) doit rester sous les semi-transparentes.
for (let i = 1; i < defOrder.length; i++) {
const bi = order.indexOf(defOrder[i - 1]), ai = order.indexOf(defOrder[i]);
if (bi >= 0 && ai >= 0 && bi > ai) {
order.splice(bi, 1);
order.splice(order.indexOf(defOrder[i]), 0, defOrder[i - 1]);
}
}
// Opacités par défaut (STATS.default_opacity) ; absentes → 1.
const defOp = (STATS.default_opacity && typeof STATS.default_opacity === 'object')
? STATS.default_opacity : {};
const onSet = new Set(defOrder);
const on = {}, opacity = {};
for (const k of order) { on[k] = onSet.has(k); opacity[k] = 1; }
for (const k of order) {
on[k] = onSet.has(k);
const op = Number(defOp[k]);
opacity[k] = Number.isNaN(op) ? 1 : Math.min(1, Math.max(0, op));
}
return { order, on, opacity, osm: { on: true, opacity: 0.85, dark: true } };
}