// /utils/mapUtils.js import L from "leaflet"; export const redrawPolyline = (lineData, lineColors, tooltipContents, map) => { if (!lineData || !lineColors || !tooltipContents || !map) { console.error("Invalid parameters for redrawPolyline"); return; } if (!lineData.coordinates || !Array.isArray(lineData.coordinates)) { console.error("Invalid coordinates in lineData"); return; } const color = lineColors[lineData.idModul] || "#000000"; const tooltipContent = tooltipContents[lineData.idModul] || "Standard-Tooltip-Inhalt"; if (lineData.polyline) map.removeLayer(lineData.polyline); lineData.polyline = L.polyline(lineData.coordinates, { color: color, }).addTo(map); lineData.polyline.bindTooltip(tooltipContent, { permanent: false, direction: "auto", }); lineData.polyline.on("mouseover", () => { lineData.polyline.setStyle({ weight: 10 }); lineData.polyline.bringToFront(); }); lineData.polyline.on("mouseout", () => { lineData.polyline.setStyle({ weight: 5 }); }); }; export const saveLineData = (lineData) => { fetch("/api/talas_v5_DB/gisLines/updateLineCoordinates", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ idModul: lineData.idModul, idLD: lineData.idLD, newCoordinates: lineData.coordinates, }), }) .then((response) => { if (!response.ok) { throw new Error("Fehler beim Speichern der Linienänderungen"); } return response.json(); }) .then((data) => { //console.log("Linienänderungen gespeichert:", data); }) .catch((error) => { console.error("Fehler beim Speichern der Linienänderungen:", error); }); }; // Call this function on page load to restore zoom and center export const restoreMapSettings = (map) => { const savedZoom = localStorage.getItem("mapZoom"); const savedCenter = localStorage.getItem("mapCenter"); if (savedZoom && savedCenter) { try { const centerCoords = JSON.parse(savedCenter); map.setView(centerCoords, parseInt(savedZoom)); } catch (e) { console.error("Error parsing stored map center:", e); map.setView([53.111111, 8.4625], 12); // Standardkoordinaten und -zoom } } }; // Now update checkOverlappingMarkers to check if oms is initialized 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]; } }); // 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); plusMarker.on("click", (e) => { const clickedLatLng = e.latlng; // Finde nahegelegene Marker (50 Pixel als Beispielradius) const nearbyMarkers = markers.filter((marker) => map.distance(marker.getLatLng(), clickedLatLng) < 50); console.log("Nearby Markers for Plus Icon:", nearbyMarkers); if (nearbyMarkers.length > 0) { // Simuliere einen Klick auf jeden Marker nearbyMarkers.forEach((marker) => { marker.fire("click"); }); } else { console.log("Keine Marker gefunden."); } }); } } }; export const handlePlusIconClick = (map, markers, oms, clickedLatLng) => { // Debugging-Ausgabe console.log("Plus-Icon Position:", clickedLatLng); // Finde Marker in der Nähe der Klickposition const nearbyMarkers = markers.filter((marker) => map.distance(marker.getLatLng(), clickedLatLng) < 50); // Debugging-Ausgabe console.log("Gefundene Marker in der Nähe:", nearbyMarkers); if (oms && nearbyMarkers.length > 0) { // Spiderfy die gefundenen Marker oms.spiderfy(nearbyMarkers); } else { console.log("Keine überlappenden Marker gefunden."); } };