如果我没有反应性的rasters,这个答案仅发布给以前的问题就可以很好地奏效。但是,当我在代码中尝试同一件事时,用来显示反应性栅栏,什么也不会发生。如果我在使用leafletProxy()
clearControls()
library(lubridate)
library(raster)
library(shiny)
library(leaflet)
library(leafem)
# Create example csv
params <- data.frame(summary = c("Mean", "Mean", "SD" , "SD"),
threshold = c(1, 2, 1, 2))
# Create raster brick (example)
raster_list <- list()
for (i in 1:4) {
raster_list[[i]] <- raster(xmn=-90, xmx=-75, ymn=40, ymx=47,
crs = "+proj=longlat +datum=NAD83 +no_defs ",
resolution = 0.0416667)
}
raster_list[[1]] <- setValues(raster_list[[1]],
sample(30:50, ncell(raster_list[[1]]), replace = TRUE))
raster_list[[2]] <- setValues(raster_list[[1]],
sample(50:80, ncell(raster_list[[2]]), replace = TRUE))
raster_list[[3]] <- setValues(raster_list[[3]],
sample(1:20, ncell(raster_list[[3]]), replace = TRUE))
raster_list[[4]] <- setValues(raster_list[[4]],
sample(1:20, ncell(raster_list[[4]]), replace = TRUE))
all_rast <- stack(raster_list)
names(all_rast) <- paste0(tolower(params$summary), "_", params$threshold)
all_rast <- brick(all_rast)
all_rast <- projectRaster(all_rast, raster::projectExtent(all_rast, crs = "epsg:3857"))
# Modify function used to format legend labels so we can add dates
myLabelFormat <- function(..., dates = FALSE){
if (dates) {
function(type = "numeric", cuts) {
dd <- parse_date_time(paste("2019", cuts), orders = "%Y %j")
dd <- format(dd, "%d %B")
paste0(cuts, " (", dd, ")")
}
} else {
labelFormat(...)
}
}
# ui --------------------------------------------------------------------------#
ui <- fluidPage(
titlePanel("Title"),
sidebarLayout(
sidebarPanel(
selectInput(inputId = "threshold",
label = "Threshold",
choices = unique(params$threshold)),
selectInput(inputId = "summary",
label = "Summary",
choices = unique(params$summary))
), # end sidebarPanel
mainPanel(
leafletOutput("map", height = "80vh")
) # end mainPanel
) # end sidebarLayout
) # end fluidPage
# server ----------------------------------------------------------------------#
server <- shinyServer(function(input, output) {
reacRaster <- reactive({all_rast[[paste0(tolower(input$summary),
"_", input$threshold)]]})
legend_title <- reactive({ifelse(input$summary == "SD",
"SD (days)", "Day of year")})
legend_labels <- reactive({ifelse(input$summary == "SD",
myLabelFormat(dates = FALSE),
myLabelFormat(dates = TRUE))})
output$map <- renderLeaflet({
leaflet() %>%
fitBounds(lng1 = -88, lat1 = 35, lng2 = -65, lat2 = 47) %>%
addTiles()
})
observe({
pal <- colorNumeric(palette = "viridis",
domain = values(reacRaster()),
na.color = "transparent",
reverse = TRUE)
leafletProxy("map") %>%
clearImages() %>%
clearControls() %>%
addRasterImage(reacRaster(),
colors = pal,
group = "Value",
layerId = "Value",
opacity = 0.8,
project = FALSE) %>%
addLegend("bottomright",
pal = pal,
values = values(reacRaster()),
labFormat = legend_labels(),
title = legend_title(),
opacity = 0.8) %>%
addImageQuery(reacRaster(),
digits = 2,
type = "click",
position = "bottomleft",
prefix = "",
layerId = "Value",
project = TRUE)
}) # end observe
}) # end server
# run app ---------------------------------------------------------------------#
shinyApp(ui = ui, server = server)
?这是所有使用的代码运行应用程序(带有虚假数据):
map
您可以在下面的所有
htmlwidgets::onRender()
元素上跟进