Leaflet R中的分组图层控制

10

Leaflet JS有一个插件可以在图层控制中对图层进行分组。 https://github.com/ismyrnow/Leaflet.groupedlayercontrol

但是,在Leaflet R中似乎不存在这个插件,但我发现了这篇文章,它说可以通过某种方式在Leaflet R中使用任意的Leaflet JS插件。https://gist.github.com/jcheng5/c084a59717f18e947a17955007dc5f92

我尝试将此方法应用于Leaflet.groupedlayercontrol插件,但未成功。您是否知道我可能如何使用此插件或任何其他方法来在由Leaflet R生成的图层控制中对我的图层进行分组?谢谢。

2个回答

7
您绝对可以在leafletR中进行图层控制。如果您的版本没有此功能,则需要更新,可能来自最新的GITHUB版本。
我正在制作一个具有图层控件的地图,如照片所示。以下是使其发生的代码。正如您所看到的,每个addPolygons都有一个group=" A Name",这是您在我的图片上的复选框中标识层的位置。
map<-leaflet()%>%
addTiles()%>%
addPolygons(data = plotMerge,
            fillColor = ~pal(plotMerge$incomePerCapita),
            color = "#000000", #this is an outline color
            fillOpacity = 0.8,
            group="Tract",
            weight = 0.2,
            popup=popup)%>%
addPolygons(data = countyPoly,
            fillColor = "transparent",
            color = "#000000", #this is an outline color
            fillOpacity = 0.8,
            group="County",
            popup=countyPoly@data$NAME,
            weight = 2)%>%
addPolygons(data = townPoly,
            fillColor = "transparent",
            color = "#000000", #this is an outline color
            fillOpacity = 0.8,
            group="Town",
            weight = .8,
            popup=townPoly@data$TOWN)%>%
addPolygons(data = rphnPoly,
            fillColor = "transparent",
            color = "#000000", #this is an outline color
            fillOpacity = 0.8,
            group="Public Health Region",
            weight = .8,
            popup=rphnPoly@data$PHN)%>%
addLegend(pal = pal,
          values  = plotMerge$incomePerCapita,
          position = "bottomright",
          title = "State-wide Income Percentiles",
          labFormat = labelFormat(digits=1))%>%
addLayersControl(
          overlayGroups =c("County", "Town", "Public Health Region", "Tract"),
          options = layersControlOptions(collapsed=FALSE)
          )
saveWidget(map, file="map1.html", selfcontained=FALSE)

这是它的外观: ACS社会脆弱指数由R & LEaflet制作 您还可以添加其他控件,请在此处查看: Leaflet R Hidden Layers

4
谢谢您的回复。然而,这不是我要找的内容。我正在寻找一种将多个图层放置在同一类别中并能够在图例上显示该类别名称的方法,就像此页面中所示:https://github.com/ismyrnow/Leaflet.groupedlayercontrol - CYC
这是同样的事情,我从未在叠加层上使用单选按钮,只在基础层上使用过。但是您可以创建一个县级组,并将其分配给1、2、3、4行、多边形或标记图层,它们都将由单个复选框控制。这就像在HTML中创建类或ID以通过CSS或JavaScript进行控制。那个框不是图例,而是选择工具。进入图例的内容是通过如何编写图例代码来查看数据进行配置的,可能需要在leaflet之外进行一些工作,以使进入图例的信息反映出您的组。 - sconfluentus
1
CYC,你能否发布一下你编写的代码,尝试一下Leaflet.groupedlayercontrol插件? - YGS

4

我知道这是一个老问题,但我在其他地方没有找到好的答案 - 这可能有助于未来的读者。

这里有一个带注释的代码示例,解释了代码:

#load library
library(tidyverse)
library(leaflet)

#load data
data("quakes")

#map all points
# quakes %>% 
#   leaflet() %>% 
#   addProviderTiles(providers$CartoDB.Positron) %>% 
#   addCircleMarkers(lng = ~long, lat = ~lat, radius = 1)

#create a grouping variable -- this can be whatever you want to filter by 
quakes <- quakes %>% 
  mutate(groups = case_when(
    stations < 30 ~ 1,
    stations < 50 ~ 2,
    TRUE ~ 3
  ))


#function to plot a map with layer selection 
map_layers <- function() {

  #number of groups
  k <- n_distinct(quakes$groups)

  #base map
  map <- leaflet() %>%
    addProviderTiles(providers$CartoDB.Positron)

  #loop through all groups and add a layer one at a time
  for (i in 1:k) {
    map <- map %>% 
      addCircleMarkers(
        data = quakes %>% filter(groups == i), group = as.character(i),
        lng = ~long, lat = ~lat, radius = 1
      )
  }

  #create layer control
  map %>% 
    addLayersControl(
      overlayGroups = c(1:k),
      options = layersControlOptions(collapsed = FALSE)) %>% 
    hideGroup(as.character(c(2:k))) #hide all groups except the 1st one

}

#plot the map
map_layers()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接