CRS Family Pair -- Projected (UTM 33N)¶
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.
| 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:
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¶
loadcrs-checkreprojection-check
Files¶
- Primary:
crs_family_pair_projected.tif - Notes:
notes.md
Source and license¶
- Source: geocase-curated
- License: MIT
Tags¶
crs geotiff pair raster reprojection
Related cases¶
- CRS Family Pair -- Geographic (WGS 84) --
crs_family_pair_geographic - GeoTIFF UTM Boundary --
geotiff_utm_boundary - Rasterize Match WGS84 Polygon --
rasterize_match_wgs84_polygon - All Valid Rectangular Raster --
all_valid_rectangular - Bottom-Up DEM (Positive Y Resolution) --
bottom_up_dem_small