У меня большое количество многоугольников (~ 100000), и я пытаюсь найти умный способ вычисления их площади пересечения с помощью ячеек регулярной сетки.
В настоящее время я создаю многоугольники и ячейки сетки, используя shapely (на основе их угловых координат). Затем, используя простой цикл for, я просматриваю каждый многоугольник и сравниваю его с соседними ячейками сетки.
Просто небольшой пример для иллюстрации многоугольников / ячеек сетки.
from shapely.geometry import box, Polygon
# Example polygon
xy = [[130.21001, 27.200001], [129.52, 27.34], [129.45, 27.1], [130.13, 26.950001]]
polygon_shape = Polygon(xy)
# Example grid cell
gridcell_shape = box(129.5, -27.0, 129.75, 27.25)
# The intersection
polygon_shape.intersection(gridcell_shape).area
(Кстати: ячейки сетки имеют размеры 0,25x0,25, а полигоны 1x1 при макс.)
На самом деле это довольно быстро для отдельной комбинации полигон / ячейка сетки - около 0,003 секунды. Однако запуск этого кода на огромном количестве многоугольников (каждый из которых может пересекать десятки ячеек сетки) занимает около 15+ минут (до 30+ минут в зависимости от количества пересекающихся ячеек сетки) на моем компьютере, что неприемлемо. К сожалению, я понятия не имею, как можно написать код для пересечения многоугольников, чтобы получить область перекрытия. Есть ли у вас какие-либо советы? Есть ли альтернатива shapely?