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

如何使用Python将封闭多段线polylines转换为多边形polygons

解决方法

你可以通过Shapely和geopandas两个Python空间计算库实现需求,核心操作逻辑如下:

  • 第一步:将所有多段线转为Shapely的LineString对象,合并为MultiLineString集合后调用unary_union方法,拆分所有相交线段,得到所有在交点处被切断的独立线段。
  • 第二步:使用拆分后的线段构建平面拓扑,直接调用shapely.ops.polygonize方法即可自动识别所有封闭区域,输出为Polygon对象列表。
  • 第三步:如果需要获取指定多边形对应的原始多段线顶点,可遍历生成的Polygon的exterior.coords属性获取外边界坐标,interiors属性获取内洞坐标,再和原始多段线顶点做匹配即可。

以下是可直接运行的最简示例代码:

from shapely.geometry import LineString, MultiLineString
from shapely.ops import unary_union, polygonize

# 替换为你自己的多段线坐标列表
raw_polylines = [
    [(0,0), (2,0), (2,2), (0,2)],
    [(1,0), (1,3)],
    [(0,1), (3,1)]
]

# 转Shapely LineString对象
line_objs = [LineString(p) for p in raw_polylines]

# 打断所有相交线段
merged_lines = unary_union(MultiLineString(line_objs))

# 提取所有封闭区域为多边形
polygons = list(polygonize(merged_lines))

# 输出每个多边形的顶点坐标
for idx, poly in enumerate(polygons):
    print(f"多边形{idx}外边界顶点:", list(poly.exterior.coords))

如果你的多段线存在自相交、悬挂线段等问题,提前用shapely.is_valid做合法性校验,过滤无效线段后再做面提取,可避免出现异常结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:27:01