在闪亮的应用程序中缓存或预渲染传单地图

大卫 :

我正在尝试使用传单映射〜8000个多边形并遇到性能问题。当我在一个闪亮的应用程序中使用地图时,我想知道是否有可能以某种方式缓存或预渲染该地图。

请注意,在我的情况下,我使用这种方法交换了不同的多边形层

一个小的MWE是这样的:

数据可以从这里下载

library(shiny)
library(leaflet)
library(sf)

## Download Shapefile
file <- "plz-gebiete.shp"

if (!file.exists(file)) {
  url <- "https://www.suche-postleitzahl.org/download_files/public/plz-gebiete.shp.zip"
  zipfile <- paste0(file, ".zip")
  download.file(url, zipfile)
  unzip(zipfile)
}

df <- st_read(file, options = "ENCODING=UTF-8")

# If possible: pre-render the map here!

library(shiny)

ui <- fluidPage(
  leafletOutput("mymap", width = "700px", height = "700px")
)

server <- function(input, output, session) {
  output$mymap <- renderLeaflet({
    leaflet() %>% 
      addTiles() %>% 
      addPolygons(data = df, weight = 1, color = "black")
  })
}

shinyApp(ui, server)

在我的计算机上,用多边形渲染地图大约需要16秒钟。

如果可能的话,我想将地图预先渲染一次,将其另存为.rds文件,然后按需加载。请注意,我知道应用内地图的宽度/高度(此处设置为700px)。但是类似

map <- renderLeaflet({leaflet() %>% ...})
saveRDS(map, "renderedmap.rds")

map <- readRDS("renderedmap.rds")

# within server()
output$mymap <- map

不会导致任何性能提升。

另外,我尝试异步加载传单,以便应用程序的其他部分可以渲染/交互,但无济于事。

有什么想法可以解决或解决这个问题吗?

硒化镓

以下2种方法不能完全回答您的问题,但与相比,它们绝对是性能更高的替代方案leaflet::addPolygons

使用Flatgeobuf格式:

根据来自的描述leafem::addFgb

Flatgeobuf可以逐块地流传输数据,以便地图的呈现或多或少是瞬时的。当数据仍在加载时,地图是响应式的,即使尚未渲染所有数据,弹出查询,缩放和平移也将起作用。

我认为数据集是线串,这就是为什么fillColor似乎被忽略的原因。

library(leaflet)
library(leafem)
library(shiny)

# via URL (data around 13mb)
url = "https://raw.githubusercontent.com/bjornharrtell/flatgeobuf/3.0.1/test/data/UScounties.fgb"

ui <- fluidPage(
  leafletOutput("mymap", width = "700px", height = "700px")
)

server <- function(input, output, session) {
  output$mymap <- renderLeaflet({
    leaflet() %>%
      addTiles() %>%
      leafem:::addFgb(
        url = url, group = "counties",
        label = "NAME", popup = TRUE,
        fillColor = "blue", fillOpacity = 0.6,
        color = "black", weight = 1) %>%
      addLayersControl(overlayGroups = c("counties")) %>%
      setView(lng = -105.644, lat = 51.618, zoom = 3)
  })
}

shinyApp(ui, server)

使用leafgl(WebGL-Renderer):

library(sf)
library(shiny)
library(leaflet)
library(leafgl)

plz <- st_read("C:/Users/user/Downloads/plz-gebiete.shp", layer = "plz-gebiete")

ui <- fluidPage(
  leafletOutput("mymap", width = "700px", height = "700px")
)

server <- function(input, output, session) {
  output$mymap <- renderLeaflet({
    leaflet() %>%
      addTiles() %>%
      addGlPolygons(data = plz, color = ~plz, popup = "note", group = "plz") %>% 
      addLayersControl(overlayGroups = "plz")
  })
}

shinyApp(ui, server)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

网址模板中的传单地图图块未在闪亮的应用程序中呈现

如何防止传单地图重置闪亮应用程序中的缩放?

使用滑杆清除闪亮应用程序中的传单标记

地图无法在带有传单和栅格的闪亮应用中渲染

如何在闪亮的应用程序中将传单地图的点击(事件)与绘图创建联系起来

从Shiny.io上托管的闪亮应用程序下载传单地图

部署闪亮的应用程序时,将传单地图下载为 png

Shiny Web 应用程序中的传单不显示地图

如何在Shiny应用程序的selectModUI中更新传单地图?

如何将传单js中的位置共享给其他应用程序,如谷歌地图

R Shiny应用程序中的传单地图图例不显示颜色

如何使 Dash 应用程序上的引导折叠元素中包含的传单地图的大小无效?

渲染在闪亮的应用程序中异步绘制图

R /发光:仅在闪亮的应用程序中需要时才渲染图的元素

在文档和嵌入式闪亮应用程序中渲染图像

渲染存储在 R 闪亮应用程序列表中的多个图

没有 img(src()) 的闪亮应用程序中的本地图像?

Plot.ly地图未在闪亮的应用程序中呈现

在传单中使用map_click选择多个项目,链接到闪亮应用程序(R)中的selectizeInput()

如何在 gulp/node 中预渲染 React 应用程序?

在Blazor服务器应用程序中检测服务器预渲染

为什么 react-snap 只在 SPA 应用程序中预渲染主页?

RMarkdown在闪亮的应用程序中

在WordPress中嵌入闪亮的应用程序

在闪亮的应用程序中重定向

如何预渲染使用 React 的单页应用程序?

如何预渲染多个Vue应用程序页面?

使用服务器端渲染在React PWA中缓存应用程序外壳

闪亮的外部传单地图