【问题标题】:Stacking small polygons inside another bigger one将小多边形堆叠在另一个更大的多边形中
【发布时间】:2021-02-18 03:42:25
【问题描述】:

我有以下匀称的像素多边形

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, 92.5),
                    (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,但不知道如何使它适合我的情况。

【问题讨论】:

  • 有些相关:Get all lattice points lying inside a Shapely polygon。也许你可以根据你的情况调整它。
  • 谢谢!这对我有很大帮助,但是请您检查我的问题中的更新。即使我现在有了更好的主意,但我仍然不清楚如何获得我需要的结果。

标签: python polygon shapely


【解决方案1】:

这是我们可以做的:

  1. 根据给定多边形的边界构造两个 X 和 Y 坐标数组
  2. 通过遍历连续的 X 和 Y 坐标对,构造一个完全覆盖给定多边形的矩形网格
  3. 过滤掉那些不完全位于多边形内的矩形

这很可能不是最有效的解决方案,但它适用于您的情况:

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_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)]

【讨论】:

  • 非常感谢!这看起来很漂亮!
猜你喜欢
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
相关资源
最近更新 更多