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

使用GeoPandas合并相邻多边形时触发GEOSException报错的问题

解决相邻多边形合并的GEOSException报错问题

这个报错的根源其实很容易忽略:你假设gdf.unary_union返回的一定是MultiPolygon(多个多边形的集合),所以直接去访问.geoms属性,但如果所有相邻多边形合并后最终生成的是单个Polygon,那这个对象根本没有.geoms属性,自然会触发GEOSException。

你已经确认了每个原始多边形的外边界都是有效的LinearRing,说明单个几何没问题,问题出在合并后的几何类型判断上。

正确的处理步骤

先获取合并后的几何对象,再根据它的实际类型来生成新的GeoSeries:

import geopandas as gpd
from shapely.geometry import Polygon, MultiPolygon

# 第一步:计算所有多边形的合并结果
union_geom = gdf.unary_union

# 第二步:根据合并结果的几何类型处理
if isinstance(union_geom, MultiPolygon):
    # 如果是多多边形集合,拆分单个多边形
    gdf2 = gpd.GeoSeries([geom for geom in union_geom.geoms])
elif isinstance(union_geom, Polygon):
    # 如果合并后是单个多边形,直接包装成GeoSeries
    gdf2 = gpd.GeoSeries([union_geom])
else:
    # 处理其他异常情况(比如空几何等)
    raise ValueError("合并后的几何不是Polygon或MultiPolygon类型")

验证方法

你可以先打印合并后的几何类型,确认问题所在:

print(type(union_geom))

如果输出是<class 'shapely.geometry.polygon.Polygon'>,那就是之前的代码直接访问.geoms导致的报错。

最后执行gdf2.boundary.plot()就能看到合并后的结果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 12:32:45