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

在GeoPandas中合并重叠几何并保留对应最小索引

解决GeoPandas合并重叠多边形并保留最小Index的问题

要实现将重叠多边形合并为MultiPolygon并保留组内最小原index,核心是先识别出所有空间连通(重叠/相交)的多边形组,再按组聚合。以下是具体步骤和代码:

步骤1:准备数据并构建空间邻接矩阵

首先将原index转为列(避免后续操作丢失),然后通过空间连接找到所有相交的多边形对,构建邻接矩阵用于识别连通组:

import geopandas as gpd
from scipy.sparse import csr_matrix
from scipy.sparse.csgraph import connected_components

# 将原index转为列,方便后续聚合取最小值
gdf = gdf.reset_index().rename(columns={'index': 'original_index'})

# 空间连接找到所有相交的多边形对
spatial_join = gpd.sjoin(gdf, gdf, how='inner', predicate='intersects')

# 构建稀疏邻接矩阵
rows = spatial_join.index_left.values
cols = spatial_join.index_right.values
adj_matrix = csr_matrix(([1]*len(rows), (rows, cols)), shape=(len(gdf), len(gdf)))

步骤2:识别连通组并分组聚合

通过连通分量分析给每个重叠多边形组分配唯一ID,再按组聚合,保留最小原index并合并几何:

# 计算连通分量,得到每个多边形所属的组ID
_, group_labels = connected_components(csgraph=adj_matrix, directed=False)
gdf['group_id'] = group_labels

# 按组聚合:取最小原index,合并几何为MultiPolygon
result = gdf.groupby('group_id').agg(
    original_index=('original_index', 'min'),
    geometry=('geometry', lambda x: x.unary_union)
).reset_index(drop=True)

# 将最小原index设为结果的index(可选)
result = result.set_index('original_index')

关键说明

  • 你之前使用dissolve无效的原因是缺少正确的分组键:按原index分组时每个行都是独立组,不分组则所有行合并为一组。
  • 若仅需合并严格重叠(排除完全包含/相邻)的多边形,可将sjoin的predicate参数改为overlaps。
  • 合并后的几何会自动处理为MultiPolygon(若组内多个多边形)或单个Polygon(若组内只有一个多边形)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:09:29