function setupMap(map, mapNumber) {
map.on('idle', () => {
console.log(`Map ${mapNumber} wurde eingerichtet.`);
switch (mapNumber) {
case 1:
addVectorLayers(map, 'bbox', 'https://vectormap.ch/bbox/xyz/', '/{z}/{x}/{y}.mvt', '© vectormap','');
break;
case 2:
addVectorLayers(map, 'ldproxy', 'https://vectormap.ch/ldproxy/rest/services/avprodukt/collections/', '/tiles/WebMercatorQuad/{z}/{y}/{x}', '© vectormap','');
break;
case 3:
addVectorLayers(map, 'martin', 'https://vectormap.ch/martin/', '/{z}/{x}/{y}', '© vectormap','');
break;
case 4:
addVectorLayers(map, 'pg_tileserv', 'https://vectormap.ch/pg_tileserv/', '/{z}/{x}/{y}.pbf', '© vectormap', 'avprodukt.');
break;
case 5:
addVectorLayers(map, 'tegola', 'https://vectormap.ch/tegola/maps/avprodukt/', '/{z}/{x}/{y}.pbf', '© vectormap','');
break;
case 6:
addVectorLayers(map, 'tipg', 'https://vectormap.ch/tipg/collections/avprodukt.', '/tiles/WebMercatorQuad/{z}/{x}/{y}', '© vectormap','');
break;
}
});
}
function addVectorLayers(map, server, prefix, suffix, attribution, layer_prefix) {
// Define source and layer directly
const layers = {
'bo_boflaeche_mv': {
'source': 'bo_boflaeche_mv-source',
'layer': `${layer_prefix}bo_boflaeche_mv`,
'type': 'line',
'paint': {
'line-color': 'rgb(0, 0, 255)'
},
'minzoom': 13
},
'gg_gemeindegrenze_mv': {
'source': 'gg_gemeindegrenze_mv-source',
'layer': `${layer_prefix}gg_gemeindegrenze_mv`,
'type': 'line',
'paint': {
'line-color': 'rgb(0, 255, 0)'
},
'minzoom': 0
},
'li_liegenschaft_mv': {
'source': 'li_liegenschaft_mv-source',
'layer': `${layer_prefix}li_liegenschaft_mv`,
'type': 'line',
'paint': {
'line-color': 'rgb(0, 0, 0)'
},
'minzoom': 13
},
'li_grenzpunkt_mv': {
'source': 'li_grenzpunkt_mv-source',
'layer': `${layer_prefix}li_grenzpunkt_mv`,
'type': 'circle',
'paint': {
"circle-blur": 0,
"circle-color": "#ffffff",
"circle-opacity": 1,
"circle-radius": 3,
"circle-stroke-color": "#000000",
"circle-stroke-opacity": 1,
"circle-stroke-width": 1,
},
'minzoom': 17
},
'eo_linienelement_mv': {
'source': 'eo_linienelement_mv-source',
'layer': `${layer_prefix}eo_linienelement_mv`,
'type': 'line',
'paint': {
"line-color": "#00a2ff",
"line-width": 1
},
'minzoom': 13
},
'bo_projgebaeude_mv': {
'source': 'bo_projgebaeude_mv-source',
'layer': `${layer_prefix}bo_projgebaeude_mv`,
'type': 'fill',
'paint': {
'fill-color': '#F00',
'fill-opacity': 0.5,
'fill-outline-color': 'rgb(255, 255, 255)'
},
'minzoom': 13
}
};
Object.keys(layers).forEach(layer => {
map.addSource(layers[layer].source, {
'type': 'vector',
'tiles': [
`${prefix}${layers[layer].layer}${suffix}`
],
'attribution': attribution,
'minzoom': layers[layer].minzoom
});
map.addLayer({
'id': layer,
'type': layers[layer].type,
'source': layers[layer].source,
'source-layer': layers[layer].layer,
'paint': layers[layer].paint
});
});
}
document.addEventListener('DOMContentLoaded', function () {
const maps = [];
const mapStyleSelector = document.getElementById('map-style-selector');
let selectedStyle = mapStyleSelector.value;
const mapSettings = {
zoom: 15,
center: [9.063727323272758, 47.583918972151814]
};
for (let i = 1; i <= 6; i++) {
const map = new maplibregl.Map({
container: `map${i}`,
style: selectedStyle,
...mapSettings
});
setupMap(map, i); // Rufe die Funktion setupMap auf, um die Layer hinzuzufügen
maps.push(map);
}
maps.forEach((map) => {
map.on('move', () => syncMaps(maps, map));
});
mapStyleSelector.addEventListener('change', function () {
selectedStyle = this.value;
maps.forEach(map => {
map.setStyle(selectedStyle);
setupMap(map, map._mapId);
});
});
// Listen for changes in the layer control checkboxes
document.querySelectorAll('#layer-control input[type="checkbox"]').forEach(checkbox => {
checkbox.addEventListener('change', function () {
const layerId = this.getAttribute('id');
const isVisible = this.checked;
console.log(layerId)
console.log(isVisible)
// Toggle visibility of the layer for all maps
maps.forEach(map => {
const layer = map.getLayer(layerId);
if (layer) {
console.log(`Layer ${layerId} found in map ${map.getContainer().id}`);
if (isVisible) {
console.log(`Setting layer ${layerId} visibility to visible`);
map.setLayoutProperty(layerId, 'visibility', 'visible');
} else {
console.log(`Setting layer ${layerId} visibility to none`);
map.setLayoutProperty(layerId, 'visibility', 'none');
}
} else {
console.log(`Layer ${layerId} not found in map ${map.getContainer().id}`);
}
});
});
});
let isSyncing = false;
function syncMaps(maps, sourceMap) {
if (isSyncing) return;
isSyncing = true;
const { lng, lat } = sourceMap.getCenter();
const zoom = sourceMap.getZoom();
maps.forEach(map => {
if (map !== sourceMap) {
map.jumpTo({ center: [lng, lat], zoom: zoom });
}
});
isSyncing = false;
}
});