当我使用代码
时,我有一张带有基本组和叠加组选择的传单地图input$mymap_group[1]
这只显示我选择的第一个叠加组而非基本组。 有没有办法显示当前选定的基组?
library(shiny)
library(leaflet)
evar <- c("SST", "SLA", "CHL", "Eddies NS", "Eddies EW", "NPP")
groups <- c("12323", "1232455","3443", "23","987", "566")
ui <- fluidPage(
mainPanel(tags$style(type = "text/css", "#mymap {height: calc(100vh - 80px) !important;}"),
uiOutput("group_selected"),
leafletOutput("mymap"))
)
server <- function(input, output, session) {
output$group_selected <- renderUI({ h2(input$mymap_groups[1]) })
output$mymap <- renderLeaflet({
leaflet() %>% addTiles() %>% setView(lng = -20, lat = 14, zoom = 6) %>% addLayersControl(baseGroups = evar, overlayGroups = groups)
})
}
runApp(shinyApp(ui, server))
答案 0 :(得分:0)
我并非100%确定这会解决您的问题,但它可能会指向您正确的方向。如果组和overlaygroup之间始终存在一对一的关系,则可能有效:
library(shiny)
library(leaflet)
evar <- c("SST", "SLA", "CHL", "Eddies NS", "Eddies EW", "NPP")
groups <- c("12323", "1232455","3443", "23","987", "566")
ui <- fluidPage(
mainPanel(tags$style(type = "text/css", "#mymap {height: calc(100vh - 80px) !important;}"),
textOutput("group_selected"),
leafletOutput("mymap"))
)
server <- function(input, output, session) {
output$group_selected <- renderText({ evar[which(groups %in% input$mymap_groups )] })
output$mymap <- renderLeaflet({
leaflet() %>% addTiles() %>% setView(lng = -20, lat = 14, zoom = 6) %>% addLayersControl(baseGroups = evar, overlayGroups = groups)
})
}
runApp(shinyApp(ui, server))
您可以使用leafletProxy选择组。 https://rstudio.github.io/leaflet/shiny.html。希望这有帮助!
答案 1 :(得分:0)
这个问题已有几年历史了,但据我所知,如果不向R代码中添加一些javascript,仍然无法实现此问题。以下是一些代码,用于使用所选基本组的名称(或平铺层,背景,以及您要调用的名称)创建新的输入绑定:
output$my_map <- renderLeaflet({
leaflet() %>%
addLayersControl(baseGroups = c("light", "satellite")) %>%
addProviderTiles(providers$CartoDB.Positron, group = "normal") %>%
addProviderTiles(providers$Esri.WorldImagery, group = "satellite") %>%
htmlwidgets::onRender("
function(el, x) {
var myMap = this;
myMap.on('baselayerchange',
function (e) {
Shiny.onInputChange('my_map_tile', e.layer.groupname)
})
}")
})
您选择的基本组出现在input$my_map_tile
observeEvent(input$my_map_tile, {
# Do something...
})