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