From d7c1d62a24272fee60bbf0a6431f0535a798ef0e Mon Sep 17 00:00:00 2001 From: Joachim Ungar Date: Tue, 16 Dec 2025 11:20:07 +0100 Subject: [PATCH 1/2] make sure array mask is propagated after applying offset to band --- mapchete_eo/io/assets.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/mapchete_eo/io/assets.py b/mapchete_eo/io/assets.py index 69d7a59..b39e96a 100644 --- a/mapchete_eo/io/assets.py +++ b/mapchete_eo/io/assets.py @@ -32,7 +32,7 @@ class STACRasterBandProperties(BaseModel): - nodata: NodataVal = None + nodata: Optional[NodataVal] = None data_type: Optional[str] = None scale: float = 1.0 offset: float = 0.0 @@ -40,9 +40,9 @@ class STACRasterBandProperties(BaseModel): @staticmethod def from_asset( asset: pystac.Asset, - nodataval: NodataVal = None, + nodataval: Optional[NodataVal] = None, ) -> STACRasterBandProperties: - if asset.extra_fields.get("raster:offset") is not None: + if asset.extra_fields.get("raster:offset", {}): properties = dict( offset=asset.extra_fields.get("raster:offset"), scale=asset.extra_fields.get("raster:scale"), @@ -87,16 +87,22 @@ def asset_to_np_array( ) logger.debug("reading asset %s and indexes %s ...", asset, indexes) - data = read_raster( + array = read_raster( inp=path, indexes=indexes, grid=grid, resampling=resampling.name, dst_nodata=band_properties.nodata, - ).data + ).masked_array() if apply_offset and band_properties.offset: - data_type = band_properties.data_type or data.dtype + logger.debug( + "apply offset %s and scale %s to asset %s", + band_properties.offset, + band_properties.scale, + asset, + ) + data_type = band_properties.data_type or array.dtype # determine value range for the target data_type clip_min, clip_max = dtype_ranges[str(data_type)] @@ -105,9 +111,9 @@ def asset_to_np_array( if clip_min == band_properties.nodata: clip_min += 1 - data[:] = ( + array[~array.mask] = ( ( - ((data * band_properties.scale) + band_properties.offset) + ((array[~array.mask] * band_properties.scale) + band_properties.offset) / band_properties.scale ) .round() @@ -115,8 +121,7 @@ def asset_to_np_array( .astype(data_type, copy=False) .data ) - - return data + return array def get_assets( From 111995dfab6814da8b4cf8ac1fbfa5af9f789f4b Mon Sep 17 00:00:00 2001 From: Joachim Ungar Date: Tue, 16 Dec 2025 12:55:39 +0100 Subject: [PATCH 2/2] use ReferencedRaster.array --- mapchete_eo/io/assets.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mapchete_eo/io/assets.py b/mapchete_eo/io/assets.py index b39e96a..6f421be 100644 --- a/mapchete_eo/io/assets.py +++ b/mapchete_eo/io/assets.py @@ -93,8 +93,7 @@ def asset_to_np_array( grid=grid, resampling=resampling.name, dst_nodata=band_properties.nodata, - ).masked_array() - + ).array if apply_offset and band_properties.offset: logger.debug( "apply offset %s and scale %s to asset %s",