从 Shiny 中渲染的传单地图中删除缩放控制
2018-02-06
2109
在设置地图时,Leaflet 提供了一个隐藏缩放控件的选项
leaflet(options = leafletOptions(zoomControl = FALSE)
但是,我想在已经创建地图后调用此选项,以便用户可以下载不带缩放控件的地图,而我无需从头开始重新创建不同版本的地图。
这是我目前应用程序的简单版本:
library(shiny)
library(tidyverse)
library(leaflet)
library(mapview)
ui <- fluidPage(
fluidPage(
leafletOutput(outputId = "map"),
downloadButton(outputId = "save")
)
)
server <- function(input, output, session) {
map <- reactive({
leaflet() %>%
addTiles()
})
output$map <- renderLeaflet({
map()
})
output$save <- downloadHandler(
filename = "map.jpeg",
content = function(file){
latRng <- range(input$map_bounds$north,
input$map_bounds$south)
lngRng <- range(input$map_bounds$east,
input$map_bounds$west)
map() %>%
setView(lng = (lngRng[1] + lngRng[2])/2,
lat = (latRng[1] + latRng[1])/2,
zoom = input$map_zoom) %>%
### HERE ###
mapshot(file = file)
}
)
}
shinyApp(ui, server)
我希望能够在注释了
### HERE ###
的位置添加一行代码,以关闭缩放控件。在我的实际代码中,显示的地图非常复杂,有很多选项,我不想为了在首次调用
leaflet()
时删除缩放控件而将所有代码重复两次。
谢谢
1个回答
您可以这样做:
library(shiny)
library(tidyverse)
library(leaflet)
library(mapview)
ui <- fluidPage(
fluidPage(
leafletOutput(outputId = "map"),
downloadButton(outputId = "save")
)
)
server <- function(input, output, session) {
map <- reactive({
leaflet() %>%
addTiles()
})
output$map <- renderLeaflet({
map()
})
output$save <- downloadHandler(
filename = "map.jpeg",
content = function(file){
latRng <- range(input$map_bounds$north,
input$map_bounds$south)
lngRng <- range(input$map_bounds$east,
input$map_bounds$west)
m = map() %>%
setView(lng = (lngRng[1] + lngRng[2])/2,
lat = (latRng[1] + latRng[1])/2,
zoom = input$map_zoom)
m$x$options = append(m$x$options, list("zoomControl" = FALSE))
mapshot(m, file = file)
}
)
}
shinyApp(ui, server)
这将在创建地图后更新传单选项。我将把它合并到
mapshot
函数中,以便选择性地删除 zoomControl。
TimSalabim
2018-02-07