
Чтобы воспроизвести:
Код: Выделить всё
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()
Почему это происходит? Это проблема с моей стороны или проблема с формой/GEOS?
Я подозреваю, что это вызвано множеством совпадающих (или очень близких к совпадающим) точек на двух полигонах и/или проблемами с плавающей запятой.
Есть ли надежное решение без изменения геометрии?
Подробнее здесь: https://stackoverflow.com/questions/790 ... on-failure