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

如何为Folium集群中的每个要素添加提示框?

问题:Folium地图中GeoJson要素无法显示Name字段提示框

背景

我有一个包含点和面的GeoPandas DataFrame df_osm,数据示例如下:

geometry                                              name
0  POLYGON ((1.46423 43.56901, 1.46428 43.56847, ...  A
1  POLYGON ((1.38403 43.60532, 1.38319 43.60517, ...  B
2  POLYGON ((1.48632 43.53240, 1.48744 43.53285, ...  C
3  POLYGON ((1.40321 43.57974, 1.40315 43.57974, ...  D
4  POLYGON ((1.46420 43.57225, 1.46553 43.57278, ...  E

已通过以下代码生成带集群功能的Folium地图,但无法为要素添加显示name字段的提示框:

m = folium.Map(location=[df_cdm.latitude.mean(),df_cdm.longitude.mean()], zoom_start=15, tiles='CartoDB positron', max_zoom = 20)

m_cluster = MarkerCluster(name='OSM').add_to(m)
for i, row in df_osm.iterrows():
    
    sim_geo = gpd.GeoSeries(row['geometry'])
    geo_j = sim_geo.to_json()
    geo_j = folium.GeoJson(data=geo_j,
                           style_function=lambda x: {'fillColor': 'orange'})
    geo_j.add_to(m_cluster)

m

地图效果

尝试在folium.GeoJson中添加tooltip=folium.GeoJsonTooltip(fields=['name'])后,所有面和标记仍无提示框。

解决方案

问题核心是生成GeoJson时未携带name属性,修改代码时保留单条数据的完整属性即可:

m = folium.Map(location=[df_cdm.latitude.mean(), df_cdm.longitude.mean()], zoom_start=15, tiles='CartoDB positron', max_zoom=20)

m_cluster = MarkerCluster(name='OSM').add_to(m)
for i, row in df_osm.iterrows():
    # 将单条数据转为带属性的GeoDataFrame,再生成GeoJson
    single_gdf = gpd.GeoDataFrame([row], crs=df_osm.crs)
    geo_j = folium.GeoJson(
        data=single_gdf,
        style_function=lambda x: {'fillColor': 'orange'},
        tooltip=folium.GeoJsonTooltip(fields=['name'], labels=True)
    )
    geo_j.add_to(m_cluster)

m

关键说明

  • 原代码仅导出几何信息,未包含name属性,导致GeoJsonTooltip找不到对应字段;
  • 改用GeoDataFrame保留完整属性后,Tooltip可正确读取name;
  • labels=True会在提示框显示字段名(如"name: A"),不需要可设为False。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:52:12