如何防止传单地图在闪亮的应用程序中重置缩放?
How to prevent leaflet map from resetting zoom in shiny app?
我自己和其他人已经构建了一个在线应用程序原型,以协助交通规划人员优先安排自行车道的新资金:
https://robinlovelace.shinyapps.io/fixMyPath/
我们对结果感到满意,并且对 Shiny 无需编写任何一行 JavaScript 即可快速构建 Web 部署概念原型的能力印象深刻。但是,该应用程序有一个主要问题,您可以通过放大然后调整透明度滑块看到:每次执行此操作时缩放都会重置。因此,问题很简单:如何重写 server.R
以便地图不会重置其缩放设置?
整个应用程序可以在下面的 link 中看到,并且应该可以在任何 R 安装上重现,前提是你有正确的包(例如 rgdal、传单、ggmap):
https://github.com/nikolai-b/hackMyRoute/tree/master/R/fixMyPath
有关更多上下文,请参阅 here。
我有同样的问题,我想我找到了一些有用的东西:
按照 here on the Leaflet for R page and shown here on the SuperZip example 所述,使用 LeafletProxy
更改生成地图的方式。首先,尝试像这样设置 renderLeaflet
函数:
output$map = renderLeaflet(leaflet() %>%
addTiles(urlTemplate = "http://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}.png") %>%
setView(...) # add the parameters as appropriate set the view or use fitBounds
然后使用带有 LeafletProxy
的 observe
函数绘制线和圆,如下所示:
observe({
leafletProxy("map") %>%
clearShapes() %>%
addPolygons(layerId= "layer1"
, data = leeds
, fillOpacity = 0.4
, opacity = (input$transp_zones)*.4
, fillColor = leeds$color_pcycle
) %>%
addPolyLines(layerId = "layer2"
, data = lfast, color = "red"
, opacity = input$transp_fast
, popup = sprintf("<dl><dt>Distance </dt><dd>%s km</dd><dt>Journeys by bike</dt><dd>%s%%</dd>", round(flows$fastest_distance_in_m / 1000, 1), round(flows$p_cycle * 100, 2))
) %>%
# and so on in a similar fashion for the rest of your shapes
})
您需要添加层 ID 以确保在更改参数时新形状替换旧形状。这样你就不需要你拥有的mapOptions(zoomToLimits = "first")
。
我自己和其他人已经构建了一个在线应用程序原型,以协助交通规划人员优先安排自行车道的新资金:
https://robinlovelace.shinyapps.io/fixMyPath/
我们对结果感到满意,并且对 Shiny 无需编写任何一行 JavaScript 即可快速构建 Web 部署概念原型的能力印象深刻。但是,该应用程序有一个主要问题,您可以通过放大然后调整透明度滑块看到:每次执行此操作时缩放都会重置。因此,问题很简单:如何重写 server.R
以便地图不会重置其缩放设置?
整个应用程序可以在下面的 link 中看到,并且应该可以在任何 R 安装上重现,前提是你有正确的包(例如 rgdal、传单、ggmap):
https://github.com/nikolai-b/hackMyRoute/tree/master/R/fixMyPath
有关更多上下文,请参阅 here。
我有同样的问题,我想我找到了一些有用的东西:
按照 here on the Leaflet for R page and shown here on the SuperZip example 所述,使用 LeafletProxy
更改生成地图的方式。首先,尝试像这样设置 renderLeaflet
函数:
output$map = renderLeaflet(leaflet() %>%
addTiles(urlTemplate = "http://{s}.tile.thunderforest.com/cycle/{z}/{x}/{y}.png") %>%
setView(...) # add the parameters as appropriate set the view or use fitBounds
然后使用带有 LeafletProxy
的 observe
函数绘制线和圆,如下所示:
observe({
leafletProxy("map") %>%
clearShapes() %>%
addPolygons(layerId= "layer1"
, data = leeds
, fillOpacity = 0.4
, opacity = (input$transp_zones)*.4
, fillColor = leeds$color_pcycle
) %>%
addPolyLines(layerId = "layer2"
, data = lfast, color = "red"
, opacity = input$transp_fast
, popup = sprintf("<dl><dt>Distance </dt><dd>%s km</dd><dt>Journeys by bike</dt><dd>%s%%</dd>", round(flows$fastest_distance_in_m / 1000, 1), round(flows$p_cycle * 100, 2))
) %>%
# and so on in a similar fashion for the rest of your shapes
})
您需要添加层 ID 以确保在更改参数时新形状替换旧形状。这样你就不需要你拥有的mapOptions(zoomToLimits = "first")
。