【发布时间】:2019-08-01 10:49:15
【问题描述】:
我有一个相当复杂的 Shiny 应用程序,上面有一张传单地图和许多其他控件。我在下面做了一个非常简化的版本。
我已将两个组(一个 addMarker 和一个 addCircles 组)最初设置为不通过将两个图层都放在 hideGroup 函数中进行绘图。然后我运行该应用程序并在地图上的复选框中的 addLayersControl 中手动打开它们。 addCircles 组的半径由sliderInput 反应控制,但是,这会再次运行 hideGroup 函数并且它们不会被绘制,我现在不希望发生这种情况。我希望它们保持绘制状态。
我如何从隐藏组开始,通过地图层控件打开它们来显示它们,然后在没有组的情况下向 addCircles 半径发送一个新值,然后请切换回隐藏组默认值?
我是否通过隔离解决问题,我还没有通过这种方式取得任何成功?或者我应该采用 if_else 条件方法来调用 showGroup 状态吗?提前致谢。
library(shiny)
library(tidyverse)
library(leaflet)
library(sf)
ui <- fluidPage(
column(width = 4,
sliderInput("slt_kam_reach",
"KAM",
min = 0,
max = 50000,
step = 1000,
value = 5000
)
),
column(width = 8,
leafletOutput("lflt_map")
)
)
kam_data <- data.frame(
kam_code = c("abc123", "def456"),
lng = c(18.5, 18.7),
lat = c(-33.5, -33.7)
)
kam_data_sf <- st_as_sf(
kam_data,
coords = c("lng", "lat"),
crs = "+proj=longlat +datum=WGS84"
)
server <- function(input, output, session){
output$lflt_map <- renderLeaflet({
leaflet() %>%
addTiles(group = "OSM") %>%
addLayersControl(
overlayGroups = c("KAM",
"KAM_reach"),
options = layersControlOptions(
collapsed = F
)
) %>%
addMarkers(data = kam_data_sf,
group = "KAM") %>%
addCircles(data = kam_data_sf,
group = "KAM_reach",
radius = input$slt_kam_reach
) %>%
hideGroup("KAM") %>%
hideGroup("KAM_reach")
})
}
shinyApp(ui, server)
【问题讨论】: