使用Shapely在一个方向上延伸矩形多边形,直到与另一个多边形相交

时间:2020-09-30 16:45:58

标签: python computational-geometry shapely

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

enter image description here

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

多边形的外部表示如下:

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))返回

enter image description here

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

2 个答案:

答案 0 :(得分:0)

我的建议是使用

shapely.affinity.scale(geom, xfact=1.0, yfact=1.0, zfact=1.0, origin='center')

方法。这样可以将水平多边形缩放为垂直多边形。 我将使用object.bounds属性计算比例因子,该属性为您提供一组外部限制(minx, miny, maxx, maxy)。您可以对两个多边形都执行此操作,然后将比例因子计算为:

hminx, hminy, hmaxx, hmaxy = hor_poly.bounds
vminx, hminy, hmaxx, hmaxy = vert_poly.bounds

xfact = (hmaxx-hminx)/(vminx-hmaxx)

hor_poly = scale(hor_poly, xfact=xfact)

答案 1 :(得分:0)

通常,我建议过度放大左侧的多边形,调用np.inf,然后根据返回的点构造新的多边形,但是您的问题如此具体,以至于可以使用坐标。

常规

假设您的左矩形为intersection()(左上/右下),右矩形为(X1,Y1),(X2,Y2)。那么扩展后的左矩形是(X3,Y3),(X4,Y4)

形状

(X1,Y1),(X2,Y3)