layers awesome r shiny leaflet

awesome - r leaflet weight



La imagen de trama va por debajo de la capa base, mientras que los marcadores permanecen arriba: xIndex se ignora (1)

Estoy construyendo una aplicación sencilla Shiny + Leaflet R para navegar por un mapa sobre el cual se traza un raster (desde el raster del paquete) con la útil función addRasterImage() . El código se basa en gran medida en los propios ejemplos de Leaflet. Sin embargo, estoy encontrando algunos problemas con la estratificación: la imagen ráster se muestra de alguna manera debajo de los mosaicos cada vez que recargo las teselas, incluso si configuro un zIndex negativo. Esto no sucede con los marcadores. Ver el código adjunto. Ejemplo de archivo de entrada aquí , 366KB.

#### ###### YOU CAN SKIP THIS, THE PROBLEM LIES BELOW ###### #### library(shiny) library(leaflet) library(RColorBrewer) library(raster) selrange <- function(r, min, max) { #Very fast way of selecting raster range, even faster than clamp. #http://stackoverflow.com/questions/34064738/fastest-way-to-select-a-valid-range-for-raster-data rr <- r[] rr[rr < min | rr > max] <- NA r[] <- rr r } llflood <- raster("example_flooding_posmall.nc") ext <- extent(llflood) flood <- projectRasterForLeaflet(llflood) floodmin <- cellStats(flood, min) floodmax <- cellStats(flood, max) tiles <- c("Hydda.Base", "Hydda.Full", "Esri.WorldImagery", "Esri.WorldTopoMap" ) ui <- bootstrapPage( tags$style(type = "text/css", "html, body {width:100%;height:100%}"), leafletOutput("map", width = "100%", height = "100%"), absolutePanel(top = 10, right = 10, sliderInput("range", "Return Period (years)", floor(floodmin), ceiling(floodmax), value = c(floor(floodmin), ceiling(floodmax)), step = 1 ), selectInput("colors", "Color Scheme", rownames(subset(brewer.pal.info, category %in% c("seq", "div"))) ), selectInput("tiles", "Background", tiles ), checkboxInput("legend", "Show legend", TRUE)) ) server <- function(input, output, session) { # Reactive expression for the data subsetted to what the user selected filteredData <- reactive({ selrange(flood, input$range[1], input$range[2]) }) # This reactive expression represents the palette function, # which changes as the user makes selections in UI. colorpal <- reactive({ colorNumeric(input$colors, values(filteredData()), na.color = NA) }) ###### ###### THE INTERESTING PART IS HERE ###### ###### output$map <- renderLeaflet({ # Use leaflet() here, and only include aspects of the map that # won''t need to change dynamically (at least, not unless the # entire map is being torn down and recreated). leaflet() %>% fitBounds(ext[1], ext[3], ext[2], ext[4]) }) observe({ #Observer to edit tiles selectedTiles <- input$tiles leafletProxy("map") %>% clearTiles() %>% addProviderTiles(selectedTiles, providerTileOptions(zIndex=-10, continuousWorld=FALSE), group="base") }) observe({ #Observer to edit colors and valid range filtdata <- filteredData() pal <- colorpal() leafletProxy("map") %>% clearImages() %>% addRasterImage(filtdata, opacity=0.7, project=FALSE, colors=pal, group="overlay") %>% addMarkers(lng=8.380508, lat=45.18058, popup="This marker stays above, the raster sinks below every time I load a new tile set") }) ###### ###### THE INTERESTING PART ENDS HERE ###### ###### observe({ #Observer to show or hide the legend inputlegend <- input$legend proxy <- leafletProxy("map") # Remove any existing legend, and only if the legend is # enabled, create a new one. proxy %>% clearControls() if (inputlegend) { pal <- colorpal() proxy %>% addLegend(position = "bottomright", pal = pal, values = values(filteredData()), opacity=1 ) } }) cat("Clicked point:/tLon/t/tLat/t/tValue/n") observe({ #Observe to show clicked points x = as.double(unlist(input$map_click)[2]) if(!is.null(x)) { y = unlist(input$map_click)[1] val = extract(llflood, cellFromXY(llflood, c(x, y))) if (!is.na(val)) cat("/t/t", x, "/t", y, "/t", val, "/n") } }) } ## RUN: shinyApp(ui, server)


Yo también tengo este problema, pero tu pregunta es la única referencia que puedo encontrar.

La única solución alternativa que pude encontrar fue redibujar las teselas en el observador de la trama, por ejemplo

observe({ #Observer to edit colors and valid range selectedTiles <- input$tiles filtdata <- filteredData() pal <- colorpal() leafletProxy("map") %>% clearTiles() %>% addProviderTiles(selectedTiles, providerTileOptions(zIndex=-10, continuousWorld=FALSE), group="base") clearImages() %>% addRasterImage(filtdata, opacity=0.7, project=FALSE, colors=pal, group="overlay") %>% addMarkers(lng=8.380508, lat=45.18058, popup="This marker stays above, the raster sinks below every time I load a new tile set") })