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

Python 使用Shapely在一个方向上延伸矩形多边形,直到它与另一个多边形相交,python,computational-geometry,shapely,Python,Computational Geometry,Shapely,有没有一种方法可以以匀称的方式延伸多边形?我有一个场景,如下所示 我想做的是将水平多边形延伸到垂直多边形 多边形外部表示如下: vert_poly.exterior.xy 及 使用vert\u poly=vert\u poly.buffer(vert\u poly.distance(hor\u poly))返回 这是正确的方向,但不完全正确。这将围绕矩形创建类似椭圆的形状。但我想实现的是扩展水平矩形,使其两个端点与垂直矩形相连。我的建议是使用 shapely.affinity.scale(

有没有一种方法可以以匀称的方式延伸多边形?我有一个场景,如下所示

我想做的是将水平多边形延伸到垂直多边形

多边形外部表示如下:

vert_poly.exterior.xy

使用
vert\u poly=vert\u poly.buffer(vert\u poly.distance(hor\u poly))
返回


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

我的建议是使用

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)

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

一般的 假设你的左矩形是
(X1,Y1),(X2,Y2)
(左上/右下)而你的右矩形是
(X3,Y3),(X4,Y4)
。然后扩展的左矩形是
(X1,Y1)、(X2,Y3)

匀称
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]))
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)
# 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:]  ] )