在shapely中,可以通过LineString对象构建多边形(polygon),但是只能是一条线生成一个多边形,如果想要多条线生成一个多边形可以使用shapely.ops.polygonize方法。
shapely.ops.polygonize(lines)
输入lines(线的集合),可以是类似线条的任何对象。
可以是[((0, 0), (1, 1)),((0, 0), (0, 1)),((0, 1), (1, 1))]、[LineString1,LineString2,LineString3]这种形式。
输出多边形的的迭代器(Collection)-通过加list可以看到具体的对象
举例:
有多条直线集合lines
from shapely.ops import polygonize
lines = [
((0, 0), (1, 1)),
((0, 0), (0, 1)),
((0, 1), (1, 1)),
((1, 1), (1, 0)),
((1, 0), (0, 0))
]
polygonize(lines) #返回
list(polygonize(lines)) #返回 [,]
下图1,为直线集合的图像;下图2,为生成多边形的图像。
注意如果多条曲线形成重叠的曲面是不会形成面的
如上面图像的情况,不能生成多边形。
shapely.ops.polygonize_full(lines)
输入对象和polygonize一样,但是输出对象不同
输出对象的元组(polygons, dangles, cut edges, invalid ring lines)
其中:
polygons是和polygonize出的结果是一样的。
dangles 例如出现如上图线情况时,cut edges返回出来的就是上面图像的情况,而polygons返回为空值。
cut edges 返回的是不构成多边形的边。
lines = [
((0, 0), (1, 1)),
((0, 0), (0, 1)),
((0, 1), (1, 1)),
((1, 1), (1, 0)),
((1, 0), (0, 0)),
((5, 5), (6, 6)),
((1, 1), (100, 100)),
]
result, dangles, cuts, invalids = polygonize_full(lines)
polygonize_full(lines)
返回:(