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

问题描述

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

enter image description here

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

多边形的外部表示如下:

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

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

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

enter image description here

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

解决方法

我的建议是使用

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,hmaxy = vert_poly.bounds

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

hor_poly = scale(hor_poly,xfact=xfact)
,

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

常规

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

形状

(X1,Y3)