2015-11-01 67 views
3

是否有隐藏在某处的功能来检索小册子地图上当前可用的所有layerIds或群组?我很确定使用JavaScript界面​​这将会相当简单,但我还没有找到使用R leaflet API的解决方案。从小册子获取所有图层ID或群组

上下文是一个闪亮的应用程序,可以连续添加图层。我正在辩论维护一个reactiveValues并在适当的时候用每个group/layerId更新它,但最终会成为一堆额外的编码/观察者。有没有一种功能或简单的方法来获得组或层次标识,或者甚至更好?

+0

事实上,在香草JavaScript中,您可以简单地使用图层组作为“代理”,将所有其他图层添加到它而不是地图中,然后使用[getLayers()](http://leafletjs.com/ #的reference.html图层组-getlayers)。尽管如此,一些控件和插件仍然会直接添加到地图中。 – ghybs

回答

1

你可以使用的L.MapeachLayer方法来迭代各层:

迭代过的地图的层,任选地指定所述迭代器功能的上下文。

http://leafletjs.com/reference.html#map-eachlayer

+1

这将是伟大的,但无法弄清楚如何在R中做到这一点。无论如何+1,我可能不得不使用javascript,我想。 – jenesaisquoi

2

如果你有一张地图

m <- leaflet() %>% addTiles() %>% 
    addPopups(-122.327298, 47.597131, content, layerId = "my layer id", 
       options = popupOptions(closeButton = TRUE) 
    ) 

然后你可以从

m$x$calls[[2]]$args[[4]] 

[1] "my layer id" 

得到layerId的对于与引进多layerIds和群体更广泛的图M多种方法(如addMarkers,addCircles等)尝试使用

l <- lapply(lapply(m$x$calls, function(x) x[[2]]), function(x) x[4][[1]]) 
layerIds <- unlist(l[sapply(l, function(x) {class(x) != "list" & !is.null(x)})]) 

g <- lapply(lapply(m$x$calls, function(x) x[[2]]), function(x) x[5][[1]]) 
groupIds <- unlist(g[sapply(g, function(x) {class(x) != "list" & !is.null(x)})]) 
+1

如果您在闪亮的应用程序中使用传单代理,是否可以执行此项工作? – nate