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

folium渲染GeoJson报错:无法渲染含缺失几何图形的对象(None)

问题排查与解决

错误根源

  1. 遍历GeoDataFrame方式错误:直接for polygon in my_geo_df会迭代DataFrame的列名,而非几何图形对象。把列名字符串传给geo.to_json()会返回None,导致folium无法解析。
  2. 可能存在空几何值:即使遍历方式正确,若my_geo_df的几何列中有缺失值(如NaN),也会触发该报错。

解决方法

方法1:正确遍历几何列

假设你的GeoDataFrame的几何列名为geometry(geopandas默认列名),修改遍历逻辑:

# 遍历几何列中的每个要素
for polygon in my_geo_df['geometry']:
    # 跳过空的几何对象
    if polygon is None or polygon.is_empty:
        continue
    # 将单个几何对象转为GeoJSON格式
    polygon_json = polygon.to_json()
    geo_poly = folium.GeoJson(polygon_json, style_function=lambda x: {'fillColor': 'blue', 'fillOpacity': 0.4})
    geo_poly.add_to(m)

方法2:批量导入GeoDataFrame(更高效)

无需逐个遍历,直接将整个GeoDataFrame传给folium.GeoJson,同时过滤空几何:

# 先过滤掉空几何的行
filtered_geo_df = my_geo_df[~my_geo_df['geometry'].is_empty & ~my_geo_df['geometry'].isna()]
# 批量添加到地图
folium.GeoJson(
    filtered_geo_df,
    style_function=lambda x: {'fillColor': 'blue', 'fillOpacity': 0.4}
).add_to(m)

关键说明

  • 确认my_geo_df是geopandas的GeoDataFrame类型,而非普通pandas DataFrame。
  • 若你的几何列名不是geometry,替换为实际列名(如geom)。
  • 必须过滤空几何对象(None或空图形),避免folium解析失败。

内容的提问来源于stack exchange,提问作者윤채영

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:08:18