Я использую буклет R для создания карты с несколькими слоями overlayGroup, которые пользователь может проверять или снимать по одному за раз. Я подозреваю, что многие пользователи захотят скрыть подмножество этих слоев, поэтому я хотел бы добавить easyButton, который автоматически отменяет выбор нескольких определенных слоев.
Мне удалось написать некоторый код для easyButton, который скрывает все слои - как отмена выбора наложенных слоев, так и избавление от базовой карты. Это явно не то, чего я хочу, но заставляет меня верить, что это должно быть возможно.
require(leaflet)
require(dplyy)
leaflet() %>%
addTiles() %>%
addMarkers(data = filter(quakes, mag < 5), group = "<5") %>%
addMarkers(data = filter(quakes, mag > 5 & mag < 6), group = "5-6") %>%
addMarkers(data = filter(quakes, mag > 6), group = ">6") %>%
addLayersControl(overlayGroups = c("<5", "5-6", ">6")) %>%
addEasyButton(easyButton(
icon="fa-square-o", title="uncheck all",
onClick=JS("
function(btn, map) {map.eachLayer(function(layer){map.removeLayer(layer)})}
")
))
Моя текущая проблема заключается в том, что для удаления определенных слоев мне нужно передать имя переменной, связанной со слоем, в Map.removeLayer()
. Однако на самом деле я не знаю имен ни одного из моих слоев, потому что для написания кода R я определяю только метки, видимые на элементах управления. Я могу придумать три концептуальных способа решения этой проблемы:
- написать функцию, которая возвращает слои на основе их меток, а затем использовать ее для передачи слоев в
Map.removeLayer()
.
- продолжайте использовать
map.eachLayer()
, но сверяйте метки каждого слоя по списку тех, которые будут удалены
- Предскажите, как пакет R Leaflet будет называть каждую переменную слоя и использовать их
Я не достаточно опытен с javascript или leaflet.js, чтобы понять, как реализовать любой из них, но я надеюсь, что этот вопрос будет прост для кого-то, кто это делает.