code: def _recursive_split(self, bbox, zoom_level, column, row):
          
          if zoom_level == self.zoom_level:
              self.bbox_list.append(bbox)
              self.info_list.append({'zoom_level': zoom_level,
                                     'index_x': column,
                                     'index_y': row})
              return
  
          bbox_partition = bbox.get_partition(2, 2)
          for i, j in itertools.product(range(2), range(2)):
              if self._intersects_area(bbox_partition[i][j]):
                  self._recursive_split(bbox_partition[i][j], zoom_level + 1, 2 * column + i, 2 * row + 1 - j)
docs: Method that recursively creates bounding boxes of OSM grid that intersect the area.
  
          :param bbox: Bounding box
          :type bbox: BBox
          :param zoom_level: OSM zoom level
          :type zoom_level: int
          :param column: Column in the OSM grid
          :type column: int
          :param row: Row in the OSM grid
          :type row: int