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

folium添加GeoJson图层报缺失几何对象ValueError问题求助

问题描述

使用folium编写地图代码,计划添加polygon多边形图层展示人口数据,运行时触发报错。
原实现代码如下:

import folium
import pandas
data = pandas.read_csv("Volcanoes.txt")

lat=list(data["LAT"])
lon=list(data["LON"])
elev=list(data["ELEV"])

def color_producer(elevation):
    if elevation < 1000:
        return 'green'
    elif 1000<=elevation<3000:
        return 'orange'
    else:
        return 'red'

map=folium.Map(location=[42.304386,-83.066254],zoom_start=6,tiles="Stamen Terrain")

fg=folium.FeatureGroup(name="My Map")


for lt, ln ,el in zip(lat,lon,elev) :

    fg.add_child(folium.CircleMarker(location=[lt,ln],radius=6,popup=str(el)+"m",
    fill_color=color_producer(el),color='grey',fill_opacity=0.7))

fg.add_child(folium.GeoJson(data=open('world.json','r',encoding='utf-8-sig'),style_function=lambda x:{'fillColor':'yellow' }))
map.add_child(fg)


map.save("Map1.html")

运行抛出的错误信息:

Traceback (most recent call last):
  File "C:\Users\Vida\Desktop\Webmapping_real\map1.py", line 28, in <module>
    fg.add_child(folium.GeoJson(data=open('world.json','r',encoding='utf-8-sig'),style_function=lambda x:{'fillColor':'yellow' }))
  File "C:\Users\Vida\AppData\Local\Programs\Python\Python310\lib\site-packages\folium\features.py", line 499, in __init__
    self.data = self.process_data(data)
  File "C:\Users\Vida\AppData\Local\Programs\Python\Python310\lib\site-packages\folium\features.py", line 544, in process_data
    raise ValueError('Cannot render objects with any missing geometries'
ValueError: Cannot render objects with any missing geometries: <_io.TextIOWrapper name='world.json' mode='r' encoding='utf-8-sig'>
PS C:\Users\Vida\Desktop\Webmapping_real> 
故障原因

folium.GeoJson的data参数不支持直接传入open()返回的文件流对象,需要传入解析完成的GeoJson格式字符串/字典对象。当前代码直接传了未读取内容的文件句柄,folium无法识别其中的几何数据,因此抛出异常。

修复方案

修改GeoJson初始化部分的代码,将文件内容读取完成后再传入,两种实现均可:

  • 直接读取文件内容为字符串传入
fg.add_child(folium.GeoJson(
    data=open('world.json','r',encoding='utf-8-sig').read(),
    style_function=lambda x:{'fillColor':'yellow'}
))
  • 借助json模块加载为字典传入(可提前校验JSON格式合法性,更推荐)
# 顶部新增导入
import json

# 替换原GeoJson相关代码
with open('world.json', 'r', encoding='utf-8-sig') as f:
    world_geo = json.load(f)
fg.add_child(folium.GeoJson(
    data=world_geo,
    style_function=lambda x:{'fillColor':'yellow'}
))

注意:如果修改后仍报相同错误,优先检查两点:一是world.json路径是否正确,是否和运行的py脚本在同一目录;二是world.json是否为标准GeoJson格式,是否存在要素缺失geometry字段的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:09:21