#r #r-leaflet
#r #r-листовка
Вопрос:
Как я могу очистить маркеры, которые были добавлены через drawToolbar
on leaflet
map in shiny
? Если вы добавите маркер, а затем щелкните actionButton
, маркер останется на карте. Это ошибка? Я пробовал оба clearMarkers
, clearGroup
но ни один из них не сработал.
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, {
leafletProxy('map') %>%
clearMarkers() %>%
clearGroup("x")
})
}
shinyApp(ui, server)
Ответ №1:
Панель инструментов является частью output$map
объекта, созданного в начале. Чтобы удалить его, вам нужно присвоить новое значение output$map
, которое не содержит панели инструментов. Например,
library(shiny)
library(leaflet)
library(leaflet.extras)
ui <- fluidPage(
leafletOutput("map"),
actionButton("rm", "Remove markers")
)
server <- function(input, output, session) {
toolbar <- TRUE
init <- function() renderLeaflet({
leaf <- leaflet() %>% addTiles()
if (toolbar)
leaf <- leaf %>%
addDrawToolbar(targetGroup = "x")
leaf
})
output$map <- init()
observeEvent(input$rm, {
toolbar <<- !toolbar
output$map <- init()
leafletProxy('map') %>%
clearMarkers() %>%
clearGroup("x")
})
}
shinyApp(ui, server)
Вы должны иметь возможность вызвать removeDrawToolbar()
, чтобы избавиться от этого, но в этом коде есть ошибка, с перечисленными некоторыми обходными путями: https://github.com/bhaskarvk/leaflet.extras/issues/148
Комментарии:
1. Спасибо, на самом деле я не хочу удалять drawToolbar, только маркеры, добавленные с помощью панели инструментов, см. Мой ответ ниже.
Ответ №2:
Это решение, которое я придумал:
library(shiny)
library(leaflet)
library(leaflet.extras)
ui <- fluidPage(
leafletOutput("map"),
actionButton("rm", "Remove markers")
)
server <- function(input, output, session) {
init <- function() {
renderLeaflet({
leaf <-
leaflet() %>%
addTiles() %>%
addDrawToolbar()
bounds <- isolate({input$map_bounds})
if (!is.null(bounds)) {
center <- c("lat" = mean(c(bounds$north, bounds$south)),
"lng" = mean(c(bounds$east, bounds$west)))
leaf <-
leaf %>%
setView(lng = center[["lng"]],
lat = center[["lat"]],
zoom = isolate({input$map_zoom}))
}
leaf
})
}
output$map <- init()
observeEvent(input$rm, {
output$map <- init()
})
}
shinyApp(ui, server)
Он перерисовывает карту по actionButton
щелчку (спасибо @user2554330 за идею). Если есть решение без перерисовки карты, например, с clearMarkers()
помощью функции, мне было бы интересно.