有没有办法在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))
返回
这是正确的方向,但不太正确。这将在矩形周围创建类似椭圆的形状。但是我想实现的是扩展水平矩形,以使其两个端点与垂直矩形相连。
答案 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)