Je voudrais pouvoir changer l'ordre des couches dans le dépliant.
J'ai essayé d'implémenter deux plugins de dépliants afin de changer l'ordre des couches.
D'abord, j'ai essayé les dépliants-control-orderlayers , ce qui semble fonctionner, mais ne prend pas en charge les groupes de couches, voici mon bug déposé .
Ensuite, j'ai essayé mapbbcode , qui prend en charge layerGroups, mais ne semble pas fonctionner ni être maintenu.
Quelqu'un a-t-il des suggestions pour implémenter cette fonctionnalité?
Réponses:
Vous pouvez le faire de deux manières (au moins, c'est comme ça que je le fais):
layer.bringToFront()
etlayer.bringToBack()
mais ceux-ci ne feront qu'une couche à la fois, et ne la pousseront que vers l'avant ou l'arrière, pas entre les deux. Vous devez donc placer vos calques dans l'ordre souhaité, commencer par le calque que vous souhaitez placer en bas et appelerlayer.bringToFront()
chaque calque.Vous pouvez également le faire en supprimant et en rajoutant le calque. Cela semble en quelque sorte un gaspillage, mais comme la carte doit de toute façon être redessinée lors du repositionnement des couches, ce n'est généralement pas si grave.
Voici un violon assez complexe qui illustre le problème
Fondamentalement, vous supprimez tous les calques, puis les ajoutez à nouveau dans l'
z-index
ordre croissant . Parcourez donc toutes vos couches de superposition, appelezmap.removeLayer(layer)
, puis triez-les selon votre choixz-index
, puis ajoutez-les à nouveau en utilisantlayer.addTo(map)
.la source
J'avais le même problème et j'ai essayé la méthode fixZOrder (), mais malheureusement, cela n'a pas commandé les marqueurs Leaf pour moi car cela ne semble pas affecter le zindex des marqueurs Leaflet.
Il semble que .bringToFront () ne fonctionne que sur les formes vectorielles qui prennent en charge cette méthode, contrairement aux marqueurs Leaf que j'ai déployés rendant cette solution inapplicable, sans parler des autres problèmes de code que je rencontrais avec fixZOrder (), mais cela pourrait être unique à mon cas.
La
Au lieu de cela, j'ai simplement laissé l'ordre des couches à Leaflet (options) dans l'ordre dans lequel je les ai chargées, ce qui a causé des problèmes d'empilement de marqueurs (plug-in OMS Spiderf) lors de l'utilisation des contrôles de couche , mais j'ai réussi à les résoudre à l'aide de ma propre fonction basée sur setZIndexOffset ()
Bien que mon scénario n'ait pas exigé
fixZOrder(layers)
à la fin quiconque utilisant cette méthode avec des marqueurs empilés peut avoir besoin d'adopter une approche similaire et donc je poste cela comme une solution supplémentaire pour les utilisateurs potentiels de la méthode d'ordre des couches mentionnée ci-dessus.La
CRÉDIT : ghybs répond sur stackoverflow.com/a/37850189/11106279
la source
Semblable à la réponse de @nothingisnecessary, les utilisations suivantes permettent
layer.bringToFront()
de maintenir l'ordre z lorsque vous avezlayer control
un chargement de données combiné et asynchrone.Définissez les calques:
Utilisez la fonction suivante pour appliquer l'ordre z:
Lorsque vous utilisez le contrôle des calques, lorsqu'un calque est basculé en vue, il sera au-dessus des autres calques, nous devons réappliquer la logique de commande lorsqu'un calque est ajouté. Cela peut être fait en se liant à l'
overlayadd
événement sur la carte et en appelant lafixZOrder
fonction:la source
Vous devez créer Panel pour contrôler la commande.
Avec cela, vous pouvez ajouter le calque au volet que vous souhaitez.
la source