2016-11-23 76 views
2

我想知道如何隱藏/切換基於傳單R中的addLayerControl()的圖例?當選項層a切換時,選項層b的數據不會由addPolygons()顯示,因爲我可以使用GROUP。然而,addLegend()選項沒有GROUP功能,所以我不能夠隱藏圖層組B(藍色)的傳說,當我選擇的組層(紅色):如何隱藏/切換基於傳單中的addLayerControl()傳說R

enter image description here

來源:https://gis.stackexchange.com/questions/214773/how-to-hide-toggle-legends-with-layer-controls-in-leaflet-for-r

你有什麼想法如何做到這一點?

問候,

里斯

回答

1

此代碼爲我工作:

observeEvent(input$mymap_groups,{ 
    mymap <- leafletProxy("mymap", data = SalesMap) 
    mymap %>% clearControls() 
    if (input$mymap_groups == '1') { 
     mymap %>% addLegend(position="bottomright", pal=pal1, values=SalesMap$SALES, title="a") 
    } 
    else if (input$mymap_groups == '2') { 
     mymap %>% addLegend(position="bottomright", pal=pal2, values=SalesMap$Bonnen, title="b") 
    } 
    }) 

您可以使用輸入$ mymap_groups,以確定什麼樣的羣體是selected.In的observeEvent(),您可以使用if/else語句來創建基於組的圖例。

1

如果有人在將來看這個,有一種新的可行的方法。

如果您使用的開發/的leaflet包Github上版本,addLegend()現在支持grouplayerId參數。

(運行命令devtools::install_github('rstudio/leaflet')安裝)

即使是最新的版本CRAN(1.1.0)支持layerID

假設你去開發版本,下面的代碼應該工作:

leaflet() %>% 
    #Polygon Layers 
    addPolygons(data = exampleDataOne, group = "Group A") %>% 
    addPolygons(data = exampleDataTwo, group = "Group B") %>% 

    #Legend Layers 
    addLegend(values = exampleValuesOne, group = "Group A", 
       position = "bottomright") %>% 
    addLegend(values = exampleValuesTwo, group = "Group B", 
       position = "bottomright") %>% 

    #Layers Control 
    addLayersControl(overlayGroups = c("Group A","Group B"), 
       options = layersControlOptions(collapsed = FALSE)) 

這應該有當相應層是活動僅顯示傳說預期的效果。

一個潛在的問題是,默認情況下,所有leaflet圖層都處於活動狀態。如果你有重疊的多邊形,這可能會導致視覺吸引力較差的地圖。而且,如果你有多個傳說,這也將是一個問題。

你可以做的是使用hideGroup()函數。

如果你想只Group A從上面的例子在開始活躍,您可以添加

%>% hideGroup("Group B")

上面的代碼塊的結尾。

+0

不錯的解決方案,但重要的是要注意,它似乎不適用於'addLayersControl'中的'overlayGroups'選項 – Bastien