Overlap Group -- Centre¶
One of three small rasters sharing a CRS and a pixel grid, with deliberate partial overlap and a distinct constant value each. This is the middle member, and the second red band -- the alias ambiguity. The three exist only as a group: odc.stac.load and stackstac.stack take a sequence of Items and their whole reason for existing is what happens across it, which no standalone raster case in this corpus could express.
| Property | Value |
|---|---|
| Case ID | overlap_group_centre |
| Category | raster |
| Format | GeoTIFF |
| CRS | EPSG:32633 |
| Location | Southern Italy / Sicily (synthetic, UTM 33N) — 15.00°E, 40.65°N → 15.01°E, 40.65°N |
| Test tier | unit |
| Size class | tiny |
| Storage class | bundled |
| Redistributable | yes |
| Loader | rasterio |
| Status | validated |
Use this case¶
import pytest
@pytest.mark.geocase_case("overlap_group_centre")
def test_overlap_group_centre(geocase_case) -> None:
data = geocase_case.load()
assert data is not None
Use GeoCase in your tests¶
Install the complete set of vector, raster, and NetCDF dependencies:
What this case checks¶
Confirm that a consumer compositing this group across its overlaps produces a result whose provenance is readable: each member carries one constant value, so which member won a given pixel is visible by inspection rather than by arithmetic.
Risk types covered¶
Expected behavior¶
| Assertion | Expected |
|---|---|
expect_loadable |
yes |
expect_crs |
yes |
expected_epsg |
32633 |
expect_nodata |
yes |
expected_band_count |
1 |
expected_dtype |
float32 |
expected_shape |
[12, 12] |
expected_nodata_value |
-9999.0 |
nodata_convention |
sentinel |
expected_band_names |
red |
Known answer¶
Computed from the actual bytes and gated against them. Grade your own output against these.
| Quantity | Value |
|---|---|
| Mean over valid pixels | 20.0 |
| Mean including NoData | -49.5763888889 |
| NoData pixels | 1 |
| Bounds (case CRS) | [500180.0, 4499460.0, 500540.0, 4499820.0] |
Notes¶
Three small rasters that exist only as a group. They share a directory for the same reason the footprint edge cases and the transform conventions do: their value is entirely in the relationship between them, and no one of them means anything alone.
Why these exist¶
Every other raster case in this catalog is one standalone file. That made four things unexpressible:
- stacking order,
- mosaic compositing,
- temporal grouping,
- and two assets in one STAC Item.
odc.stac.load and stackstac.stack both take a sequence of Items, and
what happens across that sequence is their whole reason for existing. The
2026-08-31 round-2 validation run could only ever hand them a list of one, so
the entire surface went untested — and it is the surface those two libraries
are.
The geometry¶
| Case | Stack order | Constant value | Band alias | Nodata corner |
|---|---|---|---|---|
overlap_group_north |
1 | 10.0 | red |
top-left |
overlap_group_centre |
2 | 20.0 | red |
top-right |
overlap_group_south |
3 | 30.0 | nir |
bottom-left |
Each is 12×12 at 30 m in EPSG:32633, offset from its predecessor by 6 cells
diagonally — half its width. Four properties are load-bearing and each is
gated in tests/unit/test_raster_groups.py:
- Partial overlap. Disjoint members never composite; identical members make compositing unobservable. Consecutive members overlap in a quarter of their area.
- A shared pixel grid. Off-grid members would turn every compositing difference into a resampling difference, which is a different finding on a different axis.
- Distinct constant values. "Which pixel won" is then readable by inspection rather than by arithmetic.
- One nodata corner each, at a different corner. A composite's fill behaviour is visible as well as its ordering.
The shared band alias¶
Two of the three declare common_name: red. That is the ordinary Sentinel-2
shape — several assets legitimately carrying the same alias — and it is what
makes a consumer resolving the alias silently to the first candidate
visible rather than invisible. odc-stac does exactly that today, and its
source carries its own # maybe warn about ambiguity? note.
The two red members carry different constant values (10.0 and 20.0), so resolving to the wrong one is a wrong value, not merely a wrong provenance.
Reading them as STAC Items¶
from geocase.stac import items_for_cases
items = items_for_cases(
include_ids=[
"overlap_group_north",
"overlap_group_centre",
"overlap_group_south",
],
assets="per_band",
)
geocase.stac normalises proj:bbox and emits both proj:epsg and
proj:code, so the same list is byte-identical input for stackstac and
odc-stac. See docs/plans/38-six-consumer-round-2-and-the-stac-adapter.md.
Required capabilities¶
loadmulti-item-stacknodata-check
Files¶
- Primary:
overlap_group_centre.tif - Notes:
notes.md
Source and license¶
- Source: geocase-curated
- License: MIT
Tags¶
delivery:multi-file geotiff group mosaic overlap raster stac
Related cases¶
- Overlap Group -- North --
overlap_group_north - Overlap Group -- South --
overlap_group_south - Bottom-Up DEM (Positive Y Resolution) --
bottom_up_dem_small - COG Multispectral Small --
cog_multispectral_small - DEM NaN NoData Small --
dem_nan_nodata_small