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

标签 r shiny leaflet

我正在创建一个类似于 this one that's done in tableau 的 Shiny/Leaflet 应用程序.它显示了不同年份的世界级贫困 View ,允许用户按变量、地区和年份过滤 map 。

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

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

当我在 Leaflet 中包含不同的图层时,这些图层的渲染速度会快得多。 (我认为这是因为 Leaflet 中的 addLayersControl 选项仅更改多边形的 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

其中有以下输出:
enter image description here

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

最佳答案

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

例子:

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

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

    observe({
        selected_groups <- req(input$my_map_groups)
        # do whatever ... 
    })
}

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

关于r - 是否可以在 Shiny(传单外)中访问 R Leaflet 层控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41468538/

相关文章:

r - 为什么在不输入 "Arithmetic"的情况下键入 `?mgcv-faq`时,为什么要引用 `library(mgcv)`的手册页?

r - 将 ASCII 文件导入 R

R - Shiny 找不到 "container"

r - googleVis 无法与两个依赖的 Shiny 小部件正常工作

reactjs - 为什么我的 map 上没有全屏图标?

html - 如何使用 R 发送 HTML 电子邮件

performance - 如何使计算/插入日期差异列更快?

r - 单击后折叠仪表板侧边栏菜单

javascript - 按 id 自定义聚类

jquery-ui - 按年份分组的传单 slider