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

问题描述 投票:0回答:1

我有一个使用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)

      })
})

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

是否有可能调整观察功能,以使观察之间的延迟短,或者甚至更好的一种方法来检测用户在四处摇摄和停止摇摄并希望加载数据的用户之间的差异?

r leaflet shiny
1个回答
0
投票

您可以使用shiny::debounce

例如

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

observe({
        mapbounds <- bound_change_delay()
© www.soinside.com 2019 - 2024. All rights reserved.