Ошибка пересечения фигурного многоугольникаPython

Программы на Python
Anonymous
Ошибка пересечения фигурного многоугольника

Сообщение Anonymous »

Когда я использую shapely.intersection для двух очень конкретных фигур a (зеленый) и b (синий), я получаю очень разные результаты для shapely.intersection(a, b) и shapely.intersection(b, a). Второй дает именно ту геометрию пересечения, которую я ожидал, но первый определенно не дает:
Изображение

Чтобы воспроизвести:

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

import shapely
import shapely.plotting
import matplotlib.pyplot

a = shapely.Polygon([
(8350, 263),
(7000, 500),
(9400, 653),
(9280, 252.61324313721744),
(9262, 263.18805915582)
])

b = shapely.Polygon([
(8541, 656),
(9400, 653),
(9280, 252.6132431372174),
(8795, -776)
])

print(f'{a.is_valid=}')
print(f'{b.is_valid=}')

ab = shapely.intersection(a, b)
ba = shapely.intersection(b, a)

print(f'{shapely.equals(ab, ba)=}')

shapely.plotting.plot_polygon(a, color='green', add_points=False)
shapely.plotting.plot_polygon(b, color='blue', add_points=False)
shapely.plotting.plot_polygon(ab, color='black')
matplotlib.pyplot.show()

shapely.plotting.plot_polygon(a, color='green', add_points=False)
shapely.plotting.plot_polygon(b, color='blue', add_points=False)
shapely.plotting.plot_polygon(ba, color='black')
matplotlib.pyplot.show()
Версия: shapely==2.0.6
Почему это происходит? Это проблема с моей стороны или проблема с формой/GEOS?
Я подозреваю, что это вызвано множеством совпадающих (или очень близких к совпадающим) точек на двух полигонах и/или проблемами с плавающей запятой.
Есть ли надежное решение без изменения геометрии?

Подробнее здесь: https://stackoverflow.com/questions/790 ... on-failure

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