You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A metadata-coherence review of the live staging S1 RTC STAC items, benchmarked against the Sentinel‑2 L2A reference, surfaces several incoherences (bugs) and missing fields. Both item types are built by build_s1_rtc_stac_item in this repo (the data-pipeline register step only adds alternate-assets/storage/store/via/render links).
vv and vh data assets have identical hrefs (both → the orbit group…/s1-rtc-{tile}.zarr/{orbit}, not the VV vs VH arrays). Two data assets, different titles, byte-identical href → a non-titiler client cannot resolve VV vs VH. Affects both item types.
Cube item represents a dual-orbit cube as ascending-only. The store has both /ascending and /descending groups, but sat:orbit_state: "ascending" and the vv/vh/thumbnail/render reference /ascending only → there is no dedicated typed vv/vh asset for the /descending group. Its data is reachable only via the whole-store zarr-store asset (the store root contains both groups), not as a polarization asset, and sat:orbit_state is a misleading single value for a dual-orbit cube.
Per-acquisition data assets don't represent the item's own acquisition. The single-datetime per-acq item's vv/vh point at the whole cube orbit group (all time slices); only the render links carry sel=time={datetime}. A 1-datetime item whose data assets span N datetimes is incoherent for any non-render consumer.
Ambiguity (borderline bug vs gap)
sar:product_type: "GRD" does not capture the RTC nature. GRD is the legitimate source product, and the SAR extension defines no standard RTC value — so this is not strictly a wrong value, but nothing marks the item as radiometric-terrain-corrected γ⁰ or records the radiometry. Worth an explicit RTC/radiometry indication.
Replace the two duplicate vv/vh assets (identical href, indistinguishable) with one data asset per orbit group, named for what it is — γ⁰ RTC backscatter — with the polarizations expressed as bands:
Per-acquisition item (single orbit) → one asset gamma0-rtc-backscatter-{asc|desc} for the item's orbit.
Each asset carries bands: [{name: vv, …}, {name: vh, …}] plus data_type, nodata, unit (γ⁰ linear), gsd: 10, statistics. This makes VV vs VH addressable via bands (no more duplicate hrefs, bug #1) and gives the /descending group a first-class asset on the cube item (bug #2). The titiler render expressions (/{orbit}:vv;…) reference zarr paths, so the asset-key rename doesn't affect rendering.
Missing (vs S2)
Both item types lack:
Identity: platform, constellation: sentinel-1, instruments: [c-sar], mission (note the cube mixes S1A+S1C → platform is multi-valued, an argument it belongs per-acquisition).
gsd (10 m), item and asset level.
Projection detail: only proj:code; add proj:bbox, proj:shape, proj:transform (S2 has proj:bbox+proj:code).
Processing provenance (processing: ext): processing:level, processing:software (eopf-geozarr / s1tiling / OTB versions), processing:facility, and the DEM used for terrain correction (lineage). Essential for an RTC product.
Timestamps: created / updated (timestamps ext). updated especially — the cube is appended over time.
providers, title, description.
border_mask variable exists in the store but is not exposed as a valid-data mask asset.
Per-acquisition only:
derived_from link to its parent cube item and/or the source S1 GRD product (provenance); consider the version ext.
Cube ("tile") items: add the datacube extension
The cube items are genuine datacubes (dims time, y, x; variables vv/vh/border_mask per orbit group) but carry no structural metadata. Add the datacube extension (cube:dimensions + cube:variables) so the temporal/spatial structure is discoverable without opening the store. (S2 single-acquisition items don't need this — it's specific to the S1 cubes.)
Suggested target field set (mirror S2)
platform, constellation, instruments, mission, gsd, created, updated, providers, title/description, proj:bbox/shape/transform, per-asset data_type/nodata/unit/statistics, processing:level/software/facility + DEM lineage, datacube ext on cubes, derived_from on per-acq items; fix the vv/vh href + dual-orbit asset gap + RTC product_type label.
Notes
Source of truth: build_s1_rtc_stac_item (this repo). The data-pipeline register step (register_v1_s1_rtc / register_per_acquisition) adds alternate-assets/storage/store/via/render and is already correct (rescale 0.0,0.2 + alignment shipped in data-pipeline #275).
Summary
A metadata-coherence review of the live staging S1 RTC STAC items, benchmarked against the Sentinel‑2 L2A reference, surfaces several incoherences (bugs) and missing fields. Both item types are built by
build_s1_rtc_stac_itemin this repo (the data-pipeline register step only adds alternate-assets/storage/store/via/render links).Items reviewed (2026-06-18,
…explorer.eopf.copernicus.eu/stac):sentinel-1-grd-rtc-staging/items/s1-rtc-30TWMsentinel-1-grd-rtc-acquisitions-staging/items/s1-rtc-30TWM-20260610t061718Reference:
sentinel-2-l2a/items/S2A_MSIL2A_20260617T135751_N0512_R010_T26WME_20260617T221913.Reference baseline (S2 L2A)
platform(sentinel-2a),constellation(sentinel-2),instruments([msi]),mission,gsd,created,updated,processing:level/software/facility/version,providers,proj:bbox+proj:code,sat:*,view:*.data_type,nodata,gsd,raster:scale/offset,description.S1 RTC items carry only:
sar:*,sat:orbit_state,proj:code,renders(+ datetime/range). Big delta.Incorrect (bugs)
vvandvhdata assets have identical hrefs (both → the orbit group…/s1-rtc-{tile}.zarr/{orbit}, not the VV vs VH arrays). Twodataassets, different titles, byte-identical href → a non-titiler client cannot resolve VV vs VH. Affects both item types./ascendingand/descendinggroups, butsat:orbit_state: "ascending"and thevv/vh/thumbnail/renderreference/ascendingonly → there is no dedicated typedvv/vhasset for the/descendinggroup. Its data is reachable only via the whole-storezarr-storeasset (the store root contains both groups), not as a polarization asset, andsat:orbit_stateis a misleading single value for a dual-orbit cube.datetimeper-acq item'svv/vhpoint at the whole cube orbit group (all time slices); only the render links carrysel=time={datetime}. A 1-datetime item whose data assets span N datetimes is incoherent for any non-render consumer.Ambiguity (borderline bug vs gap)
sar:product_type: "GRD"does not capture the RTC nature. GRD is the legitimate source product, and the SAR extension defines no standard RTC value — so this is not strictly a wrong value, but nothing marks the item as radiometric-terrain-corrected γ⁰ or records the radiometry. Worth an explicit RTC/radiometry indication.Proposed asset model (resolves bugs #1–#2)
Replace the two duplicate
vv/vhassets (identical href, indistinguishable) with one data asset per orbit group, named for what it is — γ⁰ RTC backscatter — with the polarizations expressed asbands:gamma0-rtc-backscatter-asc→ href…/s1-rtc-{tile}.zarr/ascendinggamma0-rtc-backscatter-desc→ href…/s1-rtc-{tile}.zarr/descendinggamma0-rtc-backscatter-{asc|desc}for the item's orbit.Each asset carries
bands: [{name: vv, …}, {name: vh, …}]plusdata_type,nodata,unit(γ⁰ linear),gsd: 10,statistics. This makes VV vs VH addressable viabands(no more duplicate hrefs, bug #1) and gives the/descendinggroup a first-class asset on the cube item (bug #2). The titiler render expressions (/{orbit}:vv;…) reference zarr paths, so the asset-key rename doesn't affect rendering.Missing (vs S2)
Both item types lack:
platform,constellation: sentinel-1,instruments: [c-sar],mission(note the cube mixes S1A+S1C →platformis multi-valued, an argument it belongs per-acquisition).gsd(10 m), item and asset level.proj:code; addproj:bbox,proj:shape,proj:transform(S2 hasproj:bbox+proj:code).vv/vh:data_type,nodata,unit(γ⁰ linear),statistics(cf. Add statstics for visualization to bands or assets #157),raster:*. (S2 data assets have all of these.)processing:ext):processing:level,processing:software(eopf-geozarr / s1tiling / OTB versions),processing:facility, and the DEM used for terrain correction (lineage). Essential for an RTC product.created/updated(timestamps ext).updatedespecially — the cube is appended over time.providers,title,description.border_maskvariable exists in the store but is not exposed as a valid-data mask asset.Per-acquisition only:
derived_fromlink to its parent cube item and/or the source S1 GRD product (provenance); consider the version ext.Cube ("tile") items: add the datacube extension
The cube items are genuine datacubes (dims
time,y,x; variablesvv/vh/border_maskper orbit group) but carry no structural metadata. Add the datacube extension (cube:dimensions+cube:variables) so the temporal/spatial structure is discoverable without opening the store. (S2 single-acquisition items don't need this — it's specific to the S1 cubes.)Suggested target field set (mirror S2)
platform,constellation,instruments,mission,gsd,created,updated,providers,title/description,proj:bbox/shape/transform, per-assetdata_type/nodata/unit/statistics,processing:level/software/facility+ DEM lineage, datacube ext on cubes,derived_fromon per-acq items; fix the vv/vh href + dual-orbit asset gap + RTC product_type label.Notes
build_s1_rtc_stac_item(this repo). The data-pipeline register step (register_v1_s1_rtc/register_per_acquisition) adds alternate-assets/storage/store/via/render and is already correct (rescale 0.0,0.2 + alignment shipped in data-pipeline #275).