Подтвердить что ты не робот

Исправить неверный полигон в Shapely

Shapely определяет полигон как недопустимый, если пересекаются какие-либо его сегменты, включая коллинеарные. Многие программные пакеты создают область или область с "вырезом", как показано здесь, который имеет коллинеарные сегменты:

enter image description here

>>> pp = Polygon([(0,0), (0,3), (3,3), (3,0), (2,0), 
                  (2,2), (1,2), (1,1), (2,1), (2,0), (0,0)])
>>> pp.is_valid
WARNING:shapely.geos:Self-intersection at or near point 2 0
False

Естественно, вырез может быть реализован изначально в Shapely, или эта же геометрия может быть реализована в виде двух допустимых многоугольников, но если у меня есть только список точек, показанный выше, легко ли это "исправить" (создайте правильную геометрию из этого список точек)?

4b9b3361

Ответ 1

Я нашел решение, которое работает для конкретного случая:

>>> pp2 = pp.buffer(0)
>>> pp2.is_valid
True
>>> pp2.exterior.coords[:]
[(0.0, 0.0), (0.0, 3.0), (3.0, 3.0), (3.0, 0.0), (2.0, 0.0), (0.0, 0.0)]
>>> pp2.interiors[0].coords[:]
[(2.0, 1.0), (2.0, 2.0), (1.0, 2.0), (1.0, 1.0), (2.0, 1.0)]