Wie kann mit Leaflet.Markercluster überprüft werden, ob sich ein Marker in einem Cluster befindet?
Lösung des Problems
Verwenden Sie die Funktion hasLayer() von Leaflet
Leaflet hat eine Funktion hasLayer(), die wahr/falsch zurückgibt, ob eine Ebene derzeit in der Karte vorhanden ist. Beim Clustern ist eine Markierung technisch gesehen keine Ebene mehr auf der Karte, daher würde hasLayer() false zurückgeben.
Ich verwende dies, um einen ausgewählten Marker abzuwählen, wenn er nach Zoom-Ereignissen geclustert wird.
Unten ist ungefähr, was ich tue; Dies ist kein vollständiger Code...
Relevanter abgekürzter Code:
Ich halte mein Clustering so...
this.markersClustered = L.markerClusterGroup({ // Lots of stuff here... } })
In meinem Klickereignis für einzelne Markierungen speichere ich die Markierung in einem "s selectedItem "-Objekt (das ich für alle möglichen anderen Logiken in meiner App verwende)...
onEachFeature(feature, marker) {
marker.on("click", e => {
//... (lots of code)...
// Save instance of the marker; I call it "layer" only
// because I only use this for the hasLayer() check
this.selectedItem.layer = marker
// Here do other stuff too, whatever you need...
//this.selectedItem.target = e.target
//this.selectedItem.latlng = e.latlng
//this.selectedItem.id = e.target.feature.id
//this.selectedItem.icon = layer._icon
//... (lots of code)...
})
}
Wenn Cluster-Animationen enden, hasLayer()
prüfen Sie mit, ob sich der ausgewählte Marker in einem Cluster befindet...
this.markersClustered.on('animationend', (e) => {
// Check visibility of selected marker
// True: Not in a cluster (ie marker is visible on map)
// False: In a cluster (ie marker is not visible on map)
console.log("Selected marker visible?:" + this.map.hasLayer(this.selectedItem.layer))
})
Keine Kommentare:
Kommentar veröffentlichen