easyButton代码删除特定的overlayGroup图层

时间:2019-05-23 20:26:28

标签: javascript r leaflet r-leaflet

我正在使用R Leaflet制作具有多个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不够熟练,无法弄清楚如何实现其中任何一个,但是我希望这个问题对那些确实是一个人来说很简单。

0 个答案:

没有答案