Удаление дублирующих геометрий

У меня есть один список полигонов в формате стройного питона. Из этого списка я хочу извлечь только уникальные полигоны, удалив дубликаты.

Как сделать это быстрее? (Мой список содержит тысячи полигонов)

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)]]

1 ответ

Решение

Вы можете создать список, в котором будут храниться уникальные многоугольники, а затем для каждого многоугольника в вашем списке перебрать многоугольники, хранящиеся во внешнем списке, и, если ни один из них не пересекается с новым, добавить его в список и использовать 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.intersects(poly) for p in uniqpolies):
        uniqpolies.append(poly)

Из документации -

Вернуть True если какой-либо элемент итерируемого является истинным. Если итерация пуста, вернуть False,

Другие вопросы по тегам