Gostaria de poder alterar a ordem das camadas no folheto.
Tentei implementar dois plug-ins de folheto para alterar a ordem das camadas.
Primeiro, tentei os leaflet-control-orderlayers , que parecem funcionar, mas não oferecem suporte a layerGroups, eis o meu bug arquivado .
Em seguida, tentei mapbbcode , que suporta layerGroups, mas parece não funcionar ou ser mantido.
Alguém tem alguma sugestão de como implementar esse recurso?
Respostas:
Você pode fazer isso de duas maneiras (pelo menos; é assim que eu faço):
layer.bringToFront()
e, nolayer.bringToBack()
entanto, eles fazem apenas uma camada de cada vez, e apenas a empurram para a frente ou para trás, não entre elas. Então, você precisará colocar as camadas na ordem desejada, começar com a camada que deseja colocar na parte inferior e chamarlayer.bringToFront()
cada camada.Você também pode fazer isso removendo e adicionando novamente a camada. Isso parece meio desperdício, mas como o mapa deve ser redesenhado ao reposicionar camadas de qualquer maneira, geralmente não é tão importante assim.
Aqui está um violino bastante complexo que ilustra a questão
Basicamente, você remove todas as camadas e as adiciona novamente em
z-index
ordem crescente . Então, percorra todas as suas camadas de sobreposição e chamemap.removeLayer(layer)
, classifique-as conforme desejadoz-index
e adicione-as novamente usandolayer.addTo(map)
.fonte
Eu estava com o mesmo problema e tentei o método fixZOrder (), mas, infelizmente, ele não solicitou os marcadores Leaf para mim, pois não parece afetar o zindex dos marcadores Leaflet.
Parece que .bringToFront () funciona apenas em formas vetoriais que suportam este método, pelo contrário aos marcadores Folha I implantados tornando esta solução inviável, para não mencionar outra questão código que eu estava experimentando com fixZOrder (), mas isso poderia ser exclusivo para o meu caso.
O que outras pessoas estão dizendo
Em vez disso, simplesmente deixei a ordem de camada para Leaflet (opções) na ordem em que as carreguei, o que causou problemas com o empilhamento de marcadores (plug-in OMS Spiderf) ao usar controles de camada , mas consegui resolvê-los com a ajuda de minha própria função, com base em setZIndexOffset ()
Embora meu cenário não exija,
fixZOrder(layers)
no final, qualquer outra pessoa que use esse método juntamente com marcadores empilhados pode precisar adotar uma abordagem semelhante e, portanto, estou postando isso como uma solução adicional para possíveis usuários do método de pedido de camada mencionado acima.O que outras pessoas estão dizendo
CRÉDITO : as ghybs respondem em stackoverflow.com/a/37850189/11106279
fonte
Semelhante à resposta de @nothingisnecessary, os seguintes usos
layer.bringToFront()
para manter a ordem z quando você combina olayer control
carregamento de dados assíncrono.Defina as camadas:
Use a seguinte função para impor a ordem z:
Ao usar o controle Camada, quando uma Camada é alternada para exibição, ela fica por cima das outras camadas, precisamos reaplicar a lógica da ordem quando uma camada é adicionada. Isso pode ser feito vinculando o
overlayadd
evento no mapa e chamando afixZOrder
função:fonte
Você deve criar o painel para controlar o pedido.
Com isso, você pode adicionar a camada ao painel que deseja.
fonte