首页 > 解决方案 > 将 Leaflet Deflate 与 Shiny 集成

问题描述

更新

找到这个之后......我稍微调整了这个问题。我已经成功加载并使用 L.deflate 来创建我的“放气功能”。但现在我需要以某种方式从地图中取出我的对象并将它们添加到 deflate 对象中,如 leaflet.deflate 文档中所述。


我正在尝试使用此处的步骤将传单放气插件集成到 Shiny 应用程序中。我已经加载了插件,但现在我只想知道如何从我的多边形层中获取对象并将它们添加到 delate_features 对象中,如文档中所述。

文档步骤

const map = L.map("map").setView([51.505, -0.09], 12);

const deflate_features = L.deflate({minSize: 20});
deflate_features.addTo(map);

// This is the step I am not sure how to handle in the onRender()
const polygon = L.polygon([
    [51.509, -0.08],
    [51.503, -0.06],
    [51.51, -0.047]
]);
polygon.addTo(deflate_features);

测试应用

library(sf)
library(leaflet)
library(htmltools)
library(htmlwidgets)

js_file <- "https://unpkg.com/Leaflet.Deflate@1.3.0/dist/L.Deflate.js"


ui <- fixedPage(
  tags$head(tags$script(src = js_file)),
  leafletOutput("map")
)

server <- function(session, input, output) {
  
  output$map <- renderLeaflet({
    nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)
    
    leaflet(options = leafletOptions(preferCanvas = TRUE)) %>% 
      addMapPane(name = "labels", zIndex = 650) %>% 
      addProviderTiles(providers$Stamen.TonerLabels,
                       options = providerTileOptions(opacity = 0.35,
                                                     updateWhenZooming = FALSE,
                                                     pane = "labels")) %>% 
      addProviderTiles(providers$Stamen.TonerBackground,
                       options = providerTileOptions(opacity = 0.35,
                                                     updateWhenZooming = FALSE)) %>% 
      addPolygons(data = st_transform(nc, 4326)) %>% 
      onRender("function(el, x, data) {
               const deflate_features = L.deflate({ minSize: 20 });
               deflate_features.addTo(this);
               // How to select the polygons I already have and add them                       
               // to deflate_features????
      }")
    
  })
}
  
shinyApp(ui, server)


标签: javascriptrshinyleafletr-leaflet

解决方案


推荐阅读