def apply_srem(input_raster_file: str, metadata_file: str, output_raster_file: str) -> None: out_dir = os.path.join(os.path.dirname(output_raster_file)) os.makedirs(out_dir, exist_ok=True) m_parser = MetadataParser(metadata_file) band_id = BAND_ID[os.path.splitext(input_raster_file)[0][-3:]].value platform = m_parser.get_platform() wavelength = WAVELENGTHS[platform][band_id] angles = m_parser.get_mean_angles(band_id) with rasterio.open(input_raster_file) as src: toa_reflectance = src.read(1) / REFLECTANCE_SCALING_FACTOR profile = src.profile nodata_mask = (toa_reflectance == 0) surface_reflectance = srem.srem(toa_reflectance=toa_reflectance, wavelength=wavelength, **angles) scaled_surface_reflectance = \ surface_reflectance * REFLECTANCE_SCALING_FACTOR # crop values less than 1 for defining 1 as minimum value. scaled_surface_reflectance[scaled_surface_reflectance < 1] = 1 scaled_surface_reflectance[nodata_mask] = 0 profile.update(driver='GTiff', compress='deflate', nodata=0) with rasterio.open(output_raster_file, 'w', **profile) as dst: dst.write(scaled_surface_reflectance.astype(profile['dtype']), indexes=1)
def _test_get_platform(metadata_file, expected_platform): m_parser = MetadataParser(metadata_file) platform = m_parser.get_platform() assert platform == expected_platform