GOOGLE ADS

Montag, 18. April 2022

Wie überprüfe ich, ob sich ein Marker in einem Cluster befindet?

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

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...