如何在保存Mapview/Leaflet地图前移除缩放与图层按钮?
解决方案
1. 先解决mapshot报错问题
报错提示requireNamespace("webshot", quietly = TRUE) is not TRUE,是因为缺少必要的依赖包和工具,执行以下代码安装即可:
# 安装webshot包 install.packages("webshot") # 安装PhantomJS(webshot依赖的截图工具) webshot::install_phantomjs()
2. 移除地图的缩放和图层控件(界面显示+保存PNG都生效)
方法一:直接从地图对象移除控件(推荐)
不需要用CSS隐藏,直接在生成地图时就删掉这些控件,不管是界面展示还是保存成PNG,都不会出现按钮:
library(shiny) library(mapview) library(leaflet) library(webshot) ui <- fluidPage( actionButton("print_map", "Print Map"), leafletOutput("mymap") ) server <- function(input, output, session) { output$mymap <- renderLeaflet({ # 从mapview生成的地图里移除缩放、图层控件 mapview(breweries)@map %>% removeControl("zoomControl") %>% removeControl("layersControl") }) observeEvent(input$print_map, { # 直接保存处理好的地图即可 mapshot(output$mymap, file = "map_zoom.png") }) } shinyApp(ui, server)
方法二:界面用CSS隐藏,保存时强制移除控件
如果偏好用CSS隐藏界面上的按钮,保存时要确保mapshot也同步移除控件,避免截图里出现按钮:
library(shiny) library(mapview) library(leaflet) library(webshot) ui <- fluidPage( tags$head( tags$style(HTML(" /* 界面上隐藏缩放和图层按钮 */ .leaflet-control-zoom { display: none; } .leaflet-control-layers { display: none; } ")) ), actionButton("print_map", "Print Map"), leafletOutput("mymap") ) server <- function(input, output, session) { output$mymap <- renderLeaflet({ mapview(breweries)@map }) observeEvent(input$print_map, { # 保存时明确指定要移除的控件 mapshot(output$mymap, file = "map_zoom.png", remove_controls = c("zoomControl", "layersControl")) }) } shinyApp(ui, server)
关键提示
mapview生成的地图默认自带zoomControl(缩放控件)和layersControl(图层控件),用removeControl()直接操作地图对象,能从根源上移除这些控件。mapshot的remove_controls参数需要对应控件的默认ID,Leaflet里缩放控件ID是zoomControl,图层控件ID是layersControl。
内容的提问来源于stack exchange,提问作者Salvador
相关产品推荐
相关产品推荐

