如何提取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
相关产品推荐
相关产品推荐

