【问题标题】:FeatureGroup layer control in Folium - only one active layerFolium 中的 FeatureGroup 图层控制 - 只有一个活动图层
【发布时间】:2020-04-21 14:20:01
【问题描述】:

我正在尝试在 Choropleth 地图上显示几个图层,该地图以 Stamen Terrain 作为基础图层并将图层显示为 FeatureGroup。 这是我没有覆盖控制的初始代码:

map = folium.Map(location=[38.58, 0], zoom_start=3, tiles="Stamen Terrain")

fg_tc = folium.FeatureGroup(name="Totalc")

fg_tc.add_child(folium.GeoJson(data=open('world.json', 'r',
                                          encoding='utf-8-sig').read(),
                               style_function=lambda x: {
                                   'fillColor': get_at_once(x['properties']['NAME'], 'totalc'),
                                   'color': 'black',
                                   'weight': 1,
                                   'dashArray': '5, 5',
                                   'fillOpacity': 0.75}))

fg_nc = folium.FeatureGroup(name="New", show=False)

fg_nc.add_child(folium.GeoJson(data=open('world.json', 'r',
                                          encoding='utf-8-sig').read(),
                               style_function=lambda x: {
                                   'fillColor': get_at_once(x['properties']['NAME'], 'new'),
                                   'color': 'black',
                                   'weight': 1,
                                   'dashArray': '5, 5',
                                   'fillOpacity': 0.75}))

fg_td = folium.FeatureGroup(name="Totald", show=False)

fg_td.add_child(folium.GeoJson(data=open('world.json', 'r',
                                          encoding='utf-8-sig').read(),
                               style_function=lambda x: {
                                   'fillColor': get_at_once(x['properties']['NAME'], 'totald'),
                                   'color': 'black',
                                   'weight': 1,
                                   'dashArray': '5, 5',
                                   'fillOpacity': 0.75}))

fg_ac = folium.FeatureGroup(name="Active", show=False)

fg_ac.add_child(folium.GeoJson(data=open('world.json', 'r',
                                          encoding='utf-8-sig').read(),
                               style_function=lambda x: {
                                   'fillColor': get_at_once(x['properties']['NAME'], 'active_cases'),
                                   'color': 'black',
                                   'weight': 1,
                                   'dashArray': '5, 5',
                                   'fillOpacity': 0.75}))


map.add_child(fg_tc)

map.add_child(fg_nc)

map.add_child(fg_td)

map.add_child(fg_ac)

map.add_child(folium.LayerControl())

map.save("map1.html")

我的问题是 FeatureGroup 图层可以通过复选框选择,允许在特定时间选择多个图层。就我而言,我需要一次将 Stamen Terrain 显示为背景,并且只有一个活动图层,但我不知道该怎么做。

我也尝试控制叠加层,但只有一个图层可见,并且我失去了雄蕊地形作为背景,即图层由单选按钮控制,但只有一组包含雄蕊地形和数据 FeatureGroup 图层...

知道如何根据需要显示:雄蕊地形作为背景,同时只有一个活动数据层吗? 我不固定使用 FeatureGroup,但目前我的知识仅限于此,到目前为止,我的 google fu 让我失望了......

谢谢!

附言这里还有一些带有试用版的打印屏幕:1&2 没有覆盖控制,可以看到在选择更多图层的“2”中发生了什么。 3&4 使用 overlay=False,然后只能激活一层。

printscreen with the try out results

【问题讨论】:

  • 请提供完整数据。谢谢。
  • 什么意思?我还能提供什么?很高兴...

标签: python folium choropleth


【解决方案1】:

我有类似的问题。如果您还没有弄清楚,这或多或少是我所做的:

map = folium.Map(location=[ , ], zoom_start= , tiles=None)
base_map = folium.FeatureGroup(name='Basemap', overlay=True, control=False)
folium.TileLayer(tiles='OpenStreetMap').add_to(base_map)
base_map.add_to(map)

layer1 = folium.FeatureGroup(name='layer1', overlay=False)
layer1.add_to(map)

这为我解决了这个问题。

【讨论】:

  • 请看我的附言。以及那里的示例 3 和 4。你提议的是隐藏底图。我想要的结果是保留底图,并让其余图层具有单选按钮而不是复选框...
  • 嗨,它就是这样做的。作为您使用的平铺的基础层,您设置为 overlay=True,因此它可以与其他层重叠,例如您的示例中的第 1 层,但您设置 control=False,因此它始终处于打开状态,然后您设置的其他层 overlay=False和 control=True,所以你有像 3&4 一样的单选按钮,但是因为基础层设置为 overlay=True,所以它总是在那里。所以你有 geojson 层的单选按钮,而基础层没有选择,因为它总是打开的。它对我有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 2020-05-23
相关资源
最近更新 更多