问题描述
我有以下匀称的像素多边形
big_poly = polygon([(94.5,77.0),(92.5,53.0),(87.5,45.0),(66.0,20.5),(9.0,3.5),(5.5,6.0),(4.5,13.0),(7.5,26.0),(6.5,91.0),(8.0,92.5),(16.0,(44.0,86.5)])
我需要用 4 x 6 像素多边形填充 big_poly
,让它们都落在大多边形的边界内并平行于其最小轴(相同的旋转)。
感谢@Georgy,解决方案 here 确实很有帮助。 所以我能够做到以下几点:
使用以下代码:
b = building_poly.boundary
points = []
for x in range(int(np.floor(xmin)),int(np.ceil(xmax)),4):
for y in range(int(np.floor(ymin)),int(np.ceil(ymax)),6):
points.append((x,y))
points = MultiPoint(points)
result = points.intersection(building_poly)
并在 result
中绘制点,但现在我需要从这些点创建多边形。
如何将这些点变成矩形多边形?
我也找到了 this,但不确定如何使它适合我的情况。
解决方法
这是我们可以做的:
- 根据给定多边形的边界构造两个 X 和 Y 坐标数组
- 通过对连续的 X 和 Y 坐标对进行迭代,构建一个完全覆盖给定多边形的矩形网格
- 过滤掉那些不完全位于多边形内部的矩形
这很可能不是最有效的解决方案,但它对您的情况表现良好:
dx = 4
dy = 6
xmin,ymin,xmax,ymax = big_poly.bounds
xs = np.arange(np.floor(xmin),np.ceil(xmax) + 1,dx)
ys = np.arange(np.floor(ymin),np.ceil(ymax) + 1,dy)
rectangles = (Polygon([(x_start,y_start),(x_end,y_end),(x_start,y_end)])
for x_start,x_end in zip(xs,xs[1:])
for y_start,y_end in zip(ys,ys[1:]))
rectangles = [rectangle for rectangle in rectangles
if big_poly.contains(rectangle)]