首页 > 解决方案 > 使用 Shapely 在一个方向上扩展矩形多边形,直到它与另一个多边形相交

问题描述

有没有办法在 Shapely 中扩展多边形?我有一个如下所示的场景

在此处输入图像描述

我想做的是将水平多边形扩展到垂直多边形。

多边形外部表示如下:

vert_poly.exterior.xy
(array('d', [55.63234329223633, 517.281494140625, 517.281494140625, 55.63234329223633, 55.63234329223633]),
 array('d', [632.2301635742188, 632.2301635742188, 647.7040405273438, 647.7040405273438, 632.2301635742188]))

hor_poly.exterior.xy
(array('d', [560.3878784179688, 575.0977172851562, 575.0977172851562, 560.3878784179688, 560.3878784179688]),
 array('d', [64.83158111572266, 64.83158111572266, 904.9833984375, 904.9833984375, 64.83158111572266]))

使用vert_poly = vert_poly.buffer(vert_poly.distance(hor_poly))回报

在此处输入图像描述

这是正确的方向,但不完全正确。这会在矩形周围创建类似椭圆的形状。但我想要实现的是扩展水平矩形,使其两个端点与垂直矩形相连。

标签: pythoncomputational-geometryshapely

解决方案


通常我会建议过度放大左多边形,调用intersection()并从返回的点构造新多边形,但是您的问题非常具体,您可以使用坐标。

一般的

假设你的左矩形是(X1,Y1),(X2,Y2)(左上角/右下角),你的右矩形是(X3,Y3),(X4,Y4). 那么扩展的左矩形是(X1,Y1),(X2,Y3)

匀称

# let left, right be the given Polygons
extended_left = Polygon( [ left.bounds[:2], (right.bounds[0], left.bounds[1]), \
                          (right.bounds[0], left.bounds[3]), left.bounds[2:]  ] )

推荐阅读