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

