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

基于大洲与国家列值的Folium交互式过滤可视化实现求助

实现GeoDataFrame的交互式过滤与Folium可视化

需求说明

基于Natural Earth矢量数据的GeoDataFrame(含continent和name列),构建两级交互下拉框:

  • 第一级选择大洲,第二级动态加载对应大洲的国家列表
  • 选择国家后,在Folium地图上展示该国家的位置
  • 最终可将交互式Notebook保存为HTML文件

修正后的完整代码

import geopandas as gpd
import ipywidgets as widgets
from IPython.display import display
import folium

# 加载Natural Earth数据
df = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres"))
# 保留需要的列:大洲、国家名、几何信息
df = df[['continent', 'name', 'geometry']]

# 初始化输出组件,用于展示地图
out = widgets.Output(layout={'border': '1px solid #ccc'})

# 第一级下拉框:选择大洲
continent_dropdown = widgets.Dropdown(
    options=df['continent'].unique().tolist(),
    value=df['continent'].unique()[0],
    description='选择大洲:',
    disabled=False,
)

# 第二级下拉框:选择国家(初始为空,后续动态更新)
country_dropdown = widgets.Dropdown(
    options=[],
    description='选择国家:',
    disabled=True,
)

# 根据选中的大洲更新国家下拉框选项
def update_countries(change):
    selected_continent = change['new']
    # 过滤出当前大洲的国家
    filtered_countries = df[df['continent'] == selected_continent]['name'].unique().tolist()
    country_dropdown.options = filtered_countries
    country_dropdown.value = filtered_countries[0] if filtered_countries else None
    country_dropdown.disabled = False
    # 初始加载第一个国家的地图
    show_country_map(country_dropdown.value)

# 根据选中的国家展示地图
def show_country_map(selected_country):
    out.clear_output()
    # 过滤出选中国家的数据
    country_data = df[df['name'] == selected_country]
    with out:
        # 创建Folium地图,以选中国家的中心为初始视角
        m = folium.Map(location=[country_data.geometry.centroid.y.iloc[0], 
                                country_data.geometry.centroid.x.iloc[0]],
                      zoom_start=4)
        # 添加国家边界图层,显示名称提示
        folium.GeoJson(country_data, tooltip=folium.GeoJsonTooltip(fields=['name'])).add_to(m)
        display(m)

# 绑定下拉框的事件监听
continent_dropdown.observe(update_countries, names='value')
country_dropdown.observe(lambda change: show_country_map(change['new']), names='value')

# 初始化加载默认选项的地图
update_countries({'new': continent_dropdown.value})

# 展示所有交互组件
display(continent_dropdown, country_dropdown, out)

关键优化说明

  • 两级联动逻辑:新增大洲选择后动态更新国家列表的功能,解决原代码仅单级下拉框的问题
  • 精准可视化:替换批量展示大洲国家的逻辑,改为聚焦单个选中国家,添加 tooltip 增强交互体验
  • 初始化完善:启动时自动加载默认选项的地图,避免空输出状态
  • 代码可读性:重命名组件变量、添加注释,提升代码维护性

保存为HTML文件的方法

在Notebook中执行以下操作:

  1. 确认所有交互组件正常运行
  2. 点击界面顶部「File」→「Download as」→「HTML (.html)」
  3. 下载后的HTML文件保留全部交互功能,可直接在浏览器打开使用

内容的提问来源于stack exchange,提问作者gis.rajan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:58:39