如何将含MultiPolygon的Geopandas DataFrame转换为GeoJSON?
解决Geopandas DataFrame(含MultiPolygon)转JSON/GeoJSON的问题
你遇到的问题是因为df.to_dict()返回的geometry列是Shapely的MultiPolygon/Polygon对象,这类对象不属于JSON原生可序列化类型,所以json.dumps()会报错。Geopandas本身提供了专门的方法来处理所有几何类型的GeoJSON转换,不需要手动转字典再序列化,具体方案如下:
方案1:直接生成GeoJSON字符串
使用Geopandas内置的to_json()方法,它会自动将所有几何类型(包括MultiPolygon)转换为符合GeoJSON规范的结构:
import geopandas as gpd # 假设df是你的Geopandas DataFrame geojson_str = df.to_json() print(geojson_str)
方案2:获取可序列化的字典对象
如果需要先得到Python字典再处理,可以用json.loads()解析to_json()的输出:
import json geojson_dict = json.loads(df.to_json()) # 此时geojson_dict是完全可JSON序列化的字典,可直接用json.dumps输出 print(json.dumps(geojson_dict, indent=2))
方案3:直接保存为GeoJSON文件
如果最终是要保存到文件,用to_file()方法更高效,无需手动处理序列化:
df.to_file('your_output.geojson', driver='GeoJSON')
为什么之前的方法不行?
df.to_dict(orient='records')中的geometry字段是Shapely的几何对象(而非GeoJSON格式的字典),JSON序列化器无法识别这类自定义对象。而to_json()方法内部会调用Shapely的__geo_interface__属性,将几何对象转换为包含type和coordinates的标准GeoJSON结构,从而完成序列化。
内容的提问来源于stack exchange,提问作者data en
相关产品推荐
相关产品推荐

