2

Leaflet 的 markercluster 插件提供chunkProgress回调函数,提供有关加载数据点的信息,我想将该函数的信息合并到Shiny 的进度指示器中,以显示有关加载的数据点数量的信息。

示例应用

该应用程序代码借鉴了Leaflet for RShiny页面提供的官方示例。

library(shiny)
library(leaflet)

r_colors <- rgb(t(col2rgb(colors()) / 255))
names(r_colors) <- colors()
noMarkers <- 200

ui <- fluidPage(leafletOutput("mymap"),
                p(),
                actionButton("recalc", "New points"))

server <- function(input, output, session) {
    points <- eventReactive(input$recalc, {
        cbind(rnorm(noMarkers) * 2 + 13, rnorm(noMarkers) + 48)
    }, ignoreNULL = FALSE)

    output$mymap <- renderLeaflet({
        withProgress(message = 'Making plot', value = 0, {

            # How can I replace noMarkers with dynamic values 
            # passed from the callback function
            incProgress(1 / noMarkers, detail = paste("Doing point", noMarkers))

            leaflet() %>%
                addProviderTiles(providers$Stamen.TonerLite,
                                 options = providerTileOptions(noWrap = TRUE)) %>%
                addMarkers(data = points(),
                           clusterOptions = markerClusterOptions())
        })
    })
}

shinyApp(ui, server)

问题

根据可通过标记集群页面获得的信息:

chunkProgress:在每个 chunkInterval 结束时调用的回调函数。通常用于实现进度指示器,例如 RealWorld 50k 中的代码。默认为null. 参数: 已处理标记的数量 添加的标记总数 已用时间(以毫秒为单位)

chunkProgress功能应具有所有必要的信息。特别是进度条的结构将被调用为:

incProgress(Number of processed markers / Total number of markers, 
            detail = paste("Doing point", Number of processed markers))

如何访问这些值并使它们可用于incProgress调用并确保incProgress在地图绘制期间重复调用?


旁注

Leaflet 提供定制插件,方便显示进度加载指示器。我对使用 Shiny 的“原生”机制来显示进度条的解决方案感兴趣,就像在实际地图中一样,我还有其他更新进度条的功能。

4

0 回答 0