Мой вопрос прост, но решение может быть очень сложным. У меня есть коллекция треугольников, и я хочу найти их объединение. Треугольники задаются стандартным образом: списком координатных точек (по 2 координаты на каждую точку) и списком соединений, где каждая линия представляет собой треугольник, заданный индексами его вершин:
точки:
[ 15.02716923 81.72425842]
[ 21.42242702 79.91459549]
[ 24.87068939 79.0222168 ]
[ 29.25767326 77.96657562]
[ 34.07667923 76.65890503]
треугольники:
7 8 9
8 18 20
8 20 10
8 10 9
9 10 11
9 11 108
Я могу очень эффективно найти союз, используя cascaded_union
:
import shapely.geometry as geometry
from shapely.ops import cascaded_union, polygonize
polys = [geometry.Polygon([[points[point, 0], points[point, 1]] for point in triangle]) for triangle in triangles]
result = cascaded_union (polys)
Проблема в том, что это дает координаты результирующего многоугольника. Принимая во внимание, что я хотел бы окружность result
в качестве индексов в исходном массиве points
. Пока я не нашел способ сделать это. Одним из способов может быть написание моей собственной объединяющей функции, которая выдает индексы точек вместо самих координат.
points
, а точка pi будет иметь координаты xi, yi. Однакоcascaded_union
может возвращать только серию координат, а не серию точечных индексов (или точечных объектов, если уж на то пошло). - person John   schedule 30.03.2017shapely
имеет какую-либо функциональность для этого конкретного случая. Кроме того, в этих условиях вы можете построить специальный алгоритм, как вы предложили, который превзойдет по производительности красивое объединение, потому что геометрия действительно не нужна. Единственное условие, которое, по моему мнению, могло бы упростить алгоритм, это если треугольники в списке уникальны и не перекрывают друг друга, кроме как по краям (что верно, если моя интерпретация «сетки» верна). - person eguaio   schedule 30.03.2017