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