在R Shiny Leaflet Map中向观察者添加延迟

时间:2016-09-06 17:06:00

标签: r leaflet shiny

我有一个R Shiny应用,它使用leaflet来渲染地图。当用户平移/缩放地图时,应用程序将使用地图边界并使用observe函数加载相关数据。

以下是代码的简化版本,我已删除了选择数据的代码,因为它与此问题无关。

# Start of Shiny Server Code
shinyServer(function(input, output) {
#Render Map
  output$mymap <- renderLeaflet({
    leaflet() %>%
      # set centre and extent of map
      setView(lng = -0.1, lat = 51.5, zoom = 9) %>%
      # set base map
      addProviderTiles("Stamen.TonerLite", options = providerTileOptions(noWrap = TRUE)) 

  })
    observe({
        mapbounds <- input$mymap_bounds
        mapzoom <- input$mymap_zoom
        if(is.null(input$mymap_bounds)){
            # no map bounds so render nothing
        } 
        else if(mapzoom >= 11 & mapzoom <= 13){
            # Zoomed out so render one thing based on map bounds
        }
        else if(mapzoom >= 14){
            # Zoomed in so show render something else  based on map bounds
        }
        else
            # really zoomed out so render nothing

        # plot map
        proxy <- leafletProxy("mymap")
        # remove old layers
        proxy %>% clearShapes()
        #render new layers
        proxy %>% addPolygons(data = data)

      })
})

这很好用,但是当用户在地图上快速平移/缩放时,应用会滞后,因为每次地图边界发生变化时,它会加载一整套不同的地图视图。这可能会导致崩溃并下载大量不必要的数据。

是否可以调整观察功能,以便观察之间有短暂的延迟,或者更好的方法来检测用户平移和已停止平移并希望加载数据的用户之间的差异?

1 个答案:

答案 0 :(得分:0)

您可以使用shiny::debounce

例如

bound_change < - reactive({input$mymap_bounds})
bound_change_delay < - debounce(bound_change, 1000)

observe({
        mapbounds <- bound_change_delay()