У меня есть большое количество полигонов (~ 100000) и попытайтесь найти разумный способ вычисления их пересекающейся области с регулярными ячейками сетки.
В настоящее время я создаю многоугольники и ячейки сетки, используя красивые (основанные на их угловых координатах). Затем, используя простой цикл 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
(BTW: ячейки сетки имеют размеры 0,25x0,25 и многоугольники 1x1 при макс.)
На самом деле это довольно быстро для отдельного комбинированного многоугольника/сетки со скоростью около 0,003 секунды. Однако запуск этого кода на огромном количестве полигонов (каждый из которых может пересекать десятки ячеек сетки) занимает около 15 минут (до 30 + мин в зависимости от количества пересекающихся ячеек сетки) на моей машине, что неприемлемо. К сожалению, я понятия не имею, как можно написать код для пересечения многоугольников, чтобы получить область перекрытия. Есть ли у вас какие-либо советы? Есть ли альтернатива красивой?