Как обнаружить общие края с помощью ShapelyPython

Программы на Python
Ответить
Anonymous
 Как обнаружить общие края с помощью Shapely

Сообщение Anonymous »


Изображение

У меня есть группа треугольников, которые будут закрывать область плиткой, одна из возможных конфигураций показана на прилагаемом изображении. Я хочу узнать, сколько ребер каждый треугольник разделяет с соседними треугольниками. Таким образом, треугольник сам по себе не будет иметь общих ребер, в то время как полностью окруженный треугольник будет иметь общие все три ребра. На изображении центральный треугольник имеет общий верхний край с треугольником выше, но не имеет соседей с двух других сторон. Поэтому мне нужен способ определить, что он имеет только одно общее ребро с соседом.
Я определил каждый треугольник как многоугольник в shapely, а затем ввел список многоугольников треугольника в SRTtree. Затем попробовал предикаты «касается» и «пересекается».
Оба выводят каждый соседний треугольник, который касается любой из вершин. Предпочтительный результат — выводить только треугольники с общими ребрами.
Я также пытался использовать операции покрытия для идентификации ребер, не имеющих соседей. К сожалению, обнаружение недопустимого края возвращает пустой набор для каждого треугольника. Несмотря на то, что рядом с двумя краями центрального треугольника нет ничего, он, похоже, удовлетворяет требованиям покрытия и не содержит недопустимых краев.
Приведенный ниже минимальный воспроизводимый пример (MRE) содержит только четыре треугольника из диаграммы: центральный треугольник, треугольник над ним, имеющий общее ребро, треугольник, имеющий общую вершину, и треугольник, который не касается исходного треугольника.

Код: Выделить всё

import shapely

triangles.append=shapely.Polygon(shell=((-0.5,0.866),(0.5,0.866),(0,0)),holes=None))
triangles.append=shapely.Polygon(shell=((-0.5,0.866),(0.5,0.866),(0,1.732)),holes=None))
triangles.append=shapely.Polygon(shell=((0.5,0.866),(1.5,0.866),(1,0)),holes=None))
triangles.append=shapely.Polygon(shell=((1,0),(2,0),(1.5,0.866)),holes=None))

tree=shapely.STRtree(triangles)

touching_triangles=tree.query(triangles[0], predicate="touches")
intersecting_triangles=tree.query(triangles[0], predicate="intersects")
identified_edges=shapely.coverage_invalid_edges(triangles)
Так как же мне идентифицировать общие ребра, исключая общие вершины?

Подробнее здесь: https://stackoverflow.com/questions/798 ... th-shapely
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»