如何在Leaflet for R中基于addLayerControl()隐藏/切换图例

时间:2016-11-23 17:19:19

标签: r leaflet legend

我想知道如何基于Leaflet for R中的addLayerControl()来隐藏/切换图例?当切换选项层a时,addPolygons()不显示选项层b的数据,因为我可以使用GROUP。但是,addLegend()选项没有GROUP功能,因此当我选择组图层a(红色)时,我无法隐藏组图层b(蓝色)的图例:

enter image description here

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

你知道怎么做吗?

此致

里斯

2 个答案:

答案 0 :(得分:2)

此代码对我有用:

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来识别选择的组类型。在observeEvent()中,您可以使用if / else语句基于组创建图例。

答案 1 :(得分:2)

如果将来有人在考虑这个问题,那么有一种新的可行方法。

如果您正在使用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")

到上面代码块的末尾。