使用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
相关产品推荐
相关产品推荐

