缩小多边形使用角落坐标

18 浏览
0 Comments

缩小多边形使用角落坐标

我正在尝试通过仅使用多边形角点的坐标来缩小多边形。例如,如果我有以下形状,其角点为[(0, 0), (0, 100), (20, 100), (30, 60), (40, 100), (60, 100), (60, 0), (40, 10), (40, 40), (20, 40), (20, 10)],则形状如下所示:

enter image description here

我想找到当我将此多边形缩小一定宽度和高度因子时的角点坐标。例如,如果我想将其宽度缩小10%,高度缩小20%,则可以表示为以下内容:

enter image description here

我尝试使用cv2.resize()来实现这一点,但无法获得调整大小后的角点。我一直在尝试寻找多边形调整大小或多边形缩小的算法,但找不到关于如何实现这一点的任何信息。是否存在任何算法或软件包可以实现类似的功能?

0
0 Comments

根据以上内容,"Shrink polygon using corner coordinates"这个问题的出现原因是作者最初试图通过缩小多边形的角坐标来实现。作者尝试了一种简单的方法,即将所有坐标(位置向量)乘以缩小因子来获得多边形缩小后的新坐标。然而,这种方法并不适用于多边形的凹区域,会导致重叠。解决方法是为多边形指定多个中心点,例如左侧、右侧和中间,不过这样做会变得非常复杂。由于多边形是由用户创建的,无法在事先确定其形状,因此需要编写一种方法来确定许多不同的属性。

0
0 Comments

缩小多边形使用角坐标的原因是,用户想要实现与postgis的ST_Buffer功能类似的功能,但是需要在x和y方向上使用不同的因子。然而,这并不容易实现。用户在qgis-stack上提出了一个相关问题,但没有得到满意的答案。

解决方法是使用shapely库来使ST_Buffer函数在Python中可用。首先,用户定义了一个坐标列表coords,然后根据这些坐标生成了线段列表lines。接下来,用户定义了缩小因子factor,该因子默认为10%。然后,用户使用shapely库中的函数计算了多边形的最小和最大角坐标,并计算了多边形的中心点。然后,用户根据计算得到的中心点和缩小因子计算了需要缩小的距离。最后,用户使用shapely库中的函数将多边形缩小了指定的距离。最后,用户使用matplotlib库将原始多边形和缩小后的多边形绘制出来。

以上就是关于"Shrink polygon using corner coordinates"问题的原因和解决方法的整理。

0
0 Comments

缩小多边形使用角坐标的问题是如何通过给定的角坐标来缩小多边形,并提供了解决方法。下面是解决该问题的方法:

def shrink_or_swell_shapely_polygon(my_polygon, factor=0.10, swell=False):
    ''' returns the shapely polygon which is smaller or bigger by passed factor.
        If swell = True , then it returns bigger polygon, else smaller '''
    from shapely import geometry
    shrink_factor = 0.10 #Shrink by 10%
    xs = list(my_polygon.exterior.coords.xy[0])
    ys = list(my_polygon.exterior.coords.xy[1])
    x_center = 0.5 * min(xs) + 0.5 * max(xs)
    y_center = 0.5 * min(ys) + 0.5 * max(ys)
    min_corner = geometry.Point(min(xs), min(ys))
    max_corner = geometry.Point(max(xs), max(ys))
    center = geometry.Point(x_center, y_center)
    shrink_distance = center.distance(min_corner)*0.10
    if swell:
        my_polygon_resized = my_polygon.buffer(shrink_distance) #expand
    else:
        my_polygon_resized = my_polygon.buffer(-shrink_distance) #shrink
    return my_polygon_resized

该方法通过使用shapely库来缩小或扩大多边形。它接受一个多边形和一个缩放因子作为参数,并根据缩放因子缩小或扩大多边形。如果参数swell为True,则返回扩大的多边形,否则返回缩小的多边形。

该方法首先获取多边形的角坐标,并计算出多边形的中心点的x和y坐标。然后,通过计算中心点与最小角坐标点之间的距离,乘以缩放因子,得到缩小或扩大的距离。如果swell为True,则使用buffer方法将多边形扩大,否则将多边形缩小。

以上是解决缩小多边形使用角坐标的问题的方法。这个方法已经在加利福尼亚州超过1200个真实建筑物的多边形上进行了测试,并且表现良好。此外,这个方法同样适用于放大多边形。

示例图片:enter image description here

0