docs: def merge_all(rasters, roi=None, dest_resolution=None, merge_strategy=MergeStrategy.UNION,
                shape=None, ul_corner=None, crs=None, pixel_strategy=PixelStrategy.FIRST,
                resampling=Resampling.nearest):
      """Merge a list of rasters, cropping by a region of interest.
         There are cases that the roi is not precise enough for this cases one can use,
         the upper left corner the shape and crs to precisely define the roi.
         When roi is provided the ul_corner, shape and crs are ignored
      """
  
      first_raster = rasters[0]
  
      if roi:
          crs = crs or roi.crs
  
      dest_resolution = dest_resolution or _dest_resolution(first_raster, crs)
  
      # Create empty raster
      empty = GeoRaster2.empty_from_roi(
          roi, resolution=dest_resolution, band_names=first_raster.band_names,
          dtype=first_raster.dtype, shape=shape, ul_corner=ul_corner, crs=crs)
  
      # Create a list of single band rasters
      all_band_names, projected_rasters = _prepare_rasters(rasters, merge_strategy, empty,
                                                           resampling=resampling)
      assert len(projected_rasters) == len(rasters)
  
      prepared_rasters = _apply_pixel_strategy(projected_rasters, pixel_strategy)
  
      # Extend the rasters list with only those that have the requested bands
      prepared_rasters = _explode_rasters(prepared_rasters, all_band_names)
  
      if all_band_names:
          # Merge common bands
          prepared_rasters = _merge_common_bands(prepared_rasters)
  
          # Merge all bands
          raster = reduce(_stack_bands, prepared_rasters)
  
          return empty.copy_with(image=raster.image, band_names=raster.band_names)
  
      else:
          raise ValueError("result contains no bands, use another merge strategy")