Mettre à jour la pyramide pendant le rendu et réduire son stockage
Le pipeline régénère l'inventaire après chaque dalle par défaut (tous lanceurs, sauf --no-index), avec une passe différée quand l'anti-rebond ignore une dalle. La carte surveille l'inventaire toutes les 10 s et place les tuiles des dalles modifiées en tête de file de maintenance : la pyramide suit le rendu au lieu d'attendre la fin du lot. Stockage réduit pour le Raspberry Pi : seuls les niveaux standard pairs jusqu'à z16 sont écrits sur disque, en AVIF ; les autres, dont le niveau le plus fin (~75 % de la pyramide), sont rendus à la volée avec un cache mémoire, y compris en mode cache seule. L'interface ne demande que les niveaux pairs et réduit ceux du niveau supérieur aux zooms impairs. Mesuré sur 8 dalles : ~24 Mo de pyramide avant, 1,2 Mo après. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@ -540,6 +540,22 @@ function tileUrl(key) {
|
||||
return META.tile_url.replace('{layer}', key) + (META.stamp ? '?v=' + META.stamp : '');
|
||||
}
|
||||
|
||||
// Couche à niveaux standard pairs seulement (stockage réduit côté serveur) :
|
||||
// à un zoom impair, les tuiles du niveau pair SUPÉRIEUR sont affichées
|
||||
// réduites de moitié (nettes) ; au-delà du zoom natif, le niveau inférieur.
|
||||
// Le niveau de tuile Leaflet est ici la numérotation standard (zoomOffset −1
|
||||
// avec des tuiles de 512 px).
|
||||
const EvenLevelTileLayer = L.TileLayer.extend({
|
||||
_clampZoom(zoom) {
|
||||
let z = L.TileLayer.prototype._clampZoom.call(this, zoom);
|
||||
if (this.options.evenLevels && z % 2) {
|
||||
const maxN = this.options.maxNativeZoom;
|
||||
z = (maxN !== undefined && z + 1 > maxN) ? z - 1 : z + 1;
|
||||
}
|
||||
return z;
|
||||
}
|
||||
});
|
||||
|
||||
function buildLayers() {
|
||||
// Conteneur isolé : `isolation: isolate` cantonne les mix-blend-mode à la
|
||||
// pile LiDAR. Sans lui, « Produit » assombrirait aussi le fond OSM à travers
|
||||
@ -554,7 +570,8 @@ function buildLayers() {
|
||||
const pane = map.getPane(paneName) || map.createPane(paneName, stack);
|
||||
const existing = LAYERS.get(info.key);
|
||||
if (existing) { if (map.hasLayer(existing)) map.removeLayer(existing); }
|
||||
const layer = L.tileLayer(tileUrl(info.key), {
|
||||
const layer = new EvenLevelTileLayer(tileUrl(info.key), {
|
||||
evenLevels: !!META.even_levels,
|
||||
pane: paneName,
|
||||
// Emprise des dalles : Leaflet ne demande aucune tuile en dehors —
|
||||
// pas de requêtes inutiles sur le reste du monde.
|
||||
|
||||
Reference in New Issue
Block a user