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

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

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

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

理想情况下,我会使用 Shiny 控件来切换不同的地图图层并使用

leafletProxy
来更新地图。但由于每次图层更改都会重新绘制整个地图,因此速度也相当慢。

当我在传单中包含不同的图层时,图层的渲染速度要快得多。 (我认为这是因为 Leaflet 中的 addLayersControl 选项仅更改多边形的

fillColor
,而不是像
leafletProxy
那样重新绘制整个全局 shapefile)。但是有没有办法在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 您可以轻松地在传单地图对象内的蓝色和红色图层之间切换。但是,假设当我将地图图层从蓝色切换到红色时,我希望使用红色多边形图层中的属性更新闪亮表。我希望能够将这个物体从传单中拉出并在闪亮的

observeEvent

中使用它。这可能吗/我该怎么做?

    

r shiny r-leaflet
1个回答
4
投票
{MAP_ID}_groups

输入定义一个观察者。


示例:

server <- function(input, output, session) { # ... output$my_map <- renderLeaflet({ # ... }) observe({ selected_groups <- req(input$my_map_groups) # do whatever ... }) }

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

© www.soinside.com 2019 - 2024. All rights reserved.