Skip to content

CRS Family Pair -- Projected (UTM 33N)

rasterGeoTIFFEPSG:32633tinybundled

One half of a matched pair describing the same ground in two CRS families: this is the projected half, written directly, in metres. 31 of the corpus's 34 rasters were EPSG:32633, which made any "same case, two CRSs" assertion untestable and left reprojection sweeps leaning entirely on the target CRS for variation. The pair makes the unit-change axis assertable from inside the corpus.

Pixels of crs_family_pair_projected, a 16x16 raster, with NoData in magenta
1 band, 16x16 px, float32, sentinel NoData. Rendered from the case's actual pixels, contrast-stretched for display; NoData is shown in magenta.
Property Value
Case ID crs_family_pair_projected
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("crs_family_pair_projected")
def test_crs_family_pair_projected(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:

pip install "geocase[all]"

View GeoCase on PyPI.

What this case checks

Confirm that a consumer reading both halves agrees about the ground they describe, so that a resolution or bounds option interpreted in the wrong linear unit shows up as a disagreement between the two rather than as a plausible-looking single answer.

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 [16, 16]
expected_nodata_value -9999.0
nodata_convention sentinel
expected_band_names elevation

Known answer

Computed from the actual bytes and gated against them. Grade your own output against these.

Quantity Value
Mean over valid pixels 128.0
Mean including NoData 88.44140625
NoData pixels 1
Bounds (case CRS) [500000.0, 4499520.0, 500480.0, 4500000.0]

Notes

The same ground written twice: once in a projected CRS (EPSG:32633, metres) and once in a geographic one (EPSG:4326, degrees). A declared pair, in the manner of utm_zone_33n_to_32n_pair and crs_mismatch_overlay_pair — a divergence that is a relationship between two inputs is not expressible by two independently selectable cases.

Why this exists

31 of the catalog's 34 rasters were EPSG:32633. That made any "same case, two CRSs" assertion untestable, and left reprojection sweeps leaning entirely on the target CRS for variation.

It matters because the unit change is what pays. Round 2's odc-stac HIGH defect needed nothing more exotic than crs= set to a target whose linear unit differs from the source's — a single option value, and the one a consumer author is least likely to think of testing. Until this pair, that axis was reachable only from outside the corpus, through an external consumer's option.

How the two halves relate

crs_family_pair_projected.tif is authored: a 16×16 float32 ramp at 30 m with a -9999.0 nodata cell in the top-left corner.

crs_family_pair_geographic.tif is derived from it by reprojection (scripts/generate_raster_fixtures.py, _write_geographic_twin), which is why it is 14×18 rather than 16×16 — a reprojected grid is not the same grid.

Deriving rather than authoring is deliberate, and follows rotated_two_islands_warped_reference: a hand-authored twin drifts away from the file it is the twin of, and that drift is what broke hole_center_nodata. The two halves only mean anything together if they describe the same ground, so the guarantee has to be structural rather than a promise in a comment.

tests/unit/test_raster_groups.py gates both directions: that the two are in different CRS families with different linear units, and that their footprints agree in WGS 84 to within a millidegree.

Required capabilities

  • load
  • crs-check
  • reprojection-check

Files

Browse this case on GitHub

Source and license

  • Source: geocase-curated
  • License: MIT

Tags

crs geotiff pair raster reprojection