小智 6
如果它足以填补某些 MultiPolygon 的漏洞m
,您可以这样做:
no_holes = MultiPolygon(Polygon(p.exterior) for p in m)
Run Code Online (Sandbox Code Playgroud)
如果您还需要填充因接触 MultiPolygon 内的 Polygon 而产生的孔,则以下操作应该有效:
# Create a polygon `b` that contains `m`
xmin, ymin, xmax, ymax = m.bounds
b = Polygon([(xmin, ymin), (xmin, ymax), (xmax, ymax), (xmax, ymin)]).buffer(1, resolution=1)
# Take the complement of `m` in `b`, which is a MultiPolygon.
# Pick the outer polygon and take the complement in `b`.
no_holes = b - min(b - m, key=lambda p: p.bounds)
Run Code Online (Sandbox Code Playgroud)
一种近似的方法可能是:
MultiPolygon
感兴趣的单个组件的外边界例如:
#!/usr/bin/env python
from shapely.geometry import MultiPolygon, Polygon
from shapely.ops import cascaded_union
a = 0.25
delta = 0.49
P = MultiPolygon([
(
((0,0),(0,3),(3,3),(3,2-delta),(2,2-delta),(2,2),(1,2),(1,1),(2,1),(2,1+delta),(3,1+delta),(3,0),(0,0)),
[((a, a), (1-a,a), (1-a,1-a), (a,1-a), (a,a))]
)
])
eps = 0.01
omega = cascaded_union([
Polygon(component.exterior).buffer(eps).buffer(-eps) for component in P
])
for x,y in zip(*omega.exterior.coords.xy):
print(x, y)
Run Code Online (Sandbox Code Playgroud)
而上面列出的脚本按预期生成了一个边长为 3 的近似正方形,即,它填充了左下角的洞以及中间的“空白空间”,MultiPolygon
它被渲染为等效于具有足够高参数值的扩展-收缩过程eps
。
归档时间: |
|
查看次数: |
10355 次 |
最近记录: |