Полигон затрагивает больше чем в одной точке с Красивым

У меня есть список Красивых полигонов в Python. Узнать, который касание полигона легко, с помощью .touches() метод. Однако мне нужно что-то, что возвращается True только, когда полигоны совместно используют больше чем одну точку (другими словами, совместно использует границу). Позвольте мне проиллюстрировать:

In [1]: from shapely.geometry import Polygon
In [2]: polygons = [Polygon([(0,0),(0,1),(1,1),(1,0)]), Polygon([(1,0),(1,1),(2,1),(2,0)]), Polygon([(2,1),(2,2),(3,2),(3,1)])]

In [3]: polygons[0].touches(polygons[1])
Out[3]: True

In [4]: polygons[0].touches(polygons[2])
Out[4]: False

In [5]: polygons[1].touches(polygons[2])
Out[5]: True

В этом случае, полигон 0 и 1 доля две точки (вся граница). Полигон 1 и 2 только доли одна точка. То, что я ищу, является функцией, которая дала бы мне True, False, False в вышеупомянутом примере или просто чем-то, что возвращает количество касающейся точки, затем я могу сделать остальную часть логики сам.

И конечно, любое решение, которое не включает вручную итерацию через все точки, оптимально - если я должен сделать это, это вид поражений цель использовать Красивый :-)

6
задан Georgy 3 June 2019 в 15:13
поделиться

2 ответа

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

4
ответ дан 9 December 2019 в 20:44
поделиться

Если вы действительно хотите проверить, не разделяют ли два многоугольника более x количество точек, вы можете просто сделать это:

p0,p1,p2 = polygons
x = 2
len(set(p1.boundary.coords).intersection(p2.boundary.coords))>=x

Но я думаю, что вы можете захотеть определить, являются ли два рёбра коллинарными (и перекрывающимися).

Эта реализация предложений Эндрю, вероятно, то, что вы ищете:

>>> type(p0.intersection(p1)) is geometry.LineString
True
>>> type(p1.intersection(p2)) is geometry.LineString
False
8
ответ дан 9 December 2019 в 20:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: