删除 Shapely 中的重复几何图形

Bor*_*rys 4 python geometry duplicates shapely

我有一个 Shapely 多边形列表。从该列表中,我只想提取去除重复项的唯一多边形。

如何以更快的方式做到这一点?(我的列表包含数千个多边形)

from shapely.geometry import Polygon

lists = [[(1,1),(2,2),(3,3),(4,4)], [(6,6),(7,7),(8,8),(9,9)], [(1,1),(2,2),(3,3),(4,4)]]
polys = [Polygon(item) for item in lists] ##This is given condition

for poly in polys:

    test = [p.intersects(poly) for p in polys] ##Return true or false
    print test


[True, False, True]
[False, True, False]
[True, False, True]
Run Code Online (Sandbox Code Playgroud)

预期的结果是:

[[(1,1),(2,2),(3,3),(4,4)], [(6,6),(7,7),(8,8),(9,9)]]
Run Code Online (Sandbox Code Playgroud)

Ana*_*mar 8

请注意,您不应使用intersects(),因为这会将任何重叠的多边形识别为重复。使用equals()来代替。

您可以创建一个存储唯一多边形的列表,然后对于列表中的每个多边形,循环遍历存储在外部列表中的多边形,如果它们都不等于新的多边形,则将其添加到列表中,您可以any()为此使用函数。

例子:

from shapely.geometry import Polygon

lists = [[(1,1),(2,2),(3,3),(4,4)], [(6,6),(7,7),(8,8),(9,9)], [(1,1),(2,2),(3,3),(4,4)]]
polys = [Polygon(item) for item in lists] ##This is given condition
uniqpolies = []
for poly in polys:

    if not any(p.equals(poly) for p in uniqpolies):
        uniqpolies.append(poly)
Run Code Online (Sandbox Code Playgroud)

文档中any()

True如果迭代的任何元素为真,则返回。如果可迭代对象为空,则返回False