一旦用户移动了 Leaflet 地图,如何返回其在 Shiny 中的位置?
2020-03-09
737
问题的背景如下:
我有一个闪亮的应用程序,可以在传单映射上呈现数据。这些数据可以通过不同的方式过滤和显示。但是,当用户缩放和/或移动地图然后过滤数据时,地图将恢复回初始地图视图:
775374527
我正在寻找的东西因为是返回地图位置的某种方式,以便当数据在代理传单函数中更新时,我也可以设置视图。以下是我要实现的目标(我已经组装了相当于
输入$ mymap_click
)的动作。
8471111307
1个回答
地图初始化后,您可以通过
input$mymap_center
和
input$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