# 🗺️ Dynamische Marker-Verwaltung in MapComponent.js (NodeMap) Dieses Dokument erklärt, wie Marker dynamisch erstellt, verwaltet und in `MapComponent.js` verwendet werden – inklusive Datenfluss und OverlappingMarkerSpiderfier-Integration. --- ## 🔄 Dynamische Marker-Erzeugung – Übersicht Früher (statisch): ```js useLayerVisibility(map, talasMarkers, mapLayersVisibility, "TALAS", oms); ``` → Jeder Marker-Typ war hart codiert. Jetzt (dynamisch): ```js const { markerStates, layerRefs } = useDynamicDeviceLayers(map, GisSystemStatic, mapLayersVisibility, priorityConfig, oms); ``` --- ## 🔁 Datenfluss Schritt für Schritt 1. **MapComponent.js** ruft den Hook `useDynamicDeviceLayers(...)` auf. 2. Der Hook iteriert über `GisSystemStatic` (Webservice-Liste aller Systeme). 3. Für jedes System wird `createAndSetDevices(...)` aufgerufen. 4. Diese Funktion: - Holt `Stations` aus Redux (filtered by System-ID) - Erstellt Marker (Leaflet) - Rückgabe über Callback `setMarkersFunction(markers)` 5. Die Marker werden per `setMarkerStates()` gespeichert. 6. In MapComponent.js können sie aus `markerStates[SystemName]` gelesen werden. 7. Sichtbarkeit wird über Redux (`mapLayersVisibility`) gesteuert. 8. Überlappende Marker werden über `checkOverlappingMarkers()` + `plusRoundIcon` + OMS angezeigt. --- ## 📦 Marker-Aufbau ### `createAndSetDevices.js` - Filtert Stations (`Points`) aus `selectGisStationsStaticDistrict` - Erstellt für jede gültige Station einen Marker: ```js const marker = L.marker([station.X, station.Y], { ... }); oms.addMarker(marker); // Spiderfier-fähig ``` - Fügt Marker zur richtigen `LayerGroup` hinzu - Gibt alle Marker über Callback zurück --- ## 🕷️ OverlappingMarkerSpiderfier (OMS) - Initialisiert in `useInitializeMap(...)` in `MapComponent.js` - Wird an `useDynamicDeviceLayers` übergeben - Marker werden dort registriert: `oms.addMarker(marker)` - Bei Klick auf das PlusIcon: ```js plusMarker.on("click", () => oms.spiderfy(nearbyMarkers)); ``` --- ## 📘 Mermaid-Diagramm ```mermaid flowchart TD A1[MapComponent] --> B1[useDynamicDeviceLayers] B1 --> C1[loop über GisSystemStatic] C1 --> D1[createAndSetDevices] D1 --> E1[Filter stations aus Redux] E1 --> F1[erstelle Marker /Leaflet] F1 --> G1[Marker in LayerGroup einfügen] G1 --> H1[setMarkerStates im Hook] H1 --> A2[markerStates zurück nach MapComponent] A2 --> I1[Map aktualisiert Marker] A2 --> I2[checkOverlappingMarkers mit OMS] ``` --- ## ✅ Vorteile der neuen Lösung | Vorteil | Beschreibung | | ------------- | ------------------------------------------------------ | | 🔄 Flexibel | Neue Geräte-Typen automatisch erkannt | | 📦 Kompakt | Kein `useState` oder `useLayerVisibility` mehr nötig | | 🧠 Wartbar | Eine zentrale Logik statt doppelter Komponentenlogik | | 🕷️ Integriert | OMS funktioniert automatisch bei überlappenden Markern | --- Letztes Update: automatisch generiert mit ChatGPT (OpenAI)