...
2. Development catalogue available here: https://radiantearth.github.io/stac-browser/#/external/pgstac.demo.cloudferro.com
Sentinel-
...
5P attributes to be discussed on
...
27.
...
05.2024
Sentinel- |
5P Odata |
attributes |
data type | to be removed | target STAC extension (in bold new attributes to be added) | STAC Counterpart | asset level | Description | Example STAC | Example Odata |
beginningDateTime |
DateTimeOffsetAttribute |
attribute |
start_datetime |
datetime | 2018-11-03T23:58:55.121559Z | 2024-05-17T00:23:29.000Z | ||||||
endingDateTime | DateTimeOffsetAttribute | core STAC attribute | end_datetime | 2018-11-03T23:58:55.121559Z | 2024-05-17T00:27:08.000Z | |||
instrumentShortName | StringAttribute | core STAC attribute | instruments | tropomi | TROPOMI | |||
orbitNumber | IntegerAttribute | sat | sat:absolute_orbit | 34158 | 34158 | |||
parentIdentifier | StringAttribute | X | urn:ogc:def:EOP:ESA:SENTINEL.S5P_TROP_L2__NO2___ | |||||
platformShortName |
StringAttribute | core STAC attribute |
the same as
start_datetime
constellation | sentinel-5p | SENTINEL-5P | ||||||
processingCenter | StringAttribute | processing | processing:facility | ? | pdgs-op | PDGS-OP | ||
processingDate | DateTimeOffsetAttribute | processing | processing:datetime | 2018-11-03T23:58:55.121559Z | 2024-05-17T01:26:59.613000+00:00 | |||
processingLevel | StringAttribute | processing | processing:level | L2 | L2 | |||
processingMode | StringAttribute | product | product:timeliness product:timeliness_category |
NRT | NRTI | |||
processorName | StringAttribute | X | TROPNLL2DP | |||||
processorVersion | StringAttribute | X | For Sentinel-5P I believe the processing:version should be taken from the netCDF global attribute processor_version | 20600 | ||||
productType | StringAttribute | product:type | product:type | L2__NO2___ | L2__NO2___ |
Sentinel-1 attributes to be discussed on 20.05.2024
Sentinel-1 Odata attributes | data type | to be removed | target STAC extension (in bold new attributes to be added) | STAC Counterpart | asset level | Description | Example STAC | Example Odata |
beginningDateTime | DateTimeOffsetAttribute | core STAC attribute | start_datetime datetime | 2018-11-03T23:58:55.121559Z | 2024-05-14T00:06:28.688Z | |||
completionTimeFromAscendingNode | DoubleAttribute | sat:anx_end_offset | 238903.7 | |||||
cycleNumber | IntegerAttribute | sat:orbit_cycle | sat:orbit_cycle | 322 | ||||
datatakeID | IntegerAttribute | EOPF | 429004 | |||||
endingDateTime | DateTimeOffsetAttribute | core STAC attribute | end_datetime | 2018-11-03T23:59:55.112875Z | 2024-05-14T00:06:53.687Z | |||
instrumentConfigurationID | IntegerAttribute | EOPF | 7 | |||||
instrumentShortName | StringAttribute | core STAC attribute | instruments | sar | SAR | |||
operationalMode | StringAttribute | sar:instrument_mode | sar:instrument_mode | IW | IW | |||
orbitDirection | StringAttribute | sat | sat:orbit_state | descending | ASCENDING | |||
orbitNumber | IntegerAttribute | sat | sat:absolute_orbit | 42767 | 53860 | |||
origin | StringAttribute | processing | processing:facility | production service-serco | ESA | |||
platformSerialIdentifier | StringAttribute | core STAC attribute | platform | sentinel-1a | A | |||
platformShortName | StringAttribute | core STAC attribute | constellation | sentinel-1 | SENTINEL-1 | |||
polarisationChannels | StringAttribute | sar:polarizations | sar:polarizations | '[VV,VH]' | VV&VH | |||
processingCenter | StringAttribute | processing | processing:facility | production service-serco | Production Service-SERCO | |||
processingDate | DateTimeOffsetAttribute | processing | processing:datetime | 2024-05-14T08:04:12.593998+00:00 | ||||
processingLevel | StringAttribute | processing | processing:level | L1 | LEVEL1 | |||
processorName | StringAttribute | X | to be dropped | Sentinel-1 IPF | ||||
processorVersion | StringAttribute | X | 3.71 | |||||
processing:version (PR) | processing:version (PR) | to be added in the future? what to do with s-1 baseline? | ||||||
productClass | StringAttribute | X | S | |||||
productComposition | StringAttribute | X | Slice/Slice-Partial | |||||
productType | StringAttribute | product:type | IW_GRDH_1S | IW_GRDH_1S | ||||
product:type | sar:product_type | to be moved to product:type (PR) | GRD | |||||
relativeOrbitNumber | IntegerAttribute | sat:relative_orbit | sat:relative_orbit | 63 | ||||
segmentStartTime | DateTimeOffsetAttribute | X | 2024-05-14T00:05:09.988000+00:00 | |||||
sliceNumber | IntegerAttribute | X | 4 | |||||
sliceProductFlag | BooleanAttribute | X | false | |||||
startTimeFromAscendingNode | DoubleAttribute | sat:anx_start_offset | milliseconds from anx crossing | 213904.7 | ||||
swathIdentifier | StringAttribute | X | IW | |||||
timeliness | StringAttribute | product | product:timeliness product:timeliness_category |
Fast-24H | Fast-24h | |||
totalSlices | IntegerAttribute | X | 20 | |||||
sar:frequency_band | sar:frequency_band | collection level? | C |
Additional attributes for bursts:
burst attributes | example | to be added to STAC |
linesPerBurst | 1493 | |
samplesPerBurst | 21673 | |
subswath | "IW1" should be string | sar:subswaths_id |
polarization | vh | sar:polarizations |
start line | 1493 | |
azimuthTime | 2024-05-10T00:40:19.788314 | |
sensingTime | 2024-05-10T00:40:19.788314 | start_datetime datetime |
byteOffset | 129538967 | |
burstId_relative | 8690 should be string used to be called frame_id | sar:relative_burst |
burstId_absolute | 115560765 | |
burstID_internal | 2 |
Sentinel-3 attributes to be discussed on 13.05.2024
Sentinel-3 Odata attributes | data type | to be removed | target STAC extension (in bold new attributes to be added) | STAC Counterpart | asset level | Description | Example STAC | Example Odata |
baselineCollection | StringAttribute | X | X | processing:version | OL__L1_.003.03.02, reflected in the: processing:version | 003 | ||
beginningDateTime | DateTimeOffset | start_datetime datetime | start_datetime datetime | 2023-07-10T00:47:16.702921Z | 2024-05-04T00:02:03.199Z | |||
cloudCover | DoubleAttribute | ? | eo:cloud_cover | 28 | 28 | |||
coastalCover | DoubleAttribute | X | 1 | 0.009 | ||||
cycleNumber | IntegerAttribute | sat:orbit_cycle | sat:orbit_cycle | The orbital cycle is 27 days (14+7/27 orbits per day, 385 orbits per cycle). The orbit cycle is the time taken for the satellite to pass over the same geographical point on the ground. | 112 | |||
endingDateTime | DateTimeOffset | core STAC attribute | end_datetime | 2023-07-10T00:47:16.702921Z | 2024-05-04T00:05:03.199Z | |||
freshInlandWaterCover | DoubleAttribute | X | s3:fresh_inland_water | 0 | 0 | |||
instrumentShortName | StringAttribute | core STAC attribute | instruments | olci | OLCI | |||
landCover | DoubleAttribute | ? | s3:land | 2 | 2 | |||
operationalMode | StringAttribute | ? | To be harmonized across missions | Earth Observation | ||||
orbitDirection | StringAttribute | sat | sat:orbit_state | descending | DESCENDING | |||
orbitNumber | IntegerAttribute | sat | sat:absolute_orbit | 42767 | 42767 | |||
platformSerialIdentifier | StringAttribute | core STAC attribute | platform | sentinel-3a | A | |||
platformShortName | StringAttribute | core STAC attribute | constellation | sentinel-3 | SENTINEL-3 | |||
processingDate | DateTimeOffset | processing | processing:datetime | 2023-07-10T00:47:16.702921Z | 2024-05-04T02:11:42+00:00 | |||
processingLevel | StringAttribute | processing | processing:level | L2 | 2 | |||
processorName | StringAttribute | X | To be dropped and discussed with ESA experts. | PUG | PUG | |||
processorVersion | StringAttribute | X |
| 03.50 | ||||
<sentinel3: processingBaseline>PB_ID.xxx.yy.zz </sentinel3: processingBaseline> from SAFE does not exists in Odata | processing:version OL__L1_.003.03.02 OL - instrument L1 - processing level 003 - baselineCollection 03.02 - S3 processorVersion | To be discussed with Jordi. https://sentinels.copernicus.eu/web/sentinel/technical-guides/sentinel-3-olci/processing-baseline | <sentinel3: processingBaseline>PB_ID.xxx.yy.zz </sentinel3: processingBaseline> <PB_ID> is unique and has as fixed format with 7 alphanumeric characters. | |||||
productType | StringAttribute | product | product:type | OL_2_LFR___ | OL_2_LFR___ | |||
relativeOrbitNumber | IntegerAttribute | sat:relative_orbit | sat:relative_orbit | 59 | 59 | |||
salineWaterCover | DoubleAttribute | X | s3:saline_water | 44 | 2 | |||
tidalRegionCover | DoubleAttribute | X | s3:tidal_region | 2 | 0 | |||
timeliness | StringAttribute | product | product:timeliness product:timeliness_category |
NR | NR |
Sentinel-2 attributes to be discussed on 06.05.2024
Mappings not directly defined in the Sentinel extensions:
mgrs:grid_square
mgrs:latitude_band
33
VR
U
Sentinel-2 Odata attributes | data type | to be removed | target STAC extension (in bold new attributes to be added) | querable | STAC Counterpart | asset level | Description | Example STAC | Example Odata |
mediaContentType | StringAttribute | X | application/octet-stream | ||||||
Id | StringAttribute | X | Odata internal id | X | 3e3b9d1a-18d5-43b8-83d8-564587ec3070 | ||||
Name | StringAttribute | id (core STAC attribute) | X | s2:product_uri (to be removed) | product name. STAC "id" is without .SAFE | S2A_MSIL2A_20240308T100841_N0510_R022_T33UVR_20240308T143352 | S2B_MSIL2A_20240419T001429_N0510_R116_T56NNG_20240419T013152.SAFE | ||
ContentType | StringAttribute | core STAC attribute | type | X | differs between Odata and STAC | image/jp2 | application/octet-stream | ||
ContentLength | IntegerAttribute | file | file:size | X | in bytes | 720970508 | 720970508 | ||
OriginDate | DateTimeOffsetAttribute | core STAC attribute | X | into eopf time of the publication at prip | 2024-03-08T14:33:52.000000Z | 2024-04-19T02:13:20.000Z | |||
PublicationDate | DateTimeOffsetAttribute | core STAC attribute | X | published | 2024-03-08T14:33:52.000000Z | 2024-04-19T02:20:17.555Z | |||
ModificationDate | DateTimeOffsetAttribute | core STAC attribute | X | updated | 2024-03-08T14:33:52.000000Z | 2024-04-19T02:21:14.300Z | |||
Checksum | Checksum | file | file:checksum | X | Blake3/MD5 in Odata vs Multihash in STAC | ||||
ContentDate.Start | DateTimeOffsetAttribute | core STAC attribute | X | datetime |
start_datetime | 2024-04-19T00:14:29.024Z |
ContentDate.End | DateTimeOffsetAttribute | core STAC attribute | X | end_datetime | 2024-04-19T00:14:29.024Z |
Footprint | X | X | X | X | |||||
GeoFootprint | core STAC attribute | geometry | "GeoFootprint":{"type":"Polygon","coordinates": [[[153.9866661847601,0.945453049017732], [153.9866661847601,0.945453049017732]]]} | ||||||
origin | StringAttribute | processing | processing:facility | from manifest or EUMETSAT | |||||
cloudCover | DoubleAttribute | eo | X | eo:cloud_cover | 14.583966 | ||||
orbitNumber | IntegerAttribute | sat | sat:absolute_orbit | 37179 | |||||
sourceProduct | StringAttribute | X | S2B_OPER_MSI_L2A_TL_2BPS_20240419T013152_A037179_T56NNG_N05.10 S2B_ |
OPER_MSI_L2A_DS_ |
2BPS_ |
20240419T013152_ |
S20240419T001424_N05.10 |
s2:tile_id
MGRS: tile_id ?
processingLevel | StringAttribute | processing | processing:level | L2 | S2MSI2A | ||||
platformShortName | StringAttribute | core STAC attribute | constellation | sentinel-2 | SENTINEL-2 | ||||
instrumentShortName | StringAttribute | core STAC attribute | instruments | msi | MSI | ||||
relativeOrbitNumber | IntegerAttribute | sat | X | sat:relative_orbit | 22 | 116 | |||
sourceProductOriginDate | StringAttribute | X | 2024-04-19T02:13:20Z 2024-04-19T01:32:14Z | ||||||
platformSerialIdentifier | StringAttribute | core STAC attribute | platform | sentinel-2a | A | ||||
beginningDateTime | DateTimeOffsetAttribute | core STAC attribute | start_datetime datetime | 2024-03-08T14:33:52.000000Z | 2024-04-19T00:14:29.024Z | ||||
endingDateTime | DateTimeOffsetAttribute | core STAC attribute | end_datetime | 2024-03-08T14:33:52.000000Z | 2024-04-19T00:14:29.024Z | ||||
granuleIdentifier | StringAttribute | X | None | s2:granule_id (removed) | S2A_OPER_MSI_L2A_TL_2APS_20240308T143352_A045493_T33UVR_N05.10 | S2A_OPER_MSI_L2A_TL_2APS_20240308T143352_A045493_T33UVR_N05.10 |
Sentinel-2 STAC extension attributes to be discussed (not all present in Odata):
- s2:generation_time (also in s1)
- s2:datatake_id (also in s1)
- s2:product_type (also in s1, s3, s5)
- s2:tile_id
- s2:product_uri
- s2:datastrip_id
- s2:datatake_type
- s2:processing_baseline
- s2:reflectance_conversion_factor
See the table below for details.
STAC Sentinel extensions
A priority should be to update the STAC Sentinel extensions to be less extensive at least. The plan is to find spaces in the general STAC community for these fields.
As a first step, we need to identify which fields are actually relevant to the general public.
...
For descriptions of the fields, please refer to the Sentinel extensions or the stactools-package implementations.
Idea is to keep a small variant of the Sentinel extensions as best practices, mostly using other extensions.
EOPF is for "private" fields that externals are not interested in.
Field name | Data Type | Relevant to general public? | Potential future extension or field | Comments | |||||
Multi-Mission | |||||||||
s1:processing_datetime s2:generation_time | date-time | Yes | processing:datetime (PR) created in assets | Yes | processing:datetime (PR) | OData: processingDate S2 Example: 2024-04-19T01:31:52+00:00 (in STAC Z instead of +00:00) | |||
s1:datatake_id s2:datatake_id | string | YesexternalIds? | to be included in the CDSE STAC and added to eopf extension | OData: productGroupId S2 Example: GS2A_20240308T100841_045493_N05.10 | |||||
s2:product_type s3:product_type s5p:product_type | string | No? | product:type potentially restricted in s2 extension | What's the difference between name and type? Can it be just one property, e.g. the name? S2 example: S2MSI2A | |||||
s3:product_name s5p:product_name | string | Yes? | |||||||
s1:product_timeliness s3:processing_timeliness | string | timeliness | string | Yes? | product:timeliness potentially restricted in s2 extension ? | Can we find a common set of values for this? e.g. ISO 8601 Durations? | |||
Sentinel-1 | |||||||||
s1:instrument_configuration_ID | string | No? | |||||||
s1:orbit_source | string | No? | |||||||
s1:product_identifier | string | ? | externalIds? | ||||||
s1:resolution | string | No? | |||||||
s1:slice_number | string | No | |||||||
s1:total_slices | string | No | |||||||
Sentinel-2 | |||||||||
:total_slices | string | No | |||||||
Sentinel-2 | |||||||||
s2:tile_id | string | Yes? | grid:code (querable) |
| |||||
s2:product_uri | string | NO To be removed | NONE | Might be needed in the S2 extension by some other users of the extensions. | |||||
s2:datastrip_id | s2:tile_id | string | Yes? | externalIds? MGRS: tile_id ? | s2:product_uri | string | Yes?as a normal STAC Link | EOPF | OData field: datastripId Example: S2A_OPER_MSI_L2A_DS_2APS_20240308T143352_S20240308T101546_N05.10 |
s2:datastripdatatake_idtype | string | Yes? | externalIds? | s2:datatake_type | string | ? | ON HOLD similar to instrument_mode in the SAR | EOPF | OData: operationalMode Example: INS-NOBS |
s2:processing_baseline | string | Yes? | processing:version (PR) | OData: processorVersion, example: 5.1 STAC example: 05.10 | |||||
s2:reflectance_conversion_factor | number | ? | s2:degraded_msi_data_percentage | number | No? | To be removed | To be removed | Example: 1.01707999697991 | |
Sentinel-3 | |||||||||
s3:gsd | various | No?gsd as a single value? | to be dropped or used acrossed all missions "gsd" STAC core attribute | ||||||
s3:lrm_mode | number | Yes? | altm:insinstrument_type | ||||||
s3:sar_mode | number | Yes? | altm:insinstrument_mode | ||||||
Sentinel-3 (Asset-level properties) | |||||||||
s3:spatial_resolution (in assets) | [number] | ? | raster:spatial_resolution as a single value? | ||||||
s3:altimetry_bands (in assets) | [Altimetry Band Object] | ? | bands STAC core attribute in STAC 1.1 | ||||||
Sentinel-5 | |||||||||
s5p:processing_mode | string | ? | |||||||
s5p:collection_identifier | string | ? | |||||||
s5p:spatial_resolution | [number] | ? | raster:spatial_resolution as a single value? | ||||||
Sentinel-5 Container Objects | |||||||||
s5p:aer_ai | Aer Ai Object | Flatten into top-level properties | None | ||||||
s5p:aer_lh | Aer Lh Object | Flatten into top-level properties | None | ||||||
s5p:ch4 | CH4 Object | Flatten into top-level properties | None | ||||||
s5p:cloud | Cloud Object | Flatten into top-level properties | None | ||||||
s5p:co | CO Object | Flatten into top-level properties | None | ||||||
s5p:hcho | HCHO Object | Flatten into top-level properties | None | ||||||
s5p:no2 | NO2 Object | Flatten into top-level properties | None | ||||||
s5p:npbd3 | NPBD Object | Flatten into top-level properties | None | ||||||
s5p:npbd6 | NPBD Object | Flatten into top-level properties | None | ||||||
s5p:npbd7 | NPBD Object | Flatten into top-level properties | None | ||||||
s5p:o3 | O2 Object | Flatten into top-level properties | None | ||||||
s5p:o3_tcl | O3 TCL Object | Flatten into top-level properties | None | ||||||
s5p:so2 | SO2 Object | Flatten into top-level properties | None | ||||||
Sentinel 5P Container Object Fields These fields appear in at least one of the Sentinel-5 Container Objects above. | |||||||||
input_band | string / [string] | No? | |||||||
irradiance_accompanied | string | No? | |||||||
geolocation_grid_from_band | integer | No? | |||||||
cloud_mode | string | No? | |||||||
shape_ccd | [integer] | No? | |||||||
shape_csa | [integer] | No? | |||||||
stratosphere_start_datetime | string | ? | |||||||
stratosphere_end_datetime | string | ? | |||||||
troposphere_start_datetime | string | ? | |||||||
troposphere_end_datetime | string | ? | |||||||
input_orbits | [integer] | No? | |||||||
input_files | [string] | No? | |||||||
analysed_s5p_band | integer | No? | |||||||
VIIRS_band | [integer] | No? | |||||||
number_of_scaled_fov | integer | No? |
...
Field name | Relevant to general public? | Potential future extension or field | Comments | ||
General and Other | |||||
s3:land | ? | ||||
s2:unclassified_percentage? | Yes, not queryable | classification:classes[*].percentage | |||
Clouds | |||||
s2:cloud_shadow_percentage | ? | Yes, not queryable | classification:classes[*].percentage | ||
s2:high_proba_clouds_percentage | Yes, not queryable | classification:classes[*].percentage? | |||
s2:medium_proba_clouds_percentage_proba_clouds_percentage | Yes, not queryable | classification:classes[*].percentage? | |||
s2:thin_cirrus_percentage | Yes, not queryable | classification:classes[*].percentage? | |||
Water and Coastal | |||||
s2:water_percentage? | Yes, queryable | new: eo:water_cover ? + classification:classes[*].percentage | |||
s3:closed_sea | ? | ||||
s3:fresh_inland_water | ? | ||||
s3:open_ocean | ? | ||||
s3:saline_water | ? | ||||
s3:tidal_region | ? | ||||
s3:coastal | ? | ||||
s3:continental_ice | ? | ||||
Unusable | |||||
s2:nodata_pixel_percentage | Yes | pixel_percentage | Yes, queryable | new: raster:nodata_percentage ? + classification:classes[*].percentage | |
s3:bright | ? | ||||
s3:dubious_samples | ? | ||||
s3:duplicated | ? | ||||
s3:invalid | ? | ||||
s3:out_of_range | ? | ||||
s2:dark_features_percentage | Yes, not queryable | classification:classes[*].percentage? | |||
s3:saturated s2:saturated_defective_pixel_percentage | Yes, not queryable | classification:classes[*].percentage? | |||
Vegetation | |||||
s2:vegetation_percentage | Yes, queryable? | new: eo:vegetation_cover ? + classification:classes[*].percentage | |||
s2:not_vegetated_percentage | Yes, not queryable | classification:classes[*].percentage? |
Depending on the asset structure, some percentages may be provided as a classification percentages as proposed in https://github.com/stac-extensions/classification/pull/49
...