【问题标题】:How to hide/toggle legends based on addLayerControl() in Leaflet for R如何在 Leaflet for R 中基于 addLayerControl() 隐藏/切换图例
【发布时间】:2016-11-23 17:19:19
【问题描述】:

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

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

你知道怎么做吗?

问候,

乔里斯

【问题讨论】:

    标签: r leaflet legend


    【解决方案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")

    到上面代码块的末尾。

    【讨论】:

    • 不错的解决方案,但重要的是要注意它(似乎)不适用于addLayersControl中的overlayGroups选项
    • 虽然这个解释非常清晰和简洁,但它对我来说并不适用于标记。当我为addCircles()addLegend() 图层分配相同的组名时,比如Group A,那么%>% hideGroup("Group A") 操作只会隐藏标记,它不会使图例消失。我很困惑。
    【解决方案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")
        }
      })
    

    您可以使用 input$mymap_groups 来识别选择了哪种类型的组。在 observeEvent() 中您可以使用 if/else 语句来创建基于组的图例。

    【讨论】:

    • 对于查看此答案的人:这具有将图层保持为 baseGroups() (单选按钮)的优点,但仅当传单用于闪亮时。
    猜你喜欢
    • 1970-01-01
    • 2016-08-03
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多