RShiny 在同一地块上显示多个传单地图

问题描述 投票:0回答:1

我有一个闪亮的应用程序,用户可以选择显示特定的传单地图(51 个可用)或所有传单地图(51 个,11 列和 5 行)。

为了在同一个图上显示多个传单地图,我使用latticeView,它在shinyapp之外运行良好,但不与renderleaflet一起显示。

我应该使用哪种渲染?是否可以对多个地图和单个地图使用相同的渲染,因为它是相同的绘图 ID?

代表:

require(leaflet)
require(leafsync)
require(shiny)

tilesURL <- "http://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}"

basemap <- list()
for(n in 1:51) {
  basemap[[n]] <- basemap1 <- leaflet() %>%
    addTiles(tilesURL) 
}



ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectInput("nb", "Select number", choices = c("All", 1:51))
    ),
    
    mainPanel(
      leafletOutput("map")
    )
  )
)

server <- function(input, output, session) {
  
  observe({
    if(input$nb=="All") {
      output$map <- renderLeaflet({
        latticeView(basemap, ncol=11)
      })
    } else {
      output$map <- renderLeaflet({
        basemap[[as.numeric(input$nb)]]
      })
    }
    
  })
}

shinyApp(ui, server)

如果我们选择 1 到 51 之间的数字,此代码将显示地图,但如果我们选择“全部”作为输入,则不会。

感谢您的帮助!

r shiny leaflet maps
1个回答
0
投票

切换到

renderUI
uiOutput
似乎有效:

mainPanel(
 uiOutput("map")
)

  observe({
    if(input$nb=="All") {
      output$map <- renderUI({
        latticeView(basemap, ncol=11)
      })
    } else {
      output$map <- renderUI({
        basemap[[as.numeric(input$nb)]]
      })
    }
© www.soinside.com 2019 - 2024. All rights reserved.