gpt4 book ai didi

python - 在 Shapely 中删除重复的几何图形

转载 作者:太空宇宙 更新时间:2023-11-03 15:06:55 27 4
gpt4 key购买 nike

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

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

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]

预期的结果是:

[[(1,1),(2,2),(3,3),(4,4)], [(6,6),(7,7),(8,8),(9,9)]]

最佳答案

请注意,您不应使用 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)

来自 documentation on any() :

Return True if any element of the iterable is true. If the iterable is empty, return False.

关于python - 在 Shapely 中删除重复的几何图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31622618/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com