Ich möchte in der Lage sein, die Reihenfolge der Schichten in der Packungsbeilage zu ändern.
Ich habe versucht, zwei Faltblatt-Plugins zu implementieren, um die Ebenenreihenfolge zu ändern.
Zuerst habe ich Flyer-Control-Orderlayers ausprobiert , was zu funktionieren scheint, aber LayerGroups nicht unterstützt. Hier ist mein Fehler .
Als nächstes habe ich Mapbbcode ausprobiert , der LayerGroups unterstützt, aber anscheinend nicht funktioniert oder gewartet wird.
Hat jemand Vorschläge zur Implementierung dieser Funktion?
Antworten:
Sie können dies auf verschiedene Arten tun (zumindest mache ich das so):
layer.bringToFront()
undlayer.bringToBack()
aber diese machen jeweils nur eine Schicht und schieben sie nur nach vorne oder hinten, nicht dazwischen. Sie müssten also Ihre Ebenen in die gewünschte Reihenfolge bringen, mit der Ebene beginnen, die Sie unten haben möchten, undlayer.bringToFront()
jede Ebene aufrufen .Sie können dies auch tun, indem Sie die Ebene entfernen und erneut hinzufügen. Dies scheint etwas verschwenderisch zu sein, aber da die Karte ohnehin neu gezeichnet werden muss, wenn Ebenen neu positioniert werden, ist dies im Allgemeinen keine so große Sache.
Hier ist eine ziemlich komplexe Geige, die das Problem veranschaulicht
Grundsätzlich entfernen Sie alle Ebenen und fügen sie dann in aufsteigender
z-index
Reihenfolge wieder hinzu. Durchlaufen Sie also alle Ihre Overlay-Ebenen, rufen Sie sie aufmap.removeLayer(layer)
, sortieren Sie sie nach Ihren Wünschenz-index
und fügen Sie sie mit hinzulayer.addTo(map)
.quelle
Ich hatte das gleiche Problem und habe die Methode fixZOrder () ausprobiert, aber leider wurden die Leaf-Marker für mich nicht bestellt, da sie den Zindex der Leaflet-Marker nicht zu beeinflussen scheinen.
Scheint so, als ob .bringToFront () nur mit Vektorformen funktioniert, die diese Methode unterstützen, im Gegensatz zu den von mir bereitgestellten Blattmarkierungen, die diese Lösung unbrauchbar machen, ganz zu schweigen von anderen Codeproblemen, die ich mit fixZOrder () hatte, aber dies könnte einzigartig sein mein Fall.
.
Stattdessen überließ ich die Ebenenreihenfolge einfach Leaflet (Optionen) in der Reihenfolge, in der ich sie geladen hatte, was zu Problemen beim Stapeln von Markern (OMS Spiderf-Plugin) bei der Verwendung von Ebenensteuerelementen führte , aber ich konnte diese mithilfe meiner eigenen Funktion basierend auf beheben setZIndexOffset ()
Obwohl mein Szenario ist nicht das erfordern
fixZOrder(layers)
in dem Ende jemand anderes dieses Verfahren zusammen mit gestapelten Markern muß einen ähnlichen Ansatz zu übernehmen und damit dies als ich bin Entsendung zusätzliche Lösung für die potenziellen Nutzer der oben genannten Schicht Bestellmethode..
KREDIT : ghybs antwortet auf stackoverflow.com/a/37850189/11106279
quelle
Ähnlich wie bei der Antwort von @nothingisnecessary wird im Folgenden
layer.bringToFront()
die Z-Reihenfolge beibehalten, wenn Sielayer control
Daten kombiniert und asynchron geladen haben .Definieren Sie die Ebenen:
Verwenden Sie die folgende Funktion, um die Z-Reihenfolge zu erzwingen:
Wenn Sie das Ebenensteuerelement verwenden und eine Ebene in die Ansicht umgeschaltet wird, befindet sie sich über den anderen Ebenen. Wenn eine Ebene hinzugefügt wird, müssen Sie die Ordnungslogik erneut anwenden. Dies kann durch Binden an das
overlayadd
Ereignis auf der Karte und Aufrufen derfixZOrder
Funktion erfolgen:quelle
Sie müssen Panel erstellen, um die Reihenfolge zu steuern.
Mit dieser Option können Sie die Ebene dem gewünschten Bereich hinzufügen.
quelle