有没有办法通过插入合并点将领结多边形合并为有效多边形

问题描述 投票:0回答:1

我使用 QGIS 创建了一个 shapefile,但 shapefile 中的一些多边形在一个奇点处相交,创建了一个领结多边形。我希望添加一个与两个多边形相邻的点,该点可用于将两个多边形合并为一个与其自身没有交集的多边形。下面是两个多边形创建领结的示例图像。我希望将点插入其中一个蓝色点以合并两个点。新点也不得导致新合并的多边形与其他多边形之间的相交。 Bowtie polygons

我无法确定蓝点应该在哪里。我相信多边形在形状文件中按顺时针方向表示,这意味着在示例场景中,新点将位于 (LowerPolygonNextX,UpperPolygonPreviousY) 或 (UpperPolygonNextX,LowerPolygonPreviousY),但我需要根据它们之间的关系采用通用方法。我认为我还需要处理其中一个(或两个)多边形在这一点开始和结束的情况,因为这个重复点可能会导致一些自相交问题。

python geometry polygon shapefile qgis
1个回答
0
投票

我最终通过使用现有点连接两个多边形来解决这个问题,而不是像这样创建一个新点: Bowtie polygon connected。 这是供感兴趣的人使用的代码。 Polys 是点子列表的列表。

def merge_bowtie_polygons(polys):
print('merging')
counter = 0
seen_points = set()
removed_indexes = set()
merged = False
for poly in polys:
    sublist_set = set(map(tuple, poly))
    seen_points.update(sublist_set)
polys.sort(key=len,reverse=False)
for i in range(len(polys)):
    sublist1 = polys[i]
    for j in range(i + 1, len(polys)):
        sublist2 = polys[j]
        for point in sublist1:
            if point in sublist2:
                polys[j] = merge(sublist1, sublist2, point)
                removed_indexes.add(i)
                merged = True
                counter += 1
                break
        if merged:
            merged = False
            break
newPolys = []
for i in range(len(polys)):
    if i not in removed_indexes:
        newPolys.append(polys[i])
print(counter)
return newPolys
© www.soinside.com 2019 - 2024. All rights reserved.