问题描述
有没有办法在Shapely中扩展多边形?我有一个看起来如下的场景
我想做的是将水平多边形扩展到垂直多边形。
多边形的外部表示如下:
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))
返回
这是正确的方向,但不太正确。这将在矩形周围创建类似椭圆的形状。但是我想实现的是扩展水平矩形,以使其两个端点与垂直矩形相连。
解决方法
我的建议是使用
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)