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

如何将存储Python字典格式多边形的CSV转为geopandas可读取的GeoDataFrame

实现方案

前置依赖

首先安装所需的三方库:
pip install pandas geopandas shapely

代码实现

CSV中存储的boundary字段默认是字符串格式的Python字典列表,需要先解析为Python对象,再转换为shapely多边形对象,最后构造GeoDataFrame,完整代码如下:

import pandas as pd
import geopandas as gpd
from shapely.geometry import Polygon
import ast

# 1. 读取原始CSV
df = pd.read_csv("你的文件路径.csv")

# 2. 定义边界解析函数
def boundary_to_polygon(boundary_str):
    try:
        # 字符串转字典列表
        point_list = ast.literal_eval(boundary_str)
        # 坐标顺序调整为(经度, 纬度),符合shapely的输入要求
        coord_list = [(point["lng"], point["lat"]) for point in point_list]
        # 合法多边形至少需要3个坐标点
        return Polygon(coord_list) if len(coord_list) >=3 else None
    except Exception:
        # 解析异常返回空值,后续过滤
        return None

# 3. 生成几何列
df["geometry"] = df["boundary"].apply(boundary_to_polygon)

# 4. 过滤无效几何行,构造GeoDataFrame
df = df.dropna(subset=["geometry"])
gdf = gpd.GeoDataFrame(df, geometry="geometry", crs="EPSG:4326")

# 可选:删除原始boundary字段释放空间
# gdf = gdf.drop(columns=["boundary"])

注意事项

  • 如果你的boundary字段读取后已经是Python列表类型而非字符串,可删除ast.literal_eval步骤直接处理坐标
  • 上述代码默认使用WGS84坐标系(EPSG:4326),如果你的坐标属于其他坐标系,修改crs参数对应值即可
  • 非闭合的多边形shapely会自动将首尾坐标点连接补全

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:00:01