def polygon_merge(id_wkt_dict, buffer_distance=0.000001):
id_poly_dict = {}
for id, poly in id_wkt_dict.items():
buffered_rectangle = poly.buffer(buffer_distance, cap_style=3, join_style=2)
id_poly_dict[id] = buffered_rectangle
polygon_dict = {id_: poly for id_, poly in id_poly_dict.items()}
# 使用unary_union找到所有相互重叠的多边形的合并形状
merged_polygon: Polygon = unary_union(list(polygon_dict.values()))
# print(merged_polygon.wkt)
if merged_polygon.geom_type == "MultiPolygon":
merged_polygons = merged_polygon.geoms
elif merged_polygon.geom_type == "Polygon":
merged_polygons = [merged_polygon]
else:
merged_polygons = []
# 找出每个合并后的多边形中包含的原始多边形的ID
merged_polygons_with_ids = []
for merged_poly in merged_polygons:
merged_ids = [id_ for id_, poly in polygon_dict.items() if merged_poly.intersects(poly)]
merged_polygons_with_ids.append((merged_ids, merged_poly))
return merged_polygons_with_ids
网友评论