Skip to content

Commit

Permalink
Issue #690/#712 fix band order bug
Browse files Browse the repository at this point in the history
  • Loading branch information
soxofaan committed Jan 23, 2025
1 parent 77c8673 commit 8d200c9
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 24 deletions.
2 changes: 1 addition & 1 deletion openeo/_version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "0.38.0a2"
__version__ = "0.38.0a3"
11 changes: 6 additions & 5 deletions openeo/metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -437,16 +437,17 @@ def resample_spatial(
dimensions = list(self._dimensions)

# Find and replace spatial dimensions
spatial_indixes = [i for i, d in enumerate(dimensions) if isinstance(d, SpatialDimension)]
if len(spatial_indixes) != 2:
raise MetadataException(f"Expected two spatial resolutions but found {spatial_indixes=}")
for i in spatial_indixes:
spatial_indices = [i for i, d in enumerate(dimensions) if isinstance(d, SpatialDimension)]
if len(spatial_indices) != 2:
raise MetadataException(f"Expected two spatial resolutions but found {spatial_indices=}")
assert len(resolution) == 2
for i, r in zip(spatial_indices, resolution):
dim: SpatialDimension = dimensions[i]
dimensions[i] = SpatialDimension(
name=dim.name,
extent=dim.extent,
crs=projection or dim.crs,
step=resolution[i] if resolution[i] else dim.step,
step=r if r != 0.0 else dim.step,
)

return self._clone_and_update(dimensions=dimensions)
Expand Down
43 changes: 25 additions & 18 deletions tests/test_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,23 @@
)
from openeo.testing.stac import StacDummyBuilder

CUBE_METADATA_XYTB = CubeMetadata(
dimensions=[
SpatialDimension(name="x", extent=[2, 7], crs=4326, step=0.1),
SpatialDimension(name="y", extent=[49, 52], crs=4326, step=0.1),
TemporalDimension(name="t", extent=["2024-09-01", "2024-12-01"]),
BandDimension(name="bands", bands=[Band("B2"), Band("B3")]),
]
)

@pytest.fixture
def xytb_cube_metadata() -> CubeMetadata:
"""Generic 4D cube (x, y, temporal, band) metadata"""
return CubeMetadata(
dimensions=[
SpatialDimension(name="x", extent=[2, 7], crs=4326, step=0.1),
SpatialDimension(name="y", extent=[49, 52], crs=4326, step=0.1),
TemporalDimension(name="t", extent=["2024-09-01", "2024-12-01"]),
BandDimension(name="bands", bands=[Band("B2"), Band("B3")]),
]
)
CUBE_METADATA_TBXY = CubeMetadata(
dimensions=[
TemporalDimension(name="t", extent=["2024-09-01", "2024-12-01"]),
BandDimension(name="bands", bands=[Band("B2"), Band("B3")]),
SpatialDimension(name="x", extent=[2, 7], crs=4326, step=0.1),
SpatialDimension(name="y", extent=[49, 52], crs=4326, step=0.1),
]
)


def test_metadata_get():
Expand Down Expand Up @@ -941,20 +946,22 @@ def test_metadata_from_stac_temporal_dimension(tmp_path, stac_dict, expected):
({"resolution": [11, 22], "projection": 32631}, {"crs": 32631, "step": 11}, {"crs": 32631, "step": 22}),
],
)
def test_metadata_resample_spatial(xytb_cube_metadata, kwargs, expected_x, expected_y):
metadata = xytb_cube_metadata.resample_spatial(**kwargs)
@pytest.mark.parametrize("cube_metadata", [CUBE_METADATA_XYTB, CUBE_METADATA_TBXY])
def test_metadata_resample_spatial(cube_metadata, kwargs, expected_x, expected_y):
metadata = cube_metadata.resample_spatial(**kwargs)
assert isinstance(metadata, CubeMetadata)
assert metadata.spatial_dimensions == [
SpatialDimension(name="x", extent=[2, 7], **expected_x),
SpatialDimension(name="y", extent=[49, 52], **expected_y),
]
assert metadata.temporal_dimension == xytb_cube_metadata.temporal_dimension
assert metadata.band_dimension == xytb_cube_metadata.band_dimension
assert metadata.temporal_dimension == cube_metadata.temporal_dimension
assert metadata.band_dimension == cube_metadata.band_dimension


def test_metadata_resample_cube_spatial(xytb_cube_metadata):
metadata1 = xytb_cube_metadata.resample_spatial(resolution=(11, 22), projection=32631)
metadata2 = xytb_cube_metadata.resample_spatial(resolution=0.5)
@pytest.mark.parametrize("cube_metadata", [CUBE_METADATA_XYTB, CUBE_METADATA_TBXY])
def test_metadata_resample_cube_spatial(cube_metadata):
metadata1 = cube_metadata.resample_spatial(resolution=(11, 22), projection=32631)
metadata2 = cube_metadata.resample_spatial(resolution=0.5)

assert metadata1.spatial_dimensions == [
SpatialDimension(name="x", extent=[2, 7], crs=32631, step=11),
Expand Down

0 comments on commit 8d200c9

Please sign in to comment.