код easyButton для удаления определенных слоев overlayGroup - PullRequest
0 голосов
/ 23 мая 2019

Я использую буклет 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 я определяю только метки, видимые на элементах управления. Я могу придумать три концептуальных способа решения этой проблемы:

  1. написать функцию, которая возвращает слои на основе их меток, а затем использовать ее для передачи слоев в Map.removeLayer().
  2. продолжайте использовать map.eachLayer(), но сверяйте метки каждого слоя по списку тех, которые будут удалены
  3. Предскажите, как пакет R Leaflet будет называть каждую переменную слоя и использовать их

Я не достаточно опытен с javascript или leaflet.js, чтобы понять, как реализовать любой из них, но я надеюсь, что этот вопрос будет прост для кого-то, кто это делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...