开发者问题收集

一旦用户移动了 Leaflet 地图,如何返回其在 Shiny 中的位置?

2020-03-09
737

问题的背景如下:

我有一个闪亮的应用程序,可以在传单映射上呈现数据。这些数据可以通过不同的方式过滤和显示。但是,当用户缩放和/或移动地图然后过滤数据时,地图将恢复回初始地图视图:

775374527

我正在寻找的东西因为是返回地图位置的某种方式,以便当数据在代理传单函数中更新时,我也可以设置视图。以下是我要实现的目标(我已经组装了相当于 输入$ mymap_click )的动作。

8471111307
1个回答

地图初始化后,您可以通过 input$mymap_centerinput$mymap_zoom 访问地图的当前状态(如果您愿意,可以访问 input$mymap_bounds

您只需注意 2 件事:

  • 您必须检查初始化是否已完成,如果没有,请提供手动参数(否则 Shiny 将不知道要使用的起始位置)
  • 除非您 isolate 查找,否则每次更改视图时,您的地图都会重新渲染,这可能不是您想要的(这会让您的应用非常慢,并且对用户来说无法使用)

所以把所有这些放在一起,我认为这段代码应该可以满足您的要求:

output$mymap <- renderLeaflet({
  isolate({
    if ("mymap_center" %in% names(input)) {
      mapparams <- list(center = input$mymap_center,
                        zoom = input$mymap_zoom)
    } else {
      mapparams <- list(center = list(lng=0, lat=30),
                      zoom = 4) #setting the view over ~ center of North America
    }
  })
  leaflet() %>%
      setView(lng = mapparams$center$lng, lat = mapparams$center$lat, zoom = mapparams$zoom)  %>% 
      addTiles(options = providerTileOptions(noWrap = TRUE)) 
})
Emil Bode
2020-03-20