2015-11-01 72 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