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

如何将GeoPandas边属性列表分组至对应多边形?

按原始多边形分组GeoDataFrame的边属性列表

关键前提

要实现分组,核心是在提取线段属性时保留每个线段所属的原始多边形标识(比如GeoDataFrame的索引、唯一ID列)。如果你的list_只是单纯的边属性集合,没有归属标记,那得先补这个关联逻辑。

实现方法

方法1:从GeoDataFrame直接提取并分组

如果还没生成list_,直接从原始GeoDataFrame处理,一步到位得到分组后的嵌套列表:

from shapely.geometry import LineString

# 假设你的GeoDataFrame名为gdf,替换成你实际获取线段rf属性的逻辑
grouped_edge_rf = []

for _, row in gdf.iterrows():
    poly = row.geometry
    # 收集当前多边形的所有边rf属性
    current_poly_edges = []
    # 处理外边界和所有内边界
    boundaries = [poly.exterior] + list(poly.interiors)
    for boundary in boundaries:
        coords = list(boundary.coords)
        # 遍历边界上的每一段线段
        for i in range(len(coords)-1):
            # 替换成你实际获取该线段rf属性的代码
            segment_rf = get_segment_rf(coords[i], coords[i+1])
            current_poly_edges.append(segment_rf)
    grouped_edge_rf.append(current_poly_edges)

运行后grouped_edge_rf就是你要的嵌套列表格式。

方法2:对已有带标识的list_分组

如果你的list_是带多边形标识的结构(比如每个元素是(多边形ID, 边rf属性)),用itertools.groupby快速分组:

from itertools import groupby

# 先按多边形ID排序(groupby要求同键元素连续)
sorted_segments = sorted(list_, key=lambda x: x[0])
# 分组并提取边属性列表
grouped_edge_rf = [[seg[1] for seg in group] for _, group in groupby(sorted_segments, key=lambda x: x[0])]

示例结果

最终得到的grouped_edge_rf会符合预期格式:

[[[29], [26, 29], [29], [29, 35], [29]], [[29, 35], [35], [35], [35]], [[26], [26], [26], [26, 29]], [[31], [31], [31], [31]]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:32:37