fix: alle Markers/Stationen Icons aktualisieren aber ohne Plus Icon für Überlappende icons

This commit is contained in:
ISA
2024-11-28 11:50:23 +01:00
parent a9ae56d0ea
commit e2f11ab8a9

View File

@@ -753,183 +753,73 @@ await fetchGisStationsStatusDistrict(mapGisStationsStatusDistrictUrl, setGisStat
const sonstigeMarkersLayerRef = useRef(null); const sonstigeMarkersLayerRef = useRef(null);
useEffect(() => { useEffect(() => {
if (!gisSystemStaticLoaded || !map) return; // Sicherstellen, dass alle Abhängigkeiten geladen sind if (!gisSystemStaticLoaded || !map) return; // Sicherstellen, dass die Karte und Daten geladen sind
// Initialisiere die LayerGroups, falls noch nicht vorhanden const layerGroups = [
if (!gmaLayerRef.current) { { ref: gmaLayerRef, id: 11, setState: setGmaMarkers },
gmaLayerRef.current = new L.LayerGroup().addTo(map); { ref: talasLayerRef, id: 1, setState: setTalasMarkers },
} { ref: eciMarkersLayerRef, id: 2, setState: setEciMarkers },
if (!talasLayerRef.current) { { ref: gsmModemMarkersLayerRef, id: 5, setState: setGsmModemMarkers },
talasLayerRef.current = new L.LayerGroup().addTo(map); { ref: ciscoRouterMarkersLayerRef, id: 6, setState: setCiscoRouterMarkers },
} { ref: wagoMarkersLayerRef, id: 7, setState: setWagoMarkers },
if (!eciMarkersLayerRef.current) { { ref: siemensMarkersLayerRef, id: 8, setState: setSiemensMarkers },
eciMarkersLayerRef.current = new L.LayerGroup().addTo(map); { ref: otdrMarkersLayerRef, id: 9, setState: setOtdrMarkers },
} { ref: wdmMarkersLayerRef, id: 10, setState: setWdmMarkers },
if (!gsmModemMarkersLayerRef.current) { { ref: messstellenMarkersLayerRef, id: 13, setState: setMessstellenMarkers },
gsmModemMarkersLayerRef.current = new L.LayerGroup().addTo(map); { ref: talasiclMarkersLayerRef, id: 100, setState: setTalasiclMarkers },
} { ref: dauzMarkersLayerRef, id: 110, setState: setDauzMarkers },
if (!ciscoRouterMarkersLayerRef.current) { { ref: smsfunkmodemMarkersLayerRef, id: 111, setState: setSmsfunkmodemMarkers },
ciscoRouterMarkersLayerRef.current = new L.LayerGroup().addTo(map); { ref: ulafMarkersLayerRef, id: 0, setState: setUlafMarkers },
} { ref: sonstigeMarkersLayerRef, id: 200, setState: setSonstigeMarkers },
if (!wagoMarkersLayerRef.current) { ];
wagoMarkersLayerRef.current = new L.LayerGroup().addTo(map);
}
if (!siemensMarkersLayerRef.current) {
siemensMarkersLayerRef.current = new L.LayerGroup().addTo(map);
}
if (!otdrMarkersLayerRef.current) {
otdrMarkersLayerRef.current = new L.LayerGroup().addTo(map);
}
if (!wdmMarkersLayerRef.current) {
wdmMarkersLayerRef.current = new L.LayerGroup().addTo(map);
}
if (!messstellenMarkersLayerRef.current) {
messstellenMarkersLayerRef.current = new L.LayerGroup().addTo(map);
}
if (!talasiclMarkersLayerRef.current) {
talasiclMarkersLayerRef.current = new L.LayerGroup().addTo(map);
}
if (!dauzMarkersLayerRef.current) {
dauzMarkersLayerRef.current = new L.LayerGroup().addTo(map);
}
if (!smsfunkmodemMarkersLayerRef.current) {
smsfunkmodemMarkersLayerRef.current = new L.LayerGroup().addTo(map);
}
if (!ulafMarkersLayerRef.current) {
ulafMarkersLayerRef.current = new L.LayerGroup().addTo(map);
}
if (!sonstigeMarkersLayerRef.current) {
sonstigeMarkersLayerRef.current = new L.LayerGroup().addTo(map);
}
const updateGmaMarkers = () => { // Initialisiere LayerGroups nur einmal
// Alte Marker entfernen layerGroups.forEach(({ ref }) => {
gmaLayerRef.current.clearLayers(); if (!ref.current) {
ref.current = new L.LayerGroup().addTo(map);
}
});
// Neue Marker für jedes System erstellen const updateMarkers = ({ ref, id, setState }) => {
createAndSetDevices(11, setGmaMarkers, GisSystemStatic, priorityConfig); if (ref.current) {
}; ref.current.clearLayers(); // Entferne alte Marker
}
const updateTalasMarkers = () => { // Erstelle und füge neue Marker hinzu
// Alte Marker aus der LayerGroup entfernen
talasLayerRef.current.clearLayers();
// Neue Marker hinzufügen
createAndSetDevices( createAndSetDevices(
1, id,
(newMarkers) => { (newMarkers) => {
setTalasMarkers(newMarkers); // Update State setState(newMarkers); // Zustand aktualisieren
newMarkers.forEach((marker) => talasLayerRef.current.addLayer(marker)); // Füge Marker zur LayerGroup hinzu newMarkers.forEach((marker) => ref.current.addLayer(marker)); // Marker zur LayerGroup hinzufügen
// Überprüfe auf überlappende Marker und füge das Plus-Icon hinzu
checkOverlappingMarkers(map, newMarkers, plusRoundIcon);
}, },
GisSystemStatic, GisSystemStatic,
priorityConfig priorityConfig
); );
}; };
const updateEciMarkers = () => { // Aktualisiere alle Marker-Gruppen
eciMarkersLayerRef.current.clearLayers(); const updateAllMarkers = () => {
createAndSetDevices(2, setEciMarkers, GisSystemStatic, priorityConfig); layerGroups.forEach(updateMarkers);
}; };
const updateGsmModemMarkers = () => { // Initiales Update
gsmModemMarkersLayerRef.current.clearLayers(); updateAllMarkers();
createAndSetDevices(5, setGsmModemMarkers, GisSystemStatic, priorityConfig);
};
const updateCiscoRouterMarkers = () => { // Setze ein Intervall für regelmäßige Updates
ciscoRouterMarkersLayerRef.current.clearLayers(); const intervalId = setInterval(() => {
createAndSetDevices(6, setCiscoRouterMarkers, GisSystemStatic, priorityConfig); updateAllMarkers();
};
const updateWagoMarkers = () => {
wagoMarkersLayerRef.current.clearLayers();
createAndSetDevices(7, setWagoMarkers, GisSystemStatic, priorityConfig);
};
const updateSiemensMarkers = () => {
siemensMarkersLayerRef.current.clearLayers();
createAndSetDevices(8, setSiemensMarkers, GisSystemStatic, priorityConfig);
};
const updateOtdrMarkers = () => {
otdrMarkersLayerRef.current.clearLayers();
createAndSetDevices(9, setOtdrMarkers, GisSystemStatic, priorityConfig);
};
const updateWdmMarkers = () => {
wdmMarkersLayerRef.current.clearLayers();
createAndSetDevices(10, setWdmMarkers, GisSystemStatic, priorityConfig);
};
const updateMessstellenMarkers = () => {
messstellenMarkersLayerRef.current.clearLayers();
createAndSetDevices(13, setMessstellenMarkers, GisSystemStatic, priorityConfig);
};
const updateTalasiclMarkers = () => {
talasiclMarkersLayerRef.current.clearLayers();
createAndSetDevices(100, setTalasiclMarkers, GisSystemStatic, priorityConfig);
};
const updateDauzMarkers = () => {
dauzMarkersLayerRef.current.clearLayers();
createAndSetDevices(110, setDauzMarkers, GisSystemStatic, priorityConfig);
};
const updateSmsfunkmodemMarkers = () => {
smsfunkmodemMarkersLayerRef.current.clearLayers();
createAndSetDevices(111, setSmsfunkmodemMarkers, GisSystemStatic, priorityConfig);
};
const updateUlafMarkers = () => {
ulafMarkersLayerRef.current.clearLayers();
createAndSetDevices(0, setUlafMarkers, GisSystemStatic, priorityConfig);
};
const updateSonstigeMarkers = () => {
sonstigeMarkersLayerRef.current.clearLayers();
createAndSetDevices(200, setSonstigeMarkers, GisSystemStatic, priorityConfig);
};
// Initiales Update für beide LayerGroups
updateGmaMarkers();
updateTalasMarkers();
updateEciMarkers();
updateGsmModemMarkers();
updateCiscoRouterMarkers();
updateWagoMarkers();
updateSiemensMarkers();
updateOtdrMarkers();
updateWdmMarkers();
updateMessstellenMarkers();
updateTalasiclMarkers();
updateDauzMarkers();
updateSmsfunkmodemMarkers();
updateUlafMarkers();
updateSonstigeMarkers();
// Setze Intervalle für regelmäßige Updates
const markerIntervalId = setInterval(() => {
updateGmaMarkers();
}, 18000); // 18 Sekunden
const talasIntervalId = setInterval(() => {
updateTalasMarkers();
}, 20000); // 20 Sekunden }, 20000); // 20 Sekunden
// Aufräumen bei Komponentenentladung // Aufräumen bei Komponentenentladung
return () => { return () => {
clearInterval(markerIntervalId); clearInterval(intervalId); // Entferne Intervall
clearInterval(talasIntervalId);
if (gmaLayerRef.current) { // LayerGroups leeren
gmaLayerRef.current.clearLayers(); layerGroups.forEach(({ ref }) => {
} if (ref.current) {
if (talasLayerRef.current) { ref.current.clearLayers();
talasLayerRef.current.clearLayers(); }
} });
}; };
}, [gisSystemStaticLoaded, map, GisSystemStatic, priorityConfig]); }, [gisSystemStaticLoaded, map, GisSystemStatic, priorityConfig]);