Source code for smosaic.smosaic_merge_tifs

import os
import sys
import subprocess
from osgeo import gdal

try:
    from osgeo_utils import gdal_merge as gm
    gm_available = True
except ImportError:
    gm_available = False

from smosaic.smosaic_utils import get_all_cloud_configs

[docs] def merge_tifs(tif_files, output_path, band, path_row=None, extent=None): """ Merge multiple TIFF files into a single TIFF file using GDAL merge. Args: tif_files (list): List of input TIFF file paths to merge. output_path (str): Path for the output merged TIFF file. band (str): Spectral band identifier for the merged output. path_row (str, optional): Path/row identifier for satellite data organization. Defaults to None. extent (tuple/list, optional): Spatial extent for the merged output as [minx, miny, maxx, maxy]. If None, uses the combined extent of all input files. Defaults to None. """ cloud_dict = get_all_cloud_configs() if any(config['cloud_band'] == band for config in cloud_dict.values()): nodata = next((config['no_data_value'] for config in cloud_dict.values() if config['cloud_band'] == band), None) else: nodata = 0 src_ds = gdal.Open(tif_files[0]) dt = src_ds.GetRasterBand(1).DataType dtype_name = gdal.GetDataTypeName(dt) src_ds = None merge_args = ['', '-q', '-ot', dtype_name, '-of', 'GTiff', '-o', output_path] if nodata is not None: merge_args.extend(['-n', str(nodata), '-a_nodata', str(nodata)]) if gm_available: merge_args.extend(tif_files) gm.main(merge_args) else: cmd = ['gdal_merge.py'] + merge_args[1:] + tif_files with open(os.devnull, 'w') as devnull: subprocess.run(cmd, stdout=devnull, stderr=devnull, check=True) return output_path