如何为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
相关产品推荐
相关产品推荐

