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

如何提取Geopandas DataFrame几何列中POLYGON的所有坐标值?

Geopandas提取POLYGON坐标并转换为numpy数组方法

前置说明

你读取得到的GeoDataFrame中,geometry列的每一个元素均为Shapely几何对象,POLYGON类型对应Shapely的Polygon类,可直接调用类属性获取坐标值。

单个POLYGON坐标提取

取单个行的POLYGON对象,调用外边界属性exterior.coords后直接转换为numpy数组即可:

import numpy as np
# 取第0行的POLYGON对象
target_poly = campos_shape.iloc[0].geometry
# 转换为N行2列的numpy数组,每行对应[经度, 纬度]
poly_arr = np.array(target_poly.exterior.coords)

# 若需要转换为普通嵌套列表,调用tolist方法即可
poly_list = poly_arr.tolist()

如果需要提取POLYGON内部孔洞的坐标,遍历interiors属性即可:

hole_arr_list = [np.array(inner.coords) for inner in target_poly.interiors]

批量处理整个GeoDataFrame的POLYGON

通过apply方法批量处理所有行的几何要素:

def poly_to_arr(geom):
    # 仅处理POLYGON类型要素
    if geom.geom_type == "Polygon":
        return np.array(geom.exterior.coords)
    return None

# 新增列存储每个POLYGON的坐标数组
campos_shape["poly_coords"] = campos_shape.geometry.apply(poly_to_arr)

特殊场景适配

注意:如果数据中包含MultiPolygon(多面)类型的几何要素,需要先拆分内部子面再提取坐标,适配代码如下:

def get_all_poly_coords(geom):
    coords_res = []
    if geom.geom_type == "Polygon":
        coords_res.append(np.array(geom.exterior.coords))
    elif geom.geom_type == "MultiPolygon":
        # 遍历多面内的所有子面
        for sub_poly in geom.geoms:
            coords_res.append(np.array(sub_poly.exterior.coords))
    return coords_res

campos_shape["all_coords"] = campos_shape.geometry.apply(get_all_poly_coords)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:54:07