code: def generate_tile_coordinates(roi, num_tiles):
      # type: (GeoVector, Tuple[int, int]) -> Iterator[GeoVector]
      
      bounds = roi.get_shape(roi.crs).bounds
  
      x_range = np.linspace(bounds[0], bounds[2], int(num_tiles[0]) + 1)
      y_range = np.linspace(bounds[1], bounds[3], int(num_tiles[1]) + 1)
  
      for y_start, y_end in zip(y_range[:-1], y_range[1:]):
          for x_start, x_end in zip(x_range[:-1], x_range[1:]):
              new_roi = GeoVector(
                  Polygon.from_bounds(x_start, y_start, x_end, y_end),
                  roi.crs
              )
  
              yield new_roi
docs: Yields N x M rectangular tiles for a region of interest.
  
      Parameters
      ----------
      roi : GeoVector
          Region of interest
      num_tiles : tuple
          Tuple (horizontal_tiles, vertical_tiles)
  
      Yields
      ------
      ~telluric.vectors.GeoVector