Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

352
Visualizações
Cómo evitar que BringToBack invierta el orden de las capas de FeatureGroup en Leaflet

Tengo un Leaflet Map en una aplicación web Shiny. Tengo 3 grupos base que contienen diferentes círculos y 1 grupo superpuesto que contiene polilíneas que se cruzan entre sí. Las polilíneas se ordenan de modo que las líneas más importantes estén encima de las menos importantes. Los círculos se agregan después para estar encima de las líneas. El problema es: al desmarcar y luego marcar el grupo superpuesto, las líneas se colocan encima de los círculos. El círculo se puede colocar encima de las líneas cuando se cambia la capa base. Sin embargo, me gustaría evitar que la línea se superponga a los círculos. Para hacer eso, utilicé la función OnRender de htmltools:

 output$map <- renderLeaflet( leaflet() %>% addProviderTiles(providers$CartoDB.Positron) %>% setView( lng = 48.80, lat = 2.30, zoom = 10 ) %>% addControl("Title", position = "bottomleft", className = "map-title") %>% onRender( "function(el, x) { this.on('overlayadd', function(e) { e.layer.bringToBack(); }) }" )

Y bueno, sí, pone la línea detrás de los círculos, pero lo que también hace es invertir el orden de las líneas (de todo el FeatureGroup), por lo que ahora las líneas menos importantes están encima de las más importantes. Por lo que obtengo, traerToBack() toma la primera línea dibujada, la lleva hacia atrás, luego la segunda línea dibujada, la pone hacia atrás (debajo de la primera) y así sucesivamente, hasta que la primera línea dibujada (la menos importante) se colocará al frente mientras que el último dibujado (el más importante) se colocará al reverso.

Así que probé algunas modificaciones de la función:

 function(el, x) { this.on('overlayadd', function(e) { var layers = e.layer.getLayers(); e.layer.clearLayers(); layers.reverse(); layers.forEach(l => e.layer.addLayer(l)); e.layer.bringToBack(); })

Y no funcionó. Así que ahora no lo entiendo, porque técnicamente ahora el primer dibujado es el que quiero que sea el último dibujado, y por lo tanto, la inversión de traerToBack debería hacerlo. Pero no, el orden sigue siendo el mismo que la otra función. Y probé sin el reverso, sigue siendo el mismo resultado. También probé setZIndex, colocando la capa base en un índice Z alto, mientras que la superposición se devolvió a un índice Z bajo, pero no tuvo ningún efecto (líneas en la parte superior de los círculos).

Y traté de cambiar las opciones autoZIndex y sortLayers de layerControlOptions y no tuvo ningún efecto (líneas en la parte superior de los círculos).

Entonces, lo que me gustaría es: una explicación de la magia detrás de traerToBack, o una función js que hará el truco, o una solución R que mantendrá el orden como lo quiero.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

La función addMapPane en la library(leaflet) se puede usar para solucionar este problema sin un código JS personalizado.

De la descripción:

Se pueden crear paneles de mapas proporcionando un nombre y un zIndex para controlar el orden de las capas. Recomendamos un valor de zIndex entre 400 (el panel de superposición predeterminado) y 500 (el panel de sombra predeterminado). Luego puede usar este panel para representar superposiciones (puntos, líneas, polígonos) configurando el argumento del panel en leafletOptions. Esto le dará control sobre el orden de las capas, por ejemplo, los puntos siempre encima de los polígonos. Si se proporcionan dos capas al mismo panel, la superposición se determinará por orden de adición. Vea los ejemplos a continuación. Consulte https://leafletjs.com/reference-1.3.4.html#map-pane para obtener más información.

Ver el ejemplo en la ayuda. Escribe ?addMapPane en la consola

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda