Удаление дублирующих геометрий
У меня есть один список полигонов в формате стройного питона. Из этого списка я хочу извлечь только уникальные полигоны, удалив дубликаты.
Как сделать это быстрее? (Мой список содержит тысячи полигонов)
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
,