我正在使用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代码时,我只定义了控件上可见的标签。我可以想到三种解决此问题的方法:
Map.removeLayer()
。map.eachLayer()
,但对照要删除的标签列表检查每个图层的标签我对javascript或leaflet.js不够熟练,无法弄清楚如何实现其中任何一个,但是我希望这个问题对那些确实是一个人来说很简单。