是否可以访问Shiny中的R Leaflet图层控件(在传单之外)?

Lau*_*ren 5 r leaflet shiny

我正在创建一个类似于这个在画面中完成的Shiny/Leaflet应用程序.它显示了不同年份的世界级贫困观,允许用户按变量,地区和年份过滤地图.

问题是全局国家级shapefile(来自NaturalEarthData)渲染速度非常慢.我正在研究简化这些多边形以减少加载时间的不同方法,但与此同时,我正在研究其他可能的解决方案.

理想情况下,我会使用Shiny控件来切换不同的地图图层并用于leafletProxy更新地图.但是因为每个图层更改再次绘制整个地图,所以这也很慢.

当我 Leaflet中包含不同的图层时,图层渲染得更快,更快.(我假设这是因为addLayersControlLeaflet中的选项只更改fillColor了多边形而不是重绘整个全局shapefile,如同leafletProxy).但有没有办法在Leaflet之外访问这些层?

为了说明,这里有一些虚拟代码:

#load required libraries 
library(shiny)
library(leaflet)
library(raster)

#begin shiny app
shinyApp(

  ui <- fluidPage(
    leafletOutput("map", width = "100%", height = 600) 
  ), #END UI

  server <- function(input, output, session){

    #load shapefile
    rwa <- getData("GADM", country = "RWA", level = 0)

    #render map
    output$map <- renderLeaflet({
      leaflet() %>% 
        addTiles() %>% 
        addPolygons(data = rwa, 
                    fillColor = "blue", 
                    group = "blue") %>% 
        addPolygons(data = rwa, 
                    fillColor = "red", 
                    group = "red") %>% 
        addLayersControl(baseGroups = c("blue", "red"), 
                         options = layersControlOptions(collapsed = F))
    }) #END RENDER LEAFLET 
  } #END SERVER
) #END SHINY APP
Run Code Online (Sandbox Code Playgroud)

其中有以下输出: 在此输入图像描述

您可以轻松地在传单地图对象中的蓝色和红色图层之间切换.但是,当我将地图图层从蓝色切换为红色时,我想要一个Shiny表来更新红色多边形图层中的属性.我希望能够将这个物体拉到传单之外并在闪亮中使用它observeEvent.这可能/我该怎么做?

Sim*_* G. 4

您可以为{MAP_ID}_groupsShiny 服务器中的输入定义一个观察者。

例子:

server <- function(input, output, session) {
    # ...

    output$my_map <- renderLeaflet({
        # ...
    })

    observe({
        selected_groups <- req(input$my_map_groups)
        # do whatever ... 
    })
}
Run Code Online (Sandbox Code Playgroud)

当用户在图层控件中选择一个组时,此输入会更新。