From 251fe7235f62a0d2b539b9b96e76cf4c787434d4 Mon Sep 17 00:00:00 2001 From: ISA Date: Thu, 12 Dec 2024 20:53:56 +0100 Subject: [PATCH] =?UTF-8?q?WIP:=20Plus-Icon=20bei=20=C3=BCberlappende=20Ma?= =?UTF-8?q?rker=20ausblenden=20wenn=20nur=20eine=20oder=20keine=20sichtbar?= =?UTF-8?q?=20geschaltet=20werden=20in=20Checkboxen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/mapUtils.js | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/utils/mapUtils.js b/utils/mapUtils.js index 1f5f82ee0..1250bb44c 100644 --- a/utils/mapUtils.js +++ b/utils/mapUtils.js @@ -78,24 +78,34 @@ export const restoreMapSettings = (map) => { }; // Now update checkOverlappingMarkers to check if oms is initialized +// Globales Array, um Plus-Icons zu speichern +let plusMarkers = []; + export const checkOverlappingMarkers = (map, markers, plusIcon) => { const overlappingGroups = {}; // Gruppiere Marker basierend auf ihrer Position markers.forEach((marker) => { - const latlngStr = marker.getLatLng().toString(); - if (overlappingGroups[latlngStr]) { - overlappingGroups[latlngStr].push(marker); - } else { - overlappingGroups[latlngStr] = [marker]; + if (map.hasLayer(marker)) { // Überprüfen, ob der Marker sichtbar ist + const latlngStr = marker.getLatLng().toString(); + if (overlappingGroups[latlngStr]) { + overlappingGroups[latlngStr].push(marker); + } else { + overlappingGroups[latlngStr] = [marker]; + } } }); + // Entferne alte Plus-Icons + plusMarkers.forEach((plusMarker) => map.removeLayer(plusMarker)); + plusMarkers = []; + // Füge Plus-Icons für überlappende Marker hinzu for (const coords in overlappingGroups) { if (overlappingGroups[coords].length > 1) { const latLng = L.latLng(coords.match(/[-.\d]+/g).map(Number)); const plusMarker = L.marker(latLng, { icon: plusIcon }).addTo(map); + plusMarkers.push(plusMarker); // Speichere das Plus-Icon plusMarker.on("click", (e) => { const clickedLatLng = e.latlng; @@ -115,8 +125,15 @@ export const checkOverlappingMarkers = (map, markers, plusIcon) => { }); } } + + // Entferne alle Plus-Icons, wenn keine Marker sichtbar sind + if (Object.keys(overlappingGroups).length === 0) { + plusMarkers.forEach((plusMarker) => map.removeLayer(plusMarker)); + plusMarkers = []; + } }; + export const handlePlusIconClick = (map, markers, oms, clickedLatLng) => { // Debugging-Ausgabe console.log("Plus-Icon Position:", clickedLatLng);