如何检查在传单地图上选择的基本组

时间:2017-07-20 11:49:51

标签: r shiny leaflet

当我使用代码

时,我有一张带有基本组和叠加组选择的传单地图
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))

2 个答案:

答案 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...
})