overlays fix to stay on top when base map changes

Signed-off-by: K1 <git@karoh.net>
This commit is contained in:
K1 2026-05-03 18:40:52 +02:00
parent 362e1fc88c
commit 83dd1fd3fe

22
dve.js
View file

@ -258,11 +258,12 @@ function sync(source) {
updateCrosshairs(); updateCrosshairs();
} }
function createLayer(config) { function createLayer(config, zIndex) {
if (config.type === "xyz") { if (config.type === "xyz") {
return L.tileLayer(config.url, { return L.tileLayer(config.url, {
maxZoom: 19, maxZoom: 19,
tileSize: 256, tileSize: 256,
zIndex,
referrerPolicy: "strict-origin-when-cross-origin" referrerPolicy: "strict-origin-when-cross-origin"
}); });
} }
@ -274,26 +275,37 @@ function createLayer(config) {
transparent: config.transparent ?? true, transparent: config.transparent ?? true,
version: config.version || "1.3.0", version: config.version || "1.3.0",
attribution: config.attribution || "", attribution: config.attribution || "",
zIndex,
referrerPolicy: "strict-origin-when-cross-origin" referrerPolicy: "strict-origin-when-cross-origin"
}); });
} }
} }
function setLayer(map, config, currentLayer) { function setLayer(map, config, currentLayer, zIndex) {
if (currentLayer) map.removeLayer(currentLayer); if (currentLayer) map.removeLayer(currentLayer);
return createLayer(config).addTo(map); return createLayer(config, zIndex).addTo(map);
}
function bringOverlayLayersToFront(index) {
Object.values(overlayLayers[index]).forEach(layer => {
layer.setZIndex(100);
layer.bringToFront();
});
} }
function setBaseLayer(index, name) { function setBaseLayer(index, name) {
baseLayers[index] = setLayer(maps[index], TILE_SERVERS[name], baseLayers[index]); baseLayers[index] = setLayer(maps[index], TILE_SERVERS[name], baseLayers[index], 1);
bringOverlayLayersToFront(index);
} }
function setOverlayLayer(index, name, enabled) { function setOverlayLayer(index, name, enabled) {
if (enabled) { if (enabled) {
if (!overlayLayers[index][name]) { if (!overlayLayers[index][name]) {
overlayLayers[index][name] = createLayer(TILE_SERVERS[name]).addTo(maps[index]); overlayLayers[index][name] = createLayer(TILE_SERVERS[name], 100).addTo(maps[index]);
} }
overlayLayers[index][name].bringToFront();
} else if (overlayLayers[index][name]) { } else if (overlayLayers[index][name]) {
maps[index].removeLayer(overlayLayers[index][name]); maps[index].removeLayer(overlayLayers[index][name]);
delete overlayLayers[index][name]; delete overlayLayers[index][name];