idx = index.Index()
for pos, cell in enumerate(grid_cells):
    idx.insert(pos, cell.bounds)
for poly in polygons:
    merged_cells = cascaded_union([grid_cells[pos] for pos in idx.
        intersection(poly.bounds)])
Более быстрый способ пересечения многоугольника с фигурным