我使用 QGIS 创建了一个 shapefile,但 shapefile 中的一些多边形在一个奇点处相交,创建了一个领结多边形。我希望添加一个与两个多边形相邻的点,该点可用于将两个多边形合并为一个与其自身没有交集的多边形。下面是两个多边形创建领结的示例图像。我希望将点插入其中一个蓝色点以合并两个点。新点也不得导致新合并的多边形与其他多边形之间的相交。
我无法确定蓝点应该在哪里。我相信多边形在形状文件中按顺时针方向表示,这意味着在示例场景中,新点将位于 (LowerPolygonNextX,UpperPolygonPreviousY) 或 (UpperPolygonNextX,LowerPolygonPreviousY),但我需要根据它们之间的关系采用通用方法。我认为我还需要处理其中一个(或两个)多边形在这一点开始和结束的情况,因为这个重复点可能会导致一些自相交问题。
我最终通过使用现有点连接两个多边形来解决这个问题,而不是像这样创建一个新点: 。 这是供感兴趣的人使用的代码。 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