我正在创建一个类似于 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
其中有以下输出:
您可以轻松地在传单 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/