Shiny中如何清除Leaflet的drawToolbar添加的标记?点击按钮无效
解决Shiny中Leaflet DrawToolbar标记无法清除的问题
这不是bug哦,是你用错了清除绘制元素的方法~通过addDrawToolbar添加的标记(以及其他绘制图形)属于Leaflet.draw的专属绘制层,普通的clearMarkers()和clearGroup()对它们不起作用,原因如下:
clearMarkers()只能清除通过addMarkers()这类普通标记函数添加的元素,管不到DrawToolbar创建的绘制标记;- 虽然你设置了
targetGroup = "x",但DrawToolbar的元素并不会自动归入这个分组来被clearGroup()识别。
正确的做法是使用leaflet.extras包提供的clearDrawFeatures()函数,它专门用来清除所有通过DrawToolbar绘制的图形。
修改你的服务器端代码即可解决问题:
library(shiny) library(leaflet) library(leaflet.extras) ui <- fluidPage( leafletOutput("map"), actionButton("rm", "Remove markers") ) server <- function(input, output, session) { output$map <- renderLeaflet({ leaflet() %>% addTiles() %>% addDrawToolbar(targetGroup = "x") }) observeEvent(input$rm, { # 替换原来的clearMarkers和clearGroup,改用clearDrawFeatures leafletProxy('map') %>% clearDrawFeatures() }) } shinyApp(ui, server)
额外小技巧
如果你只想清除特定类型的绘制元素(比如只清标记,保留多边形),可以给clearDrawFeatures()传featureType参数:
leafletProxy('map') %>% clearDrawFeatures(featureType = "marker")
内容的提问来源于stack exchange,提问作者user5580950
相关产品推荐
相关产品推荐

