You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Folium中添加LayerControl与地图可视化选项的图层异常问题

Folium图层控制问题修复方案

问题根源

  1. 数据过滤图层无实际内容:仅创建了对应Insti的FeatureGroup容器,但没有往里面添加任何标记点,导致勾选复选框时地图无变化。
  2. 重复添加图层控件:两次调用folium.LayerControl().add_to(map),后添加的控件会覆盖之前的,最终仅保留最后一个视图选项,过滤选项被隐藏。

修复后的完整代码

import folium
import pandas as pd

data = [
        ['A', 24.8483945, 66.99847413, 'ASDF'],
        ['A', 24.84493504, 66.99694272, 'BSDF'],
        ['B', 24.84472664, 66.99510545, 'CSDF'],
        ['B', 24.84866494, 67.00017693, 'ASDF'],
        ['C', 24.84927827, 67.0010406, 'BSDF'],
        ['C', 24.84948272, 67.00271967, 'CSDF']
      ]
  
# 创建数据表格
df = pd.DataFrame(data, columns=['Insti', 'Lat', 'Long', 'IslCon'])

# 初始化地图,开启默认图层控制
map = folium.Map(location=[24.84472664, 66.99510545], zoom_start=15, control=True)

# 添加地图视图选项(瓦片图层)
folium.TileLayer('Stamen Terrain').add_to(map)
folium.TileLayer('Stamen Toner').add_to(map)

# 按机构分组创建FeatureGroup并填充标记点
features = {}
for insti in pd.unique(df["Insti"]):
    features[insti] = folium.FeatureGroup(name=insti)
    # 筛选当前机构的所有数据
    insti_rows = df[df['Insti'] == insti]
    # 给每个数据点添加标记
    for _, row in insti_rows.iterrows():
        features[insti].add_child(folium.Marker(
            location=[row['Lat'], row['Long']],
            tooltip=row['IslCon'],
            icon=folium.Icon(color='green', icon="bank", prefix='fa')
        ))
    features[insti].add_to(map)

# 仅添加一次图层控制,统一管理所有图层选项
folium.LayerControl(collapsed=False).add_to(map)

map

核心修复说明

  • 填充过滤图层内容:遍历每个机构分组,筛选对应数据并添加标记到专属FeatureGroup,确保勾选时能显示/隐藏对应点位。
  • 统一图层控件:所有图层添加完成后,仅调用一次LayerControl,保证地图视图选项和数据过滤选项同时显示在控件中。
  • 移除冗余默认图层:删除原代码中包含所有标记的fg组,避免和分组后的图层重复显示。

内容的提问来源于stack exchange,提问作者Ahmad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 19:35:24