diff --git a/datasets/sentinel-3/Dockerfile b/datasets/sentinel-3/Dockerfile new file mode 100644 index 00000000..7bdffadf --- /dev/null +++ b/datasets/sentinel-3/Dockerfile @@ -0,0 +1,74 @@ +FROM ubuntu:20.04 + +# Setup timezone info +ENV TZ=UTC + +ENV LC_ALL=C.UTF-8 +ENV LANG=C.UTF-8 + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update && apt-get install -y software-properties-common + +RUN add-apt-repository ppa:ubuntugis/ppa && \ + apt-get update && \ + apt-get install -y build-essential python3-dev python3-pip \ + jq unzip ca-certificates wget curl git && \ + apt-get autoremove && apt-get autoclean && apt-get clean + +RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 10 + +# See https://github.com/mapbox/rasterio/issues/1289 +ENV CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt + +# Install Python 3.8 +RUN curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh" \ + && bash "Mambaforge-$(uname)-$(uname -m).sh" -b -p /opt/conda \ + && rm -rf "Mambaforge-$(uname)-$(uname -m).sh" + +ENV PATH /opt/conda/bin:$PATH +ENV LD_LIBRARY_PATH /opt/conda/lib/:$LD_LIBRARY_PATH + +RUN mamba install -y -c conda-forge python=3.8 gdal=3.3.3 pip setuptools cython numpy==1.21.5 + +RUN python -m pip install --upgrade pip + +# Install common packages +COPY requirements-task-base.txt /tmp/requirements.txt +RUN python -m pip install --no-build-isolation -r /tmp/requirements.txt + +# +# Copy and install packages +# + +COPY pctasks/core /opt/src/pctasks/core +RUN cd /opt/src/pctasks/core && \ + pip install . + +COPY pctasks/cli /opt/src/pctasks/cli +RUN cd /opt/src/pctasks/cli && \ + pip install . + +COPY pctasks/task /opt/src/pctasks/task +RUN cd /opt/src/pctasks/task && \ + pip install . + +COPY pctasks/client /opt/src/pctasks/client +RUN cd /opt/src/pctasks/client && \ + pip install . + +COPY pctasks/ingest /opt/src/pctasks/ingest +RUN cd /opt/src/pctasks/ingest && \ + pip install . + +COPY pctasks/dataset /opt/src/pctasks/dataset +RUN cd /opt/src/pctasks/dataset && \ + pip install . + +COPY ./datasets/sentinel-3/requirements.txt /opt/src/datasets/sentinel-3/requirements.txt +RUN python3 -m pip install -r /opt/src/datasets/sentinel-3/requirements.txt + +# Setup Python Path to allow import of test modules +ENV PYTHONPATH=/opt/src:$PYTHONPATH + +WORKDIR /opt/src \ No newline at end of file diff --git a/datasets/sentinel-3/README.md b/datasets/sentinel-3/README.md index 1bfda52a..fbdb83d0 100644 --- a/datasets/sentinel-3/README.md +++ b/datasets/sentinel-3/README.md @@ -1 +1,47 @@ -# Work in progress - in a broken state \ No newline at end of file +# Sentinel-3 + +## Dataset structure + +This dataset has many different products. We create one STAC collection per product. The collections are under the `collection` folder. + +``` +collection/sentinel-3-olci-lfr-l2-netcdf +collection/sentinel-3-olci-wfr-l2-netcdf +collection/sentinel-3-slstr-frp-l2-netcdf +collection/sentinel-3-slstr-lst-l2-netcdf +collection/sentinel-3-slstr-wst-l2-netcdf +collection/sentinel-3-sral-lan-l2-netcdf +collection/sentinel-3-sral-wat-l2-netcdf +collection/sentinel-3-synergy-aod-l2-netcdf +collection/sentinel-3-synergy-syn-l2-netcdf +collection/sentinel-3-synergy-v10-l2-netcdf +collection/sentinel-3-synergy-vg1-l2-netcdf +collection/sentinel-3-synergy-vgp-l2-netcdf +``` + +The package `sentinel_3` contains the python code for making the STAC items. +Each collection has its own module +(`sentinel_3/sentinel_3_olci_lfr_l2_netcdf.py`). The name of the module should +match the name of the collection. The module should have a class named +`Collection` that is the pctasks `dataset.Collection` subclass. + +## Tests + +The `datasets/sentinel-3/tests` directory contains some tests. Run those with + + +``` +$ PYTHONPATH=datasets/sentinel-3 python -m pytest datasets/sentinel-3/tests/ +``` + +### Dynamic updates + +```console +$ ls datasets/sentinel-3/collection/ | xargs -I {} \ + pctasks dataset process-items '${{ args.since }}' \ + -d datasets/sentinel-3/update.yaml \ + -c {} \ + --workflow-id={}-update \ + --is-update-workflow \ + --upsert +``` \ No newline at end of file diff --git a/datasets/sentinel-3/collection/sentinel-3-olci-lfr-l2-netcdf/description.md b/datasets/sentinel-3/collection/sentinel-3-olci-lfr-l2-netcdf/description.md new file mode 100644 index 00000000..d517d80c --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-olci-lfr-l2-netcdf/description.md @@ -0,0 +1,27 @@ +This collection provides Sentinel-3 Full Resolution [OLCI Level-2 Land][olci-l2] products containing data on global vegetation, chlorophyll, and water vapor. + +## Data files + +This dataset includes data on three primary variables: + +* OLCI global vegetation index file +* terrestrial Chlorophyll index file +* integrated water vapor over water file. + +Each variable is contained within a separate NetCDF file, and is cataloged as an asset in each Item. + +Several associated variables are also provided in the annotations data files: + +* rectified reflectance for red and NIR channels (RC681 and RC865) +* classification, quality and science flags (LQSF) +* common data such as the ortho-geolocation of land pixels, solar and satellite angles, atmospheric and meteorological data, time stamp or instrument information. These variables are inherited from Level-1B products. + +This full resolution product offers a spatial sampling of approximately 300 m. + +## Processing overview + +The values in the data files have been converted from Top of Atmosphere radiance to reflectance, and include various corrections for gaseous absorption and pixel classification. More information about the product and data processing can be found in the [User Guide](https://sentinel.esa.int/web/sentinel/user-guides/sentinel-3-olci/product-types/level-2-land) and [Technical Guide](https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-3-olci/level-2/processing). + +This Collection contains Level-2 data in NetCDF files from April 2016 to present. + +[olci-l2]: https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-3-olci/level-2/land-products diff --git a/datasets/sentinel-3/collection/sentinel-3-olci-lfr-l2-netcdf/template.json b/datasets/sentinel-3/collection/sentinel-3-olci-lfr-l2-netcdf/template.json new file mode 100644 index 00000000..9e6b55f0 --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-olci-lfr-l2-netcdf/template.json @@ -0,0 +1,362 @@ +{ + "stac_version": "1.0.0", + "type": "Collection", + "id": "sentinel-3-olci-lfr-l2-netcdf", + "title": "Sentinel-3 Land (Full Resolution)", + "description": "{{ collection.description }}", + "license": "proprietary", + "links": [ + { + "rel": "license", + "href": "https://sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "type": "application/pdf", + "title": "Sentinel Data License" + }, + { + "rel": "about", + "href": "https://sentinel.esa.int/web/sentinel/user-guides/sentinel-3-olci/product-types/level-2-land", + "type": "text/html", + "title": "Sentinel-3 Land (LRR and LFR) Product User Guide" + } + ], + "stac_extensions": [ + "https://stac-extensions.github.io/sat/v1.0.0/schema.json", + "https://stac-extensions.github.io/table/v1.2.0/schema.json", + "https://stac-extensions.github.io/item-assets/v1.0.0/schema.json", + "https://stac-extensions.github.io/eo/v1.1.0/schema.json" + ], + "keywords": [ + "ESA", + "Copernicus", + "Sentinel", + "Land", + "Biomass" + ], + "msft:group_id": "sentinel-3", + "msft:short_description": "Sentinel-3 Land Full Resolution vegetation index, chlorophyll index, and water vapor (OLCI LFR).", + "msft:storage_account": "sentinel3euwest", + "msft:container": "sentinel-3", + "msft:region": "westeurope", + "providers": [ + { + "name": "ESA", + "roles": [ + "producer", + "processor", + "licensor" + ], + "url": "https://earth.esa.int/web/guest/home" + }, + { + "name": "Microsoft", + "roles": [ + "host" + ], + "url": "https://planetarycomputer.microsoft.com" + } + ], + "assets": { + "thumbnail": { + "title": "Sentinel-5P Level-2 NetCDF Thumbnail", + "href": "https://ai4edatasetspublicassets.blob.core.windows.net/assets/pc_thumbnails/sentinel-3-olci-lfr-l2-netcdf-thumb.png", + "media_type": "image/png" + }, + "geoparquet-items": { + "href": "abfs://items/sentinel-3-olci-lfr-l2-netcdf.parquet", + "title": "GeoParquet STAC Items", + "description": "Snapshot of the collection's STAC items exported to GeoParquet format.", + "type": "application/x-parquet", + "roles": [ + "stac-items" + ], + "table:storage_options": { + "account_name": "pcstacitems" + }, + "msft:partition_info": { + "is_partitioned": true, + "partition_frequency": "MS" + } + } + }, + "summaries": { + "constellation": [ + "Sentinel-3" + ], + "platform": [ + "Sentinel-3A", + "Sentinel-3B" + ], + "instruments": [ + "OLCI" + ], + "sat:platform_international_designator": [ + "2016-011A", + "2018-039A" + ], + "sat:orbit_state": [ + "descending", + "ascending" + ], + "s3:processing_timeliness": [ + "NT" + ], + "s3:product_type": [ + "OL_2_LFR___" + ], + "s3:product_name": [ + "olci-lfr" + ], + "eo:bands": [ + { + "name": "Oa03", + "description": "Band 3 - Chlorophyll absorption maximum, biogeochemistry, vegetation", + "center_wavelength": 0.4425, + "full_width_half_max": 0.01 + }, + { + "name": "Oa10", + "description": "Band 10 - Chlorophyll fluorescence peak, red edge", + "center_wavelength": 0.68125, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa11", + "description": "Band 11 - Chlorophyll fluorescence baseline, red edge transition", + "center_wavelength": 0.70875, + "full_width_half_max": 0.01 + }, + { + "name": "Oa12", + "description": "Band 12 - O2 absorption / clouds, vegetation", + "center_wavelength": 0.75375, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa17", + "description": "Band 17 - Atmospheric / aerosol correction, clouds, pixel co-registration", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + }, + { + "name": "Oa18", + "description": "Band 18 - Water vapour absorption reference. Common reference band with SLSTR. Vegetation monitoring", + "center_wavelength": 0.885, + "full_width_half_max": 0.01 + }, + { + "name": "Oa19", + "description": "Band 19 - Water vapour absorption, vegetation monitoring (maximum REFLECTANCE)", + "center_wavelength": 0.9, + "full_width_half_max": 0.01 + } + ] + }, + "extent": { + "spatial": { + "bbox": [ + [ + -180, + -90, + 180, + 90 + ] + ] + }, + "temporal": { + "interval": [ + [ + "2016-04-25T11:33:47.368562Z", + null + ] + ] + } + }, + "item_assets": { + "safe-manifest": { + "type": "application/xml", + "description": "SAFE product manifest", + "roles": [ + "metadata" + ] + }, + "ogvi": { + "type": "application/x-netcdf", + "description": "OLCI Global Vegetation Index (OGVI)", + "eo:bands": [ + { + "name": "Oa03", + "description": "Band 3 - Chlorophyll absorption maximum, biogeochemistry, vegetation", + "center_wavelength": 0.4425, + "full_width_half_max": 0.01 + }, + { + "name": "Oa10", + "description": "Band 10 - Chlorophyll fluorescence peak, red edge", + "center_wavelength": 0.68125, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa17", + "description": "Band 17 - Atmospheric / aerosol correction, clouds, pixel co-registration", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + } + ], + "roles": [ + "data" + ] + }, + "otci": { + "type": "application/x-netcdf", + "description": "OLCI Terrestrial Chlorophyll Index (OTCI)", + "eo:bands": [ + { + "name": "Oa10", + "description": "Band 10 - Chlorophyll fluorescence peak, red edge", + "center_wavelength": 0.68125, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa11", + "description": "Band 11 - Chlorophyll fluorescence baseline, red edge transition", + "center_wavelength": 0.70875, + "full_width_half_max": 0.01 + }, + { + "name": "Oa12", + "description": "Band 12 - O2 absorption / clouds, vegetation", + "center_wavelength": 0.75375, + "full_width_half_max": 0.0075 + } + ], + "roles": [ + "data" + ] + }, + "iwv": { + "type": "application/x-netcdf", + "description": "Integrated water vapour column", + "eo:bands": [ + { + "name": "Oa18", + "description": "Band 18 - Water vapour absorption reference. Common reference band with SLSTR. Vegetation monitoring", + "center_wavelength": 0.885, + "full_width_half_max": 0.01 + }, + { + "name": "Oa19", + "description": "Band 19 - Water vapour absorption, vegetation monitoring (maximum REFLECTANCE)", + "center_wavelength": 0.9, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "rc-ogvi": { + "type": "application/x-netcdf", + "description": "Rectified reflectance", + "eo:bands": [ + { + "name": "Oa10", + "description": "Band 10 - Chlorophyll fluorescence peak, red edge", + "center_wavelength": 0.68125, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa17", + "description": "Band 17 - Atmospheric / aerosol correction, clouds, pixel co-registration", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + } + ], + "roles": [ + "data" + ] + }, + "lqsf": { + "type": "application/x-netcdf", + "description": "Land quality and science flags", + "roles": [ + "data" + ] + }, + "time-coordinates": { + "type": "application/x-netcdf", + "description": "Time coordinate annotations", + "roles": [ + "data" + ] + }, + "geo-coordinates": { + "type": "application/x-netcdf", + "description": "Geo coordinate annotations", + "roles": [ + "data" + ] + }, + "tie-geo-coordinates": { + "type": "application/x-netcdf", + "description": "Tie-point geo coordinate annotations", + "roles": [ + "data" + ] + }, + "tie-geometries": { + "type": "application/x-netcdf", + "description": "Tie-point geometry annotations", + "roles": [ + "data" + ] + }, + "tie-meteo": { + "type": "application/x-netcdf", + "description": "Tie-point meteo annotations", + "roles": [ + "data" + ] + }, + "instrument-data": { + "type": "application/x-netcdf", + "description": "Instrument annotations", + "roles": [ + "data" + ] + }, + "gifapar": { + "type": "application/x-netcdf", + "description": "Green instantaneous Fraction of Absorbed Photosynthetically Active Radiation (FAPAR)", + "eo:bands": [ + { + "name": "Oa03", + "description": "Band 3 - Chlorophyll absorption maximum, biogeochemistry, vegetation", + "center_wavelength": 0.4425, + "full_width_half_max": 0.01 + }, + { + "name": "Oa10", + "description": "Band 10 - Chlorophyll fluorescence peak, red edge", + "center_wavelength": 0.68125, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa17", + "description": "Band 17 - Atmospheric / aerosol correction, clouds, pixel co-registration", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + } + ], + "roles": [ + "data" + ] + }, + "rc-gifapar": { + "type": "application/x-netcdf", + "description": "Rectified reflectance", + "roles": [ + "data" + ] + } + } +} \ No newline at end of file diff --git a/datasets/sentinel-3/collection/sentinel-3-olci-wfr-l2-netcdf/description.md b/datasets/sentinel-3/collection/sentinel-3-olci-wfr-l2-netcdf/description.md new file mode 100644 index 00000000..684f63d8 --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-olci-wfr-l2-netcdf/description.md @@ -0,0 +1,22 @@ +This Collection provides Sentinel-3 Full Resolution [OLCI Level-2 Water][olci-l2] products containing data on water-leaving reflectance, ocean color, and more. + +## Data files + +This dataset includes data on: + +- Surface directional reflectance +- Chlorophyll-a concentration +- Suspended matter concentration +- Energy flux +- Aerosol load +- Integrated water vapor column + +Each variable is contained within NetCDF files. Error estimates are available for each product. + +## Processing overview + +The values in the data files have been converted from Top of Atmosphere radiance to reflectance, and include various corrections for gaseous absorption and pixel classification. More information about the product and data processing can be found in the [User Guide](https://sentinel.esa.int/web/sentinel/user-guides/sentinel-3-olci/product-types/level-2-water) and [Technical Guide](https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-3-olci/level-2/processing). + +This Collection contains Level-2 data in NetCDF files from November 2017 to present. + +[olci-l2]: https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-3-olci/level-2/ocean-products diff --git a/datasets/sentinel-3/collection/sentinel-3-olci-wfr-l2-netcdf/template.json b/datasets/sentinel-3/collection/sentinel-3-olci-wfr-l2-netcdf/template.json new file mode 100644 index 00000000..6ae1e5d1 --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-olci-wfr-l2-netcdf/template.json @@ -0,0 +1,904 @@ +{ + "stac_version": "1.0.0", + "id": "sentinel-3-olci-wfr-l2-netcdf", + "title": "Sentinel-3 Water (Full Resolution)", + "type": "Collection", + "description": "{{ collection.description }}", + "license": "proprietary", + "links": [ + { + "rel": "license", + "href": "https://sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "type": "application/pdf", + "title": "Sentinel Data License" + }, + { + "rel": "about", + "href": "https://sentinel.esa.int/web/sentinel/user-guides/sentinel-3-olci/product-types/level-2-water", + "type": "text/html", + "title": "Sentinel-3 Water (LRR and LFR) Product User Guide" + } + ], + "stac_extensions": [ + "https://stac-extensions.github.io/sat/v1.0.0/schema.json", + "https://stac-extensions.github.io/table/v1.2.0/schema.json", + "https://stac-extensions.github.io/item-assets/v1.0.0/schema.json", + "https://stac-extensions.github.io/eo/v1.1.0/schema.json" + ], + "keywords": [ + "ESA", + "Copernicus", + "Sentinel", + "Water", + "Ocean" + ], + "msft:group_id": "sentinel-3", + "msft:short_description": "Sentinel-3 Land Full Resolution water and atmospheric geophysical products (OLCI WFR).", + "msft:storage_account": "sentinel3euwest", + "msft:container": "sentinel-3", + "msft:region": "westeurope", + "providers": [ + { + "name": "ESA", + "roles": [ + "producer", + "processor", + "licensor" + ], + "url": "https://earth.esa.int/web/guest/home" + }, + { + "name": "Microsoft", + "roles": [ + "host" + ], + "url": "https://planetarycomputer.microsoft.com" + } + ], + "assets": { + "thumbnail": { + "title": "Sentinel-3 OLCI WFR L2 NetCDF Thumbnail", + "href": "https://ai4edatasetspublicassets.blob.core.windows.net/assets/pc_thumbnails/sentinel-3-olci-wfr-l2-netcdf-thumb.png", + "media_type": "image/png" + }, + "geoparquet-items": { + "href": "abfs://items/sentinel-3-olci-wfr-l2-netcdf.parquet", + "title": "GeoParquet STAC Items", + "description": "Snapshot of the collection's STAC items exported to GeoParquet format.", + "type": "application/x-parquet", + "roles": [ + "stac-items" + ], + "table:storage_options": { + "account_name": "pcstacitems" + }, + "msft:partition_info": { + "is_partitioned": true, + "partition_frequency": "MS" + } + } + }, + "extent": { + "spatial": { + "bbox": [ + [ + -180, + -90, + 180, + 90 + ] + ] + }, + "temporal": { + "interval": [ + [ + "2017-11-01T00:07:01.738487Z", + null + ] + ] + } + }, + "summaries": { + "constellation": [ + "Sentinel-3" + ], + "platform": [ + "Sentinel-3A", + "Sentinel-3B" + ], + "instruments": [ + "OLCI" + ], + "sat:platform_international_designator": [ + "2016-011A", + "2018-039A" + ], + "sat:orbit_state": [ + "descending", + "ascending" + ], + "s3:processing_timeliness": [ + "NT" + ], + "s3:product_type": [ + "OL_2_WFR___" + ], + "s3:product_name": [ + "olci-wfr" + ], + "eo:bands": [ + { + "name": "Oa01", + "description": "Band 1 - Aerosol correction, improved water constituent retrieval", + "center_wavelength": 0.4, + "full_width_half_max": 0.015 + }, + { + "name": "Oa02", + "description": "Band 2 - Yellow substance and detrital pigments (turbidity)", + "center_wavelength": 0.4125, + "full_width_half_max": 0.01 + }, + { + "name": "Oa03", + "description": "Band 3 - Chlorophyll absorption maximum, biogeochemistry, vegetation", + "center_wavelength": 0.4425, + "full_width_half_max": 0.01 + }, + { + "name": "Oa04", + "description": "Band 4 - Chlorophyll", + "center_wavelength": 0.49, + "full_width_half_max": 0.01 + }, + { + "name": "Oa05", + "description": "Band 5 - Chlorophyll, sediment, turbidity, red tide", + "center_wavelength": 0.51, + "full_width_half_max": 0.01 + }, + { + "name": "Oa06", + "description": "Band 6 - Chlorophyll reference (minimum)", + "center_wavelength": 0.56, + "full_width_half_max": 0.01 + }, + { + "name": "Oa07", + "description": "Band 7 - Sediment loading", + "center_wavelength": 0.62, + "full_width_half_max": 0.01 + }, + { + "name": "Oa08", + "description": "Band 8 - 2nd Chlorophyll absorption maximum, sediment, yellow substance / vegetation", + "center_wavelength": 0.665, + "full_width_half_max": 0.01 + }, + { + "name": "Oa09", + "description": "Band 9 - Improved fluorescence retrieval", + "center_wavelength": 0.67375, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa10", + "description": "Band 10 - Chlorophyll fluorescence peak, red edge", + "center_wavelength": 0.68125, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa11", + "description": "Band 11 - Chlorophyll fluorescence baseline, red edge transition", + "center_wavelength": 0.70875, + "full_width_half_max": 0.01 + }, + { + "name": "Oa12", + "description": "Band 12 - O2 absorption / clouds, vegetation", + "center_wavelength": 0.75375, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa16", + "description": "Band 16 - Atmospheric / aerosol correction", + "center_wavelength": 0.77875, + "full_width_half_max": 0.015 + }, + { + "name": "Oa17", + "description": "Band 17 - Atmospheric / aerosol correction, clouds, pixel co-registration", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + }, + { + "name": "Oa18", + "description": "Band 18 - Water vapour absorption reference. Common reference band with SLSTR. Vegetation monitoring", + "center_wavelength": 0.885, + "full_width_half_max": 0.01 + }, + { + "name": "Oa19", + "description": "Band 19 - Water vapour absorption, vegetation monitoring (maximum REFLECTANCE)", + "center_wavelength": 0.9, + "full_width_half_max": 0.01 + }, + { + "name": "Oa21", + "description": "Band 21 - Water vapour absorption, atmospheric / aerosol correction", + "center_wavelength": 1.02, + "full_width_half_max": 0.04 + } + ] + }, + "item_assets": { + "safe-manifest": { + "type": "application/xml", + "description": "SAFE product manifest", + "roles": [ + "metadata" + ] + }, + "oa01-reflectance": { + "type": "application/x-netcdf", + "description": "Reflectance for OLCI acquisition band Oa01", + "eo:bands": [ + { + "name": "Oa01", + "description": "Band 1 - Aerosol correction, improved water constituent retrieval", + "center_wavelength": 0.4, + "full_width_half_max": 0.015 + } + ], + "roles": [ + "data" + ] + }, + "oa02-reflectance": { + "type": "application/x-netcdf", + "description": "Reflectance for OLCI acquisition band Oa02", + "eo:bands": [ + { + "name": "Oa02", + "description": "Band 2 - Yellow substance and detrital pigments (turbidity)", + "center_wavelength": 0.4125, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "oa03-reflectance": { + "type": "application/x-netcdf", + "description": "Reflectance for OLCI acquisition band Oa03", + "eo:bands": [ + { + "name": "Oa03", + "description": "Band 3 - Chlorophyll absorption maximum, biogeochemistry, vegetation", + "center_wavelength": 0.4425, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "oa04-reflectance": { + "type": "application/x-netcdf", + "description": "Reflectance for OLCI acquisition band Oa04", + "eo:bands": [ + { + "name": "Oa04", + "description": "Band 4 - Chlorophyll", + "center_wavelength": 0.49, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "oa05-reflectance": { + "type": "application/x-netcdf", + "description": "Reflectance for OLCI acquisition band Oa05", + "eo:bands": [ + { + "name": "Oa05", + "description": "Band 5 - Chlorophyll, sediment, turbidity, red tide", + "center_wavelength": 0.51, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "oa06-reflectance": { + "type": "application/x-netcdf", + "description": "Reflectance for OLCI acquisition band Oa06", + "eo:bands": [ + { + "name": "Oa06", + "description": "Band 6 - Chlorophyll reference (minimum)", + "center_wavelength": 0.56, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "oa07-reflectance": { + "type": "application/x-netcdf", + "description": "Reflectance for OLCI acquisition band Oa07", + "eo:bands": [ + { + "name": "Oa07", + "description": "Band 7 - Sediment loading", + "center_wavelength": 0.62, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "oa08-reflectance": { + "type": "application/x-netcdf", + "description": "Reflectance for OLCI acquisition band Oa08", + "eo:bands": [ + { + "name": "Oa08", + "description": "Band 8 - 2nd Chlorophyll absorption maximum, sediment, yellow substance / vegetation", + "center_wavelength": 0.665, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "oa09-reflectance": { + "type": "application/x-netcdf", + "description": "Reflectance for OLCI acquisition band Oa09", + "eo:bands": [ + { + "name": "Oa09", + "description": "Band 9 - Improved fluorescence retrieval", + "center_wavelength": 0.67375, + "full_width_half_max": 0.0075 + } + ], + "roles": [ + "data" + ] + }, + "oa10-reflectance": { + "type": "application/x-netcdf", + "description": "Reflectance for OLCI acquisition band Oa10", + "eo:bands": [ + { + "name": "Oa10", + "description": "Band 10 - Chlorophyll fluorescence peak, red edge", + "center_wavelength": 0.68125, + "full_width_half_max": 0.0075 + } + ], + "roles": [ + "data" + ] + }, + "oa11-reflectance": { + "type": "application/x-netcdf", + "description": "Reflectance for OLCI acquisition band Oa11", + "eo:bands": [ + { + "name": "Oa11", + "description": "Band 11 - Chlorophyll fluorescence baseline, red edge transition", + "center_wavelength": 0.70875, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "oa12-reflectance": { + "type": "application/x-netcdf", + "description": "Reflectance for OLCI acquisition band Oa12", + "eo:bands": [ + { + "name": "Oa12", + "description": "Band 12 - O2 absorption / clouds, vegetation", + "center_wavelength": 0.75375, + "full_width_half_max": 0.0075 + } + ], + "roles": [ + "data" + ] + }, + "oa16-reflectance": { + "type": "application/x-netcdf", + "description": "Reflectance for OLCI acquisition band Oa16", + "eo:bands": [ + { + "name": "Oa16", + "description": "Band 16 - Atmospheric / aerosol correction", + "center_wavelength": 0.77875, + "full_width_half_max": 0.015 + } + ], + "roles": [ + "data" + ] + }, + "oa17-reflectance": { + "type": "application/x-netcdf", + "description": "Reflectance for OLCI acquisition band Oa17", + "eo:bands": [ + { + "name": "Oa17", + "description": "Band 17 - Atmospheric / aerosol correction, clouds, pixel co-registration", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + } + ], + "roles": [ + "data" + ] + }, + "oa18-reflectance": { + "type": "application/x-netcdf", + "description": "Reflectance for OLCI acquisition band Oa18", + "eo:bands": [ + { + "name": "Oa18", + "description": "Band 18 - Water vapour absorption reference. Common reference band with SLSTR. Vegetation monitoring", + "center_wavelength": 0.885, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "oa21-reflectance": { + "type": "application/x-netcdf", + "description": "Reflectance for OLCI acquisition band Oa21", + "eo:bands": [ + { + "name": "Oa21", + "description": "Band 21 - Water vapour absorption, atmospheric / aerosol correction", + "center_wavelength": 1.02, + "full_width_half_max": 0.04 + } + ], + "roles": [ + "data" + ] + }, + "chl-nn": { + "type": "application/x-netcdf", + "description": "Neural net chlorophyll concentration", + "eo:bands": [ + { + "name": "Oa01", + "description": "Band 1 - Aerosol correction, improved water constituent retrieval", + "center_wavelength": 0.4, + "full_width_half_max": 0.015 + }, + { + "name": "Oa02", + "description": "Band 2 - Yellow substance and detrital pigments (turbidity)", + "center_wavelength": 0.4125, + "full_width_half_max": 0.01 + }, + { + "name": "Oa03", + "description": "Band 3 - Chlorophyll absorption maximum, biogeochemistry, vegetation", + "center_wavelength": 0.4425, + "full_width_half_max": 0.01 + }, + { + "name": "Oa04", + "description": "Band 4 - Chlorophyll", + "center_wavelength": 0.49, + "full_width_half_max": 0.01 + }, + { + "name": "Oa05", + "description": "Band 5 - Chlorophyll, sediment, turbidity, red tide", + "center_wavelength": 0.51, + "full_width_half_max": 0.01 + }, + { + "name": "Oa06", + "description": "Band 6 - Chlorophyll reference (minimum)", + "center_wavelength": 0.56, + "full_width_half_max": 0.01 + }, + { + "name": "Oa07", + "description": "Band 7 - Sediment loading", + "center_wavelength": 0.62, + "full_width_half_max": 0.01 + }, + { + "name": "Oa08", + "description": "Band 8 - 2nd Chlorophyll absorption maximum, sediment, yellow substance / vegetation", + "center_wavelength": 0.665, + "full_width_half_max": 0.01 + }, + { + "name": "Oa09", + "description": "Band 9 - Improved fluorescence retrieval", + "center_wavelength": 0.67375, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa10", + "description": "Band 10 - Chlorophyll fluorescence peak, red edge", + "center_wavelength": 0.68125, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa11", + "description": "Band 11 - Chlorophyll fluorescence baseline, red edge transition", + "center_wavelength": 0.70875, + "full_width_half_max": 0.01 + }, + { + "name": "Oa12", + "description": "Band 12 - O2 absorption / clouds, vegetation", + "center_wavelength": 0.75375, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa16", + "description": "Band 16 - Atmospheric / aerosol correction", + "center_wavelength": 0.77875, + "full_width_half_max": 0.015 + }, + { + "name": "Oa17", + "description": "Band 17 - Atmospheric / aerosol correction, clouds, pixel co-registration", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + }, + { + "name": "Oa18", + "description": "Band 18 - Water vapour absorption reference. Common reference band with SLSTR. Vegetation monitoring", + "center_wavelength": 0.885, + "full_width_half_max": 0.01 + }, + { + "name": "Oa21", + "description": "Band 21 - Water vapour absorption, atmospheric / aerosol correction", + "center_wavelength": 1.02, + "full_width_half_max": 0.04 + } + ], + "roles": [ + "data" + ] + }, + "chl-oc4me": { + "type": "application/x-netcdf", + "description": "OC4Me algorithm chlorophyll concentration", + "eo:bands": [ + { + "name": "Oa03", + "description": "Band 3 - Chlorophyll absorption maximum, biogeochemistry, vegetation", + "center_wavelength": 0.4425, + "full_width_half_max": 0.01 + }, + { + "name": "Oa04", + "description": "Band 4 - Chlorophyll", + "center_wavelength": 0.49, + "full_width_half_max": 0.01 + }, + { + "name": "Oa05", + "description": "Band 5 - Chlorophyll, sediment, turbidity, red tide", + "center_wavelength": 0.51, + "full_width_half_max": 0.01 + }, + { + "name": "Oa06", + "description": "Band 6 - Chlorophyll reference (minimum)", + "center_wavelength": 0.56, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "iop-nn": { + "type": "application/x-netcdf", + "description": "Inherent optical properties of water", + "eo:bands": [ + { + "name": "Oa01", + "description": "Band 1 - Aerosol correction, improved water constituent retrieval", + "center_wavelength": 0.4, + "full_width_half_max": 0.015 + }, + { + "name": "Oa12", + "description": "Band 12 - O2 absorption / clouds, vegetation", + "center_wavelength": 0.75375, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa16", + "description": "Band 16 - Atmospheric / aerosol correction", + "center_wavelength": 0.77875, + "full_width_half_max": 0.015 + }, + { + "name": "Oa17", + "description": "Band 17 - Atmospheric / aerosol correction, clouds, pixel co-registration", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + }, + { + "name": "Oa21", + "description": "Band 21 - Water vapour absorption, atmospheric / aerosol correction", + "center_wavelength": 1.02, + "full_width_half_max": 0.04 + } + ], + "roles": [ + "data" + ] + }, + "iwv": { + "type": "application/x-netcdf", + "description": "Integrated water vapour column", + "eo:bands": [ + { + "name": "Oa18", + "description": "Band 18 - Water vapour absorption reference. Common reference band with SLSTR. Vegetation monitoring", + "center_wavelength": 0.885, + "full_width_half_max": 0.01 + }, + { + "name": "Oa19", + "description": "Band 19 - Water vapour absorption, vegetation monitoring (maximum REFLECTANCE)", + "center_wavelength": 0.9, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "par": { + "type": "application/x-netcdf", + "description": "Photosynthetically active radiation", + "roles": [ + "data" + ] + }, + "trsp": { + "type": "application/x-netcdf", + "description": "Transparency properties of water", + "eo:bands": [ + { + "name": "Oa04", + "description": "Band 4 - Chlorophyll", + "center_wavelength": 0.49, + "full_width_half_max": 0.01 + }, + { + "name": "Oa06", + "description": "Band 6 - Chlorophyll reference (minimum)", + "center_wavelength": 0.56, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "tsm-nn": { + "type": "application/x-netcdf", + "description": "Total suspended matter concentration", + "eo:bands": [ + { + "name": "Oa01", + "description": "Band 1 - Aerosol correction, improved water constituent retrieval", + "center_wavelength": 0.4, + "full_width_half_max": 0.015 + }, + { + "name": "Oa02", + "description": "Band 2 - Yellow substance and detrital pigments (turbidity)", + "center_wavelength": 0.4125, + "full_width_half_max": 0.01 + }, + { + "name": "Oa03", + "description": "Band 3 - Chlorophyll absorption maximum, biogeochemistry, vegetation", + "center_wavelength": 0.4425, + "full_width_half_max": 0.01 + }, + { + "name": "Oa04", + "description": "Band 4 - Chlorophyll", + "center_wavelength": 0.49, + "full_width_half_max": 0.01 + }, + { + "name": "Oa05", + "description": "Band 5 - Chlorophyll, sediment, turbidity, red tide", + "center_wavelength": 0.51, + "full_width_half_max": 0.01 + }, + { + "name": "Oa06", + "description": "Band 6 - Chlorophyll reference (minimum)", + "center_wavelength": 0.56, + "full_width_half_max": 0.01 + }, + { + "name": "Oa07", + "description": "Band 7 - Sediment loading", + "center_wavelength": 0.62, + "full_width_half_max": 0.01 + }, + { + "name": "Oa08", + "description": "Band 8 - 2nd Chlorophyll absorption maximum, sediment, yellow substance / vegetation", + "center_wavelength": 0.665, + "full_width_half_max": 0.01 + }, + { + "name": "Oa09", + "description": "Band 9 - Improved fluorescence retrieval", + "center_wavelength": 0.67375, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa10", + "description": "Band 10 - Chlorophyll fluorescence peak, red edge", + "center_wavelength": 0.68125, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa11", + "description": "Band 11 - Chlorophyll fluorescence baseline, red edge transition", + "center_wavelength": 0.70875, + "full_width_half_max": 0.01 + }, + { + "name": "Oa12", + "description": "Band 12 - O2 absorption / clouds, vegetation", + "center_wavelength": 0.75375, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa16", + "description": "Band 16 - Atmospheric / aerosol correction", + "center_wavelength": 0.77875, + "full_width_half_max": 0.015 + }, + { + "name": "Oa17", + "description": "Band 17 - Atmospheric / aerosol correction, clouds, pixel co-registration", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + }, + { + "name": "Oa18", + "description": "Band 18 - Water vapour absorption reference. Common reference band with SLSTR. Vegetation monitoring", + "center_wavelength": 0.885, + "full_width_half_max": 0.01 + }, + { + "name": "Oa21", + "description": "Band 21 - Water vapour absorption, atmospheric / aerosol correction", + "center_wavelength": 1.02, + "full_width_half_max": 0.04 + } + ], + "roles": [ + "data" + ] + }, + "w-aer": { + "type": "application/x-netcdf", + "description": "Aerosol over water", + "eo:bands": [ + { + "name": "Oa05", + "description": "Band 5 - Chlorophyll, sediment, turbidity, red tide", + "center_wavelength": 0.51, + "full_width_half_max": 0.01 + }, + { + "name": "Oa06", + "description": "Band 6 - Chlorophyll reference (minimum)", + "center_wavelength": 0.56, + "full_width_half_max": 0.01 + }, + { + "name": "Oa17", + "description": "Band 17 - Atmospheric / aerosol correction, clouds, pixel co-registration", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + } + ], + "roles": [ + "data" + ] + }, + "geo-coordinates": { + "type": "application/x-netcdf", + "description": "Geo coordinate annotations", + "roles": [ + "data" + ] + }, + "instrument-data": { + "type": "application/x-netcdf", + "description": "Instrument annotations", + "roles": [ + "data" + ] + }, + "tie-geo-coordinates": { + "type": "application/x-netcdf", + "description": "Tie-point geo coordinate annotations", + "roles": [ + "data" + ] + }, + "tie-geometries": { + "type": "application/x-netcdf", + "description": "Tie-point geometry annotations", + "roles": [ + "data" + ] + }, + "tie-meteo": { + "type": "application/x-netcdf", + "description": "Tie-point meteo annotations", + "roles": [ + "data" + ] + }, + "time-coordinates": { + "type": "application/x-netcdf", + "description": "Time coordinate annotations", + "roles": [ + "data" + ] + }, + "wqsf": { + "type": "application/x-netcdf", + "description": "Water quality and science flags", + "roles": [ + "data" + ] + }, + "eop-metadata": { + "type": "application/xml", + "description": "Metadata produced by the European Organisation for the Exploitation of Meteorological Satellites (EUMETSAT)", + "roles": [ + "metadata" + ] + }, + "browse-jpg": { + "type": "image/jpeg", + "description": "Preview image produced by the European Organisation for the Exploitation of Meteorological Satellites (EUMETSAT)", + "roles": [ + "thumbnail" + ] + } + } +} \ No newline at end of file diff --git a/datasets/sentinel-3/collection/sentinel-3-slstr-frp-l2-netcdf/description.md b/datasets/sentinel-3/collection/sentinel-3-slstr-frp-l2-netcdf/description.md new file mode 100644 index 00000000..872422b6 --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-slstr-frp-l2-netcdf/description.md @@ -0,0 +1,13 @@ +This Collection provides Sentinel-3 [SLSTR Level-2 Fire Radiative Power](https://sentinel.esa.int/web/sentinel/user-guides/sentinel-3-slstr/product-types/level-2-frp) (FRP) products containing data on fires detected over land and ocean. + +## Data files + +The primary measurement data is contained in the `FRP_in.nc` file and provides FRP and uncertainties, projected onto a 1km grid, for fires detected in the thermal infrared (TIR) spectrum over land. Since February 2022, FRP and uncertainties are also provided for fires detected in the short wave infrared (SWIR) spectrum over both land and ocean, with the delivered data projected onto a 500m grid. The latter SWIR-detected fire data is only available for night-time measurements and is contained in the `FRP_an.nc` or `FRP_bn.nc` files. + +In addition to the measurement data files, a standard set of annotation data files provide meteorological information, geolocation and time coordinates, geometry information, and quality flags. + +## Processing + +The TIR fire detection is based on measurements from the S7 and F1 bands of the [SLSTR instrument](https://sentinels.copernicus.eu/web/sentinel/technical-guides/sentinel-3-slstr/instrument); SWIR fire detection is based on the S5 and S6 bands. More information about the product and data processing can be found in the [User Guide](https://sentinel.esa.int/web/sentinel/user-guides/sentinel-3-slstr/product-types/level-2-frp) and [Technical Guide](https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-3-slstr/level-2/frp-processing). + +This Collection contains Level-2 data in NetCDF files from August 2020 to present. diff --git a/datasets/sentinel-3/collection/sentinel-3-slstr-frp-l2-netcdf/template.json b/datasets/sentinel-3/collection/sentinel-3-slstr-frp-l2-netcdf/template.json new file mode 100644 index 00000000..61514d47 --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-slstr-frp-l2-netcdf/template.json @@ -0,0 +1,290 @@ +{ + "stac_version": "1.0.0", + "type": "Collection", + "id": "sentinel-3-slstr-frp-l2-netcdf", + "title": "Sentinel-3 Fire Radiative Power", + "description": "{{ collection.description }}", + "license": "proprietary", + "links": [ + { + "rel": "license", + "href": "https://sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "type": "application/pdf", + "title": "Sentinel Data License" + }, + { + "rel": "about", + "href": "https://sentinel.esa.int/web/sentinel/user-guides/sentinel-3-slstr/product-types/level-2-frp", + "type": "text/html", + "title": "Sentinel-3 Fire Radiative Power Product User Guide" + } + ], + "stac_extensions": [ + "https://stac-extensions.github.io/sat/v1.0.0/schema.json", + "https://stac-extensions.github.io/table/v1.2.0/schema.json", + "https://stac-extensions.github.io/item-assets/v1.0.0/schema.json", + "https://stac-extensions.github.io/eo/v1.1.0/schema.json" + ], + "keywords": [ + "Sentinel", + "Copernicus", + "ESA", + "Satellite", + "Temperature", + "Fire" + ], + "msft:group_id": "sentinel-3", + "msft:short_description": "Sentinel-3 fire detection over land (SLSTR FRP).", + "msft:storage_account": "sentinel3euwest", + "msft:container": "sentinel-3", + "msft:region": "westeurope", + "providers": [ + { + "name": "ESA", + "roles": [ + "producer", + "processor", + "licensor" + ], + "url": "https://earth.esa.int/web/guest/home" + }, + { + "name": "Microsoft", + "roles": [ + "host" + ], + "url": "https://planetarycomputer.microsoft.com" + } + ], + "assets": { + "thumbnail": { + "title": "Sentinel-3 Fire Radiative Power Thumbnail", + "href": "https://ai4edatasetspublicassets.blob.core.windows.net/assets/pc_thumbnails/sentinel-3-slstr-frp-l2-netcdf-thumb.png", + "media_type": "image/png" + }, + "geoparquet-items": { + "href": "abfs://items/sentinel-3-slstr-frp-l2-netcdf.parquet", + "title": "GeoParquet STAC Items", + "description": "Snapshot of the collection's STAC items exported to GeoParquet format.", + "type": "application/x-parquet", + "roles": [ + "stac-items" + ], + "table:storage_options": { + "account_name": "pcstacitems" + }, + "msft:partition_info": { + "is_partitioned": true, + "partition_frequency": "W" + } + } + }, + "summaries": { + "constellation": [ + "Sentinel-3" + ], + "platform": [ + "Sentinel-3A", + "Sentinel-3B" + ], + "instruments": [ + "SLSTR" + ], + "sat:platform_international_designator": [ + "2016-011A", + "2018-039A" + ], + "sat:orbit_state": [ + "ascending", + "descending" + ], + "s3:product_type": [ + "SL_2_FRP___" + ], + "s3:product_name": [ + "slstr-frp" + ], + "s3:processing_timeliness": [ + "NT" + ], + "eo:bands": [ + { + "name": "F1", + "description": "Band 10 - Active fire", + "center_wavelength": 3.742, + "full_width_half_max": 0.398 + }, + { + "name": "S5", + "description": "Band 5 - Cloud clearing, ice, snow, vegetation monitoring", + "center_wavelength": 1.6134, + "full_width_half_max": 0.06068 + }, + { + "name": "S6", + "description": "Band 6 - Vegetation state and cloud clearing", + "center_wavelength": 2.2557, + "full_width_half_max": 0.05015 + }, + { + "name": "S7", + "description": "Band 7 - SST, LST, Active fire", + "center_wavelength": 3.742, + "full_width_half_max": 0.398 + } + ] + }, + "extent": { + "spatial": { + "bbox": [ + [ + -180, + -90, + 180, + 90 + ] + ] + }, + "temporal": { + "interval": [ + [ + "2020-08-08T23:11:15.617203Z", + null + ] + ] + } + }, + "item_assets": { + "safe-manifest": { + "type": "application/xml", + "description": "SAFE product manifest", + "roles": [ + "metadata" + ] + }, + "frp-in": { + "type": "application/x-netcdf", + "description": "Fire Radiative Power (FRP) dataset", + "eo:bands": [ + { + "name": "S5", + "description": "Band 5 - Cloud clearing, ice, snow, vegetation monitoring", + "center_wavelength": 1.6134, + "full_width_half_max": 0.06068 + }, + { + "name": "S6", + "description": "Band 6 - Vegetation state and cloud clearing", + "center_wavelength": 2.2557, + "full_width_half_max": 0.05015 + }, + { + "name": "S7", + "description": "Band 7 - SST, LST, Active fire", + "center_wavelength": 3.742, + "full_width_half_max": 0.398 + }, + { + "name": "F1", + "description": "Band 10 - Active fire", + "center_wavelength": 3.742, + "full_width_half_max": 0.398 + } + ], + "roles": [ + "data" + ] + }, + "slstr-cartesian-fn": { + "type": "application/x-netcdf", + "description": "Full resolution cartesian coordinates for the 1km F1 grid, nadir view", + "roles": [ + "data" + ] + }, + "slstr-cartesian-in": { + "type": "application/x-netcdf", + "description": "Full resolution cartesian coordinates for the 1km TIR grid, nadir view", + "roles": [ + "data" + ] + }, + "slstr-cartesian-tx": { + "type": "application/x-netcdf", + "description": "16km cartesian coordinates", + "roles": [ + "data" + ] + }, + "slstr-flags-fn": { + "type": "application/x-netcdf", + "description": "Global flags for the 1km F1 grid, nadir view", + "roles": [ + "data" + ] + }, + "slstr-flags-in": { + "type": "application/x-netcdf", + "description": "Global flags for the 1km TIR grid, nadir view", + "roles": [ + "data" + ] + }, + "slstr-geodetic-fn": { + "type": "application/x-netcdf", + "description": "Full resolution geodetic coordinates for the 1km F1 grid, nadir view", + "roles": [ + "data" + ] + }, + "slstr-geodetic-in": { + "type": "application/x-netcdf", + "description": "Full resolution geodetic coordinates for the 1km TIR grid, nadir view", + "roles": [ + "data" + ] + }, + "slstr-geodetic-tx": { + "type": "application/x-netcdf", + "description": "16km geodetic coordinates", + "roles": [ + "data" + ] + }, + "slstr-geometry-tn": { + "type": "application/x-netcdf", + "description": "16km solar and satellite geometry annotations, nadir view", + "roles": [ + "data" + ] + }, + "slstr-indices-fn": { + "type": "application/x-netcdf", + "description": "Scan, pixel and detector annotations for the 1km F1 grid, nadir view", + "roles": [ + "data" + ] + }, + "slstr-indices-in": { + "type": "application/x-netcdf", + "description": "Scan, pixel and detector annotations for the 1km TIR grid, nadir view", + "roles": [ + "data" + ] + }, + "slstr-met-tx": { + "type": "application/x-netcdf", + "description": "Meteorological parameters regridded onto the 16km tie points", + "roles": [ + "data" + ] + }, + "slstr-time-in": { + "type": "application/x-netcdf", + "description": "Time annotations for the 1 KM grid", + "roles": [ + "data" + ] + } + } +} \ No newline at end of file diff --git a/datasets/sentinel-3/collection/sentinel-3-slstr-lst-l2-netcdf/description.md b/datasets/sentinel-3/collection/sentinel-3-slstr-lst-l2-netcdf/description.md new file mode 100644 index 00000000..0ce27c53 --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-slstr-lst-l2-netcdf/description.md @@ -0,0 +1,18 @@ +This Collection provides Sentinel-3 [SLSTR Level-2 Land Surface Temperature](https://sentinel.esa.int/web/sentinel/user-guides/sentinel-3-slstr/product-types/level-2-lst) products containing data on land surface temperature measurements on a 1km grid. Radiance is measured in two channels to determine the temperature of the Earth's surface skin in the instrument field of view, where the term "skin" refers to the top surface of bare soil or the effective emitting temperature of vegetation canopies as viewed from above. + +## Data files + +The dataset includes data on the primary measurement variable, land surface temperature, in a single NetCDF file, `LST_in.nc`. A second file, `LST_ancillary.nc`, contains several ancillary variables: + +- Normalized Difference Vegetation Index +- Surface biome classification +- Fractional vegetation cover +- Total water vapor column + +In addition to the primary and ancillary data files, a standard set of annotation data files provide meteorological information, geolocation and time coordinates, geometry information, and quality flags. More information about the product and data processing can be found in the [User Guide](https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-slstr/product-types/level-2-lst) and [Technical Guide](https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-3-slstr/level-2/lst-processing). + +This Collection contains Level-2 data in NetCDF files from April 2016 to present. + +## STAC Item geometries + +The Collection contains small "chips" and long "stripes" of data collected along the satellite direction of travel. Approximately five percent of the STAC Items describing long stripes of data contain geometries that encompass a larger area than an exact concave hull of the data extents. This may require additional filtering when searching the Collection for Items that spatially intersect an area of interest. diff --git a/datasets/sentinel-3/collection/sentinel-3-slstr-lst-l2-netcdf/template.json b/datasets/sentinel-3/collection/sentinel-3-slstr-lst-l2-netcdf/template.json new file mode 100644 index 00000000..4c31f9ba --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-slstr-lst-l2-netcdf/template.json @@ -0,0 +1,245 @@ +{ + "stac_version": "1.0.0", + "type": "Collection", + "id": "sentinel-3-slstr-lst-l2-netcdf", + "title": "Sentinel-3 Land Surface Temperature", + "description": "{{ collection.description }}", + "license": "proprietary", + "links": [ + { + "rel": "license", + "href": "https://sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "type": "application/pdf", + "title": "Sentinel Data License" + }, + { + "rel": "about", + "href": "https://sentinel.esa.int/web/sentinel/user-guides/sentinel-3-slstr/product-types/level-2-lst", + "type": "text/html", + "title": "Sentinel-3 Land Surface Temperature Product User Guide" + } + ], + "stac_extensions": [ + "https://stac-extensions.github.io/sat/v1.0.0/schema.json", + "https://stac-extensions.github.io/table/v1.2.0/schema.json", + "https://stac-extensions.github.io/item-assets/v1.0.0/schema.json", + "https://stac-extensions.github.io/eo/v1.1.0/schema.json" + ], + "keywords": [ + "Sentinel", + "Copernicus", + "ESA", + "Satellite", + "Temperature", + "Land" + ], + "msft:group_id": "sentinel-3", + "msft:short_description": "Sentinel-3 land surface temperature (SLSTR LST).", + "msft:storage_account": "sentinel3euwest", + "msft:container": "sentinel-3", + "msft:region": "westeurope", + "providers": [ + { + "name": "ESA", + "roles": [ + "producer", + "processor", + "licensor" + ], + "url": "https://earth.esa.int/web/guest/home" + }, + { + "name": "Microsoft", + "roles": [ + "host" + ], + "url": "https://planetarycomputer.microsoft.com" + } + ], + "assets": { + "thumbnail": { + "title": "Sentinel-3 Land Surface Temperature Thumbnail", + "href": "https://ai4edatasetspublicassets.blob.core.windows.net/assets/pc_thumbnails/sentinel-3-slstr-lst-l2-netcdf-thumb.png", + "media_type": "image/png" + }, + "geoparquet-items": { + "href": "abfs://items/sentinel-3-slstr-lst-l2-netcdf.parquet", + "title": "GeoParquet STAC Items", + "description": "Snapshot of the collection's STAC items exported to GeoParquet format.", + "type": "application/x-parquet", + "roles": [ + "stac-items" + ], + "table:storage_options": { + "account_name": "pcstacitems" + }, + "msft:partition_info": { + "is_partitioned": true, + "partition_frequency": "W" + } + } + }, + "summaries": { + "constellation": [ + "Sentinel-3" + ], + "platform": [ + "Sentinel-3A", + "Sentinel-3B" + ], + "instruments": [ + "SLSTR" + ], + "sat:platform_international_designator": [ + "2016-011A", + "2018-039A" + ], + "sat:orbit_state": [ + "ascending", + "descending" + ], + "s3:product_type": [ + "SL_2_LST___" + ], + "s3:product_name": [ + "slstr-lst" + ], + "s3:processing_timeliness": [ + "NT" + ], + "eo:bands": [ + { + "name": "S8", + "description": "Band 8 - SST, LST, Active fire", + "center_wavelength": 10.854, + "full_width_half_max": 0.776 + }, + { + "name": "S9", + "description": "Band 9 - SST, LST", + "center_wavelength": 12.0225, + "full_width_half_max": 0.905 + } + ] + }, + "extent": { + "spatial": { + "bbox": [ + [ + -180, + -90, + 180, + 90 + ] + ] + }, + "temporal": { + "interval": [ + [ + "2016-04-19T01:35:17.188500Z", + null + ] + ] + } + }, + "item_assets": { + "safe-manifest": { + "type": "application/xml", + "description": "SAFE product manifest", + "roles": [ + "metadata" + ] + }, + "lst-in": { + "type": "application/x-netcdf", + "description": "Land Surface Temperature (LST) values", + "eo:bands": [ + { + "name": "S8", + "description": "Band 8 - SST, LST, Active fire", + "center_wavelength": 10.854, + "full_width_half_max": 0.776 + }, + { + "name": "S9", + "description": "Band 9 - SST, LST", + "center_wavelength": 12.0225, + "full_width_half_max": 0.905 + } + ], + "roles": [ + "data" + ] + }, + "lst-ancillary-ds": { + "type": "application/x-netcdf", + "description": "LST ancillary measurement dataset", + "roles": [ + "data" + ] + }, + "slstr-flags-in": { + "type": "application/x-netcdf", + "description": "Global flags for the 1km TIR grid, nadir view", + "roles": [ + "data" + ] + }, + "slstr-indices-in": { + "type": "application/x-netcdf", + "description": "Scan, pixel and detector indices annotations for the 1km TIR grid, nadir view", + "roles": [ + "data" + ] + }, + "slstr-time-in": { + "type": "application/x-netcdf", + "description": "Time annotations for the 1km grid", + "roles": [ + "data" + ] + }, + "slstr-geodetic-in": { + "type": "application/x-netcdf", + "description": "Full resolution geodetic coordinates for the 1km TIR grid, nadir view", + "roles": [ + "data" + ] + }, + "slstr-cartesian-in": { + "type": "application/x-netcdf", + "description": "Full resolution cartesian coordinates for the 1km TIR grid, nadir view", + "roles": [ + "data" + ] + }, + "slstr-geometry-tn": { + "type": "application/x-netcdf", + "description": "16km solar and satellite geometry annotations, nadir view", + "roles": [ + "data" + ] + }, + "slstr-geodetic-tx": { + "type": "application/x-netcdf", + "description": "16km geodetic coordinates", + "roles": [ + "data" + ] + }, + "slstr-cartesian-tx": { + "type": "application/x-netcdf", + "description": "16km cartesian coordinates", + "roles": [ + "data" + ] + }, + "slstr-met-tx": { + "type": "application/x-netcdf", + "description": "Meteorological parameters regridded onto the 16km tie points", + "roles": [ + "data" + ] + } + } +} \ No newline at end of file diff --git a/datasets/sentinel-3/collection/sentinel-3-slstr-wst-l2-netcdf/description.md b/datasets/sentinel-3/collection/sentinel-3-slstr-wst-l2-netcdf/description.md new file mode 100644 index 00000000..b865bce9 --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-slstr-wst-l2-netcdf/description.md @@ -0,0 +1,16 @@ +This Collection provides Sentinel-3 [SLSTR Level-2 Water Surface Temperature](https://sentinel.esa.int/web/sentinel/user-guides/sentinel-3-slstr/product-types/level-2-wst) products containing data on sea surface temperature measurements on a 1km grid. Each product consists of a single NetCDF file containing all data variables: + +- Sea Surface Temperature (SST) value +- SST total uncertainty +- Latitude and longitude coordinates +- SST time deviation +- Single Sensor Error Statistic (SSES) bias and standard deviation estimate +- Contextual parameters such as wind speed at 10 m and fractional sea-ice contamination +- Quality flag +- Satellite zenith angle +- Top Of Atmosphere (TOA) Brightness Temperature (BT) +- TOA noise equivalent BT + +More information about the product and data processing can be found in the [User Guide](https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-slstr/product-types/level-2-wst) and [Technical Guide](https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-3-slstr/level-2/sst-processing). + +This Collection contains Level-2 data in NetCDF files from October 2017 to present. diff --git a/datasets/sentinel-3/collection/sentinel-3-slstr-wst-l2-netcdf/template.json b/datasets/sentinel-3/collection/sentinel-3-slstr-wst-l2-netcdf/template.json new file mode 100644 index 00000000..5694f971 --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-slstr-wst-l2-netcdf/template.json @@ -0,0 +1,201 @@ +{ + "stac_version": "1.0.0", + "type": "Collection", + "id": "sentinel-3-slstr-wst-l2-netcdf", + "title": "Sentinel-3 Sea Surface Temperature", + "description": "{{ collection.description }}", + "license": "proprietary", + "links": [ + { + "rel": "license", + "href": "https://sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "type": "application/pdf", + "title": "Sentinel Data License" + }, + { + "rel": "about", + "href": "https://sentinel.esa.int/web/sentinel/user-guides/sentinel-3-slstr/product-types/level-2-wst", + "type": "text/html", + "title": "Sentinel-3 Sea Surface Temperature Product User Guide" + } + ], + "stac_extensions": [ + "https://stac-extensions.github.io/sat/v1.0.0/schema.json", + "https://stac-extensions.github.io/table/v1.2.0/schema.json", + "https://stac-extensions.github.io/item-assets/v1.0.0/schema.json", + "https://stac-extensions.github.io/eo/v1.1.0/schema.json" + ], + "keywords": [ + "Sentinel", + "Copernicus", + "ESA", + "Satellite", + "Temperature", + "Ocean" + ], + "msft:group_id": "sentinel-3", + "msft:short_description": "Sentinel-3 sea surface temperature (SLSTR WST).", + "msft:storage_account": "sentinel3euwest", + "msft:container": "sentinel-3", + "msft:region": "westeurope", + "providers": [ + { + "name": "ESA", + "roles": [ + "producer", + "processor", + "licensor" + ], + "url": "https://earth.esa.int/web/guest/home" + }, + { + "name": "Microsoft", + "roles": [ + "host" + ], + "url": "https://planetarycomputer.microsoft.com" + } + ], + "assets": { + "thumbnail": { + "title": "Sentinel-3 Sea Surface Temperature Thumbnail", + "href": "https://ai4edatasetspublicassets.blob.core.windows.net/assets/pc_thumbnails/sentinel-3-slstr-wst-l2-netcdf-thumb.png", + "media_type": "image/png" + }, + "geoparquet-items": { + "href": "abfs://items/sentinel-3-slstr-wst-l2-netcdf.parquet", + "title": "GeoParquet STAC Items", + "description": "Snapshot of the collection's STAC items exported to GeoParquet format.", + "type": "application/x-parquet", + "roles": [ + "stac-items" + ], + "table:storage_options": { + "account_name": "pcstacitems" + }, + "msft:partition_info": { + "is_partitioned": true, + "partition_frequency": "MS" + } + } + }, + "summaries": { + "constellation": [ + "Sentinel-3" + ], + "platform": [ + "Sentinel-3A", + "Sentinel-3B" + ], + "instruments": [ + "SLSTR" + ], + "sat:platform_international_designator": [ + "2016-011A", + "2018-039A" + ], + "sat:orbit_state": [ + "ascending", + "descending" + ], + "s3:product_type": [ + "SL_2_WST___" + ], + "s3:product_name": [ + "slstr-wst" + ], + "s3:processing_timeliness": [ + "NT" + ], + "eo:bands": [ + { + "name": "S7", + "description": "Band 7 - SST, LST, Active fire", + "center_wavelength": 3.742, + "full_width_half_max": 0.398 + }, + { + "name": "S8", + "description": "Band 8 - SST, LST, Active fire", + "center_wavelength": 10.854, + "full_width_half_max": 0.776 + }, + { + "name": "S9", + "description": "Band 9 - SST, LST", + "center_wavelength": 12.0225, + "full_width_half_max": 0.905 + } + ] + }, + "extent": { + "spatial": { + "bbox": [ + [ + -180, + -90, + 180, + 90 + ] + ] + }, + "temporal": { + "interval": [ + [ + "2017-10-31T23:59:57.451604Z", + null + ] + ] + } + }, + "item_assets": { + "safe-manifest": { + "type": "application/xml", + "description": "SAFE product manifest", + "roles": [ + "metadata" + ] + }, + "l2p": { + "type": "application/x-netcdf", + "description": "Skin Sea Surface Temperature (SST) values", + "eo:bands": [ + { + "name": "S7", + "description": "Band 7 - SST, LST, Active fire", + "center_wavelength": 3.742, + "full_width_half_max": 0.398 + }, + { + "name": "S8", + "description": "Band 8 - SST, LST, Active fire", + "center_wavelength": 10.854, + "full_width_half_max": 0.776 + }, + { + "name": "S9", + "description": "Band 9 - SST, LST", + "center_wavelength": 12.0225, + "full_width_half_max": 0.905 + } + ], + "roles": [ + "data" + ] + }, + "eop-metadata": { + "type": "application/xml", + "description": "Metadata produced by the European Organisation for the Exploitation of Meteorological Satellites (EUMETSAT)", + "roles": [ + "metadata" + ] + }, + "browse-jpg": { + "type": "image/jpeg", + "description": "Preview image produced by the European Organisation for the Exploitation of Meteorological Satellites (EUMETSAT)", + "roles": [ + "thumbnail" + ] + } + } +} \ No newline at end of file diff --git a/datasets/sentinel-3/collection/sentinel-3-sral-lan-l2-netcdf/description.md b/datasets/sentinel-3/collection/sentinel-3-sral-lan-l2-netcdf/description.md new file mode 100644 index 00000000..d9e2728c --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-sral-lan-l2-netcdf/description.md @@ -0,0 +1,9 @@ +This Collection provides Sentinel-3 [SRAL Level-2 Land Altimetry](https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-3-altimetry/level-2-algorithms-products) products, which contain data on land radar altimetry measurements. Each product contains three NetCDF files: + +- A reduced data file containing a subset of the 1 Hz Ku-band parameters. +- A standard data file containing the standard 1 Hz and 20 Hz Ku- and C-band parameters. +- An enhanced data file containing the standard 1 Hz and 20 Hz Ku- and C-band parameters along with the waveforms and parameters necessary to reprocess the data. + +More information about the product and data processing can be found in the [User Guide](https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-altimetry/overview) and [Technical Guide](https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-3-altimetry). + +This Collection contains Level-2 data in NetCDF files from March 2016 to present. diff --git a/datasets/sentinel-3/collection/sentinel-3-sral-lan-l2-netcdf/template.json b/datasets/sentinel-3/collection/sentinel-3-sral-lan-l2-netcdf/template.json new file mode 100644 index 00000000..9094a71d --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-sral-lan-l2-netcdf/template.json @@ -0,0 +1,196 @@ +{ + "stac_version": "1.0.0", + "type": "Collection", + "id": "sentinel-3-sral-lan-l2-netcdf", + "title": "Sentinel-3 Land Radar Altimetry", + "description": "{{ collection.description }}", + "license": "proprietary", + "links": [ + { + "rel": "license", + "href": "https://sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "type": "application/pdf", + "title": "Sentinel Data License" + }, + { + "rel": "about", + "href": "https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-altimetry/product-types", + "type": "text/html", + "title": "Sentinel-3 Land Radar Altimetry Product User Guide" + } + ], + "stac_extensions": [ + "https://stac-extensions.github.io/sat/v1.0.0/schema.json", + "https://stac-extensions.github.io/table/v1.2.0/schema.json", + "https://stac-extensions.github.io/item-assets/v1.0.0/schema.json" + ], + "keywords": [ + "Sentinel", + "Copernicus", + "ESA", + "Satellite", + "Radar", + "Altimetry" + ], + "msft:group_id": "sentinel-3", + "msft:short_description": "Sentinel-3 radar altimetry over land (SRAL LAN).", + "msft:storage_account": "sentinel3euwest", + "msft:container": "sentinel-3", + "msft:region": "westeurope", + "providers": [ + { + "name": "ESA", + "roles": [ + "producer", + "processor", + "licensor" + ], + "url": "https://earth.esa.int/web/guest/home" + }, + { + "name": "Microsoft", + "roles": [ + "host" + ], + "url": "https://planetarycomputer.microsoft.com" + } + ], + "assets": { + "thumbnail": { + "title": "Sentinel-3 Land Radar Altimetry Thumbnail", + "href": "https://ai4edatasetspublicassets.blob.core.windows.net/assets/pc_thumbnails/sentinel-3-sral-lan-l2-netcdf-thumb.png", + "media_type": "image/png" + }, + "geoparquet-items": { + "href": "abfs://items/sentinel-3-sral-lan-l2-netcdf.parquet", + "title": "GeoParquet STAC Items", + "description": "Snapshot of the collection's STAC items exported to GeoParquet format.", + "type": "application/x-parquet", + "roles": [ + "stac-items" + ], + "table:storage_options": { + "account_name": "pcstacitems" + }, + "msft:partition_info": { + "is_partitioned": true, + "partition_frequency": "QS" + } + } + }, + "summaries": { + "constellation": [ + "Sentinel-3" + ], + "platform": [ + "Sentinel-3A", + "Sentinel-3B" + ], + "instruments": [ + "SRAL" + ], + "sat:platform_international_designator": [ + "2016-011A", + "2018-039A" + ], + "sat:orbit_state": [ + "ascending", + "descending" + ], + "s3:product_type": [ + "SR_2_LAN___" + ], + "s3:product_name": [ + "sral-lan" + ], + "s3:processing_timeliness": [ + "NT" + ] + }, + "extent": { + "spatial": { + "bbox": [ + [ + -180, + -81.5, + 180, + 81.5 + ] + ] + }, + "temporal": { + "interval": [ + [ + "2016-03-01T14:07:51.632846Z", + null + ] + ] + } + }, + "item_assets": { + "safe-manifest": { + "type": "application/xml", + "description": "SAFE product manifest", + "roles": [ + "metadata" + ] + }, + "standard-measurement": { + "type": "application/x-netcdf", + "description": "Standard measurement data file", + "s3:altimetry_bands": [ + { + "description": "Band C - Ionospheric correction", + "frequency_band": "C", + "center_frequency": 5.409999872, + "band_width": 0.29 + }, + { + "description": "Band Ku - Range measurements", + "frequency_band": "Ku", + "center_frequency": 13.575000064, + "band_width": 0.32 + } + ], + "roles": [ + "data" + ] + }, + "enhanced-measurement": { + "type": "application/x-netcdf", + "description": "Enhanced measurement data file", + "s3:altimetry_bands": [ + { + "description": "Band C - Ionospheric correction", + "frequency_band": "C", + "center_frequency": 5.409999872, + "band_width": 0.29 + }, + { + "description": "Band Ku - Range measurements", + "frequency_band": "Ku", + "center_frequency": 13.575000064, + "band_width": 0.32 + } + ], + "roles": [ + "data" + ] + }, + "reduced-measurement": { + "type": "application/x-netcdf", + "description": "Reduced measurement data file", + "s3:altimetry_bands": [ + { + "description": "Band Ku - Range measurements", + "frequency_band": "Ku", + "center_frequency": 13.575000064, + "band_width": 0.32 + } + ], + "roles": [ + "data" + ] + } + } +} \ No newline at end of file diff --git a/datasets/sentinel-3/collection/sentinel-3-sral-wat-l2-netcdf/description.md b/datasets/sentinel-3/collection/sentinel-3-sral-wat-l2-netcdf/description.md new file mode 100644 index 00000000..35a42a65 --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-sral-wat-l2-netcdf/description.md @@ -0,0 +1,9 @@ +This Collection provides Sentinel-3 [SRAL Level-2 Ocean Altimetry](https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-3-altimetry/level-2-algorithms-products) products, which contain data on ocean radar altimetry measurements. Each product contains three NetCDF files: + +- A reduced data file containing a subset of the 1 Hz Ku-band parameters. +- A standard data file containing the standard 1 Hz and 20 Hz Ku- and C-band parameters. +- An enhanced data file containing the standard 1 Hz and 20 Hz Ku- and C-band parameters along with the waveforms and parameters necessary to reprocess the data. + +More information about the product and data processing can be found in the [User Guide](https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-altimetry/overview) and [Technical Guide](https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-3-altimetry). + +This Collection contains Level-2 data in NetCDF files from January 2017 to present. diff --git a/datasets/sentinel-3/collection/sentinel-3-sral-wat-l2-netcdf/template.json b/datasets/sentinel-3/collection/sentinel-3-sral-wat-l2-netcdf/template.json new file mode 100644 index 00000000..dcf12245 --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-sral-wat-l2-netcdf/template.json @@ -0,0 +1,204 @@ +{ + "stac_version": "1.0.0", + "type": "Collection", + "id": "sentinel-3-sral-wat-l2-netcdf", + "title": "Sentinel-3 Ocean Radar Altimetry", + "description": "{{ collection.description }}", + "license": "proprietary", + "links": [ + { + "rel": "license", + "href": "https://sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "type": "application/pdf", + "title": "Sentinel Data License" + }, + { + "rel": "about", + "href": "https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-altimetry/product-types", + "type": "text/html", + "title": "Sentinel-3 Ocean Radar Altimetry Product User Guide" + } + ], + "stac_extensions": [ + "https://stac-extensions.github.io/sat/v1.0.0/schema.json", + "https://stac-extensions.github.io/table/v1.2.0/schema.json", + "https://stac-extensions.github.io/item-assets/v1.0.0/schema.json" + ], + "keywords": [ + "Sentinel", + "Copernicus", + "ESA", + "Satellite", + "Radar", + "Altimetry", + "Ocean" + ], + "msft:group_id": "sentinel-3", + "msft:short_description": "Sentinel-3 radar altimetry over ocean (SRAL WAT).", + "msft:storage_account": "sentinel3euwest", + "msft:container": "sentinel-3", + "msft:region": "westeurope", + "providers": [ + { + "name": "ESA", + "roles": [ + "producer", + "processor", + "licensor" + ], + "url": "https://earth.esa.int/web/guest/home" + }, + { + "name": "Microsoft", + "roles": [ + "host" + ], + "url": "https://planetarycomputer.microsoft.com" + } + ], + "assets": { + "thumbnail": { + "title": "Sentinel-3 Ocean Radar Altimetry Thumbnail", + "href": "https://ai4edatasetspublicassets.blob.core.windows.net/assets/pc_thumbnails/sentinel-3-sral-wat-l2-netcdf-thumb.png", + "media_type": "image/png" + }, + "geoparquet-items": { + "href": "abfs://items/sentinel-3-sral-wat-l2-netcdf.parquet", + "title": "GeoParquet STAC Items", + "description": "Snapshot of the collection's STAC items exported to GeoParquet format.", + "type": "application/x-parquet", + "roles": [ + "stac-items" + ], + "table:storage_options": { + "account_name": "pcstacitems" + }, + "msft:partition_info": { + "is_partitioned": true, + "partition_frequency": "QS" + } + } + }, + "summaries": { + "constellation": [ + "Sentinel-3" + ], + "platform": [ + "Sentinel-3A", + "Sentinel-3B" + ], + "instruments": [ + "SRAL" + ], + "sat:platform_international_designator": [ + "2016-011A", + "2018-039A" + ], + "sat:orbit_state": [ + "ascending", + "descending" + ], + "s3:product_type": [ + "SR_2_WAT___" + ], + "s3:product_name": [ + "sral-wat" + ], + "s3:processing_timeliness": [ + "NT" + ] + }, + "extent": { + "spatial": { + "bbox": [ + [ + -180, + -81.5, + 180, + 81.5 + ] + ] + }, + "temporal": { + "interval": [ + [ + "2017-01-28T00:59:14.149496Z", + null + ] + ] + } + }, + "item_assets": { + "safe-manifest": { + "type": "application/xml", + "description": "SAFE product manifest", + "roles": [ + "metadata" + ] + }, + "standard-measurement": { + "type": "application/x-netcdf", + "description": "Standard measurement data file", + "s3:altimetry_bands": [ + { + "description": "Band C - Ionospheric correction", + "frequency_band": "C", + "center_frequency": 5.409999872, + "band_width": 0.29 + }, + { + "description": "Band Ku - Range measurements", + "frequency_band": "Ku", + "center_frequency": 13.575000064, + "band_width": 0.32 + } + ], + "roles": [ + "data" + ] + }, + "enhanced-measurement": { + "type": "application/x-netcdf", + "description": "Enhanced measurement data file", + "s3:altimetry_bands": [ + { + "description": "Band C - Ionospheric correction", + "frequency_band": "C", + "center_frequency": 5.409999872, + "band_width": 0.29 + }, + { + "description": "Band Ku - Range measurements", + "frequency_band": "Ku", + "center_frequency": 13.575000064, + "band_width": 0.32 + } + ], + "roles": [ + "data" + ] + }, + "reduced-measurement": { + "type": "application/x-netcdf", + "description": "Reduced measurement data file", + "s3:altimetry_bands": [ + { + "description": "Band Ku - Range measurements", + "frequency_band": "Ku", + "center_frequency": 13.575000064, + "band_width": 0.32 + } + ], + "roles": [ + "data" + ] + }, + "eop-metadata": { + "type": "application/xml", + "description": "Product metadata file produced by the European Organisation for the Exploitation of Meteorological Satellites (EUMETSAT)", + "roles": [ + "metadata" + ] + } + } +} \ No newline at end of file diff --git a/datasets/sentinel-3/collection/sentinel-3-synergy-aod-l2-netcdf/description.md b/datasets/sentinel-3/collection/sentinel-3-synergy-aod-l2-netcdf/description.md new file mode 100644 index 00000000..aaea425c --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-synergy-aod-l2-netcdf/description.md @@ -0,0 +1,13 @@ +This Collection provides the Sentinel-3 [Synergy Level-2 Aerosol Optical Depth](https://sentinels.copernicus.eu/web/sentinel/level-2-aod) product, which is a downstream development of the Sentinel-2 Level-1 [OLCI Full Resolution](https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-olci/data-formats/level-1) and [SLSTR Radiances and Brightness Temperatures](https://sentinels.copernicus.eu/web/sentinel/user-guides/Sentinel-3-slstr/data-formats/level-1) products. The dataset provides both retrieved and diagnostic global aerosol parameters at super-pixel (4.5 km x 4.5 km) resolution in a single NetCDF file for all regions over land and ocean free of snow/ice cover, excluding high cloud fraction data. The retrieved and derived aerosol parameters are: + +- Aerosol Optical Depth (AOD) at 440, 550, 670, 985, 1600 and 2250 nm +- Error estimates (i.e. standard deviation) in AOD at 440, 550, 670, 985, 1600 and 2250 nm +- Single Scattering Albedo (SSA) at 440, 550, 670, 985, 1600 and 2250 nm +- Fine-mode AOD at 550nm +- Aerosol Angstrom parameter between 550 and 865nm +- Dust AOD at 550nm +- Aerosol absorption optical depth at 550nm + +Atmospherically corrected nadir surface directional reflectances at 440, 550, 670, 985, 1600 and 2250 nm at super-pixel (4.5 km x 4.5 km) resolution are also provided. More information about the product and data processing can be found in the [User Guide](https://sentinels.copernicus.eu/web/sentinel/level-2-aod) and [Technical Guide](https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-3-synergy/products-algorithms/level-2-aod-algorithms-and-products). + +This Collection contains Level-2 data in NetCDF files from April 2020 to present. diff --git a/datasets/sentinel-3/collection/sentinel-3-synergy-aod-l2-netcdf/template.json b/datasets/sentinel-3/collection/sentinel-3-synergy-aod-l2-netcdf/template.json new file mode 100644 index 00000000..e09c52d2 --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-synergy-aod-l2-netcdf/template.json @@ -0,0 +1,224 @@ +{ + "stac_version": "1.0.0", + "type": "Collection", + "id": "sentinel-3-synergy-aod-l2-netcdf", + "title": "Sentinel-3 Global Aerosol", + "description": "{{ collection.description }}", + "license": "proprietary", + "links": [ + { + "rel": "license", + "href": "https://sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "type": "application/pdf", + "title": "Sentinel Data License" + }, + { + "rel": "about", + "href": "https://sentinels.copernicus.eu/web/sentinel/level-2-aod", + "type": "text/html", + "title": "Sentinel-3 Global Aerosol Product User Guide" + } + ], + "stac_extensions": [ + "https://stac-extensions.github.io/sat/v1.0.0/schema.json", + "https://stac-extensions.github.io/table/v1.2.0/schema.json", + "https://stac-extensions.github.io/item-assets/v1.0.0/schema.json", + "https://stac-extensions.github.io/eo/v1.1.0/schema.json" + ], + "keywords": [ + "Sentinel", + "Copernicus", + "ESA", + "Satellite", + "Global", + "Aerosol" + ], + "msft:group_id": "sentinel-3", + "msft:short_description": "Sentinel-3 global aerosol and surface reflectance at super-pixel (4.5km) resolution (SYNERGY AOD).", + "msft:storage_account": "sentinel3euwest", + "msft:container": "sentinel-3", + "msft:region": "westeurope", + "providers": [ + { + "name": "ESA", + "roles": [ + "producer", + "processor", + "licensor" + ], + "url": "https://earth.esa.int/web/guest/home" + }, + { + "name": "Microsoft", + "roles": [ + "host" + ], + "url": "https://planetarycomputer.microsoft.com" + } + ], + "assets": { + "thumbnail": { + "title": "Sentinel-3 Global Aerosol Thumbnail", + "href": "https://ai4edatasetspublicassets.blob.core.windows.net/assets/pc_thumbnails/sentinel-3-synergy-aod-l2-netcdf-thumb.png", + "media_type": "image/png" + }, + "geoparquet-items": { + "href": "abfs://items/sentinel-3-synergy-aod-l2-netcdf.parquet", + "title": "GeoParquet STAC Items", + "description": "Snapshot of the collection's STAC items exported to GeoParquet format.", + "type": "application/x-parquet", + "roles": [ + "stac-items" + ], + "table:storage_options": { + "account_name": "pcstacitems" + }, + "msft:partition_info": { + "is_partitioned": true, + "partition_frequency": "AS" + } + } + }, + "summaries": { + "constellation": [ + "Sentinel-3" + ], + "platform": [ + "Sentinel-3A", + "Sentinel-3B" + ], + "instruments": [ + "OLCI", + "SLSTR" + ], + "sat:platform_international_designator": [ + "2016-011A", + "2018-039A" + ], + "sat:orbit_state": [ + "ascending", + "descending" + ], + "s3:product_type": [ + "SY_2_AOD___" + ], + "s3:product_name": [ + "synergy-aod" + ], + "s3:processing_timeliness": [ + "NT" + ], + "eo:bands": [ + { + "name": "SYN_1600", + "description": "SLSTR nadir and oblique channel S5", + "center_wavelength": 1.61, + "full_width_half_max": 0.06 + }, + { + "name": "SYN_2250", + "description": "SLSTR nadir and oblique channel S6", + "center_wavelength": 2.25, + "full_width_half_max": 0.05 + }, + { + "name": "SYN_440", + "description": "OLCI channel Oa03", + "center_wavelength": 0.4425, + "full_width_half_max": 0.01 + }, + { + "name": "SYN_550", + "description": "SLSTR nadir and oblique channel S1", + "center_wavelength": 0.55, + "full_width_half_max": 0.02 + }, + { + "name": "SYN_670", + "description": "SLSTR nadir and oblique channel S2", + "center_wavelength": 0.659, + "full_width_half_max": 0.02 + }, + { + "name": "SYN_865", + "description": "OLCI channel Oa17, SLSTR nadir and oblique channel S2", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + } + ] + }, + "extent": { + "spatial": { + "bbox": [ + [ + -180, + -90, + 180, + 90 + ] + ] + }, + "temporal": { + "interval": [ + [ + "2020-04-16T19:36:28.012367Z", + null + ] + ] + } + }, + "item_assets": { + "safe-manifest": { + "type": "application/xml", + "description": "SAFE product manifest", + "roles": [ + "metadata" + ] + }, + "ntc-aod": { + "type": "application/x-netcdf", + "description": "Global aerosol parameters", + "eo:bands": [ + { + "name": "SYN_440", + "description": "OLCI channel Oa03", + "center_wavelength": 0.4425, + "full_width_half_max": 0.01 + }, + { + "name": "SYN_550", + "description": "SLSTR nadir and oblique channel S1", + "center_wavelength": 0.55, + "full_width_half_max": 0.02 + }, + { + "name": "SYN_670", + "description": "SLSTR nadir and oblique channel S2", + "center_wavelength": 0.659, + "full_width_half_max": 0.02 + }, + { + "name": "SYN_865", + "description": "OLCI channel Oa17, SLSTR nadir and oblique channel S2", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + }, + { + "name": "SYN_1600", + "description": "SLSTR nadir and oblique channel S5", + "center_wavelength": 1.61, + "full_width_half_max": 0.06 + }, + { + "name": "SYN_2250", + "description": "SLSTR nadir and oblique channel S6", + "center_wavelength": 2.25, + "full_width_half_max": 0.05 + } + ], + "roles": [ + "data" + ] + } + } +} \ No newline at end of file diff --git a/datasets/sentinel-3/collection/sentinel-3-synergy-syn-l2-netcdf/description.md b/datasets/sentinel-3/collection/sentinel-3-synergy-syn-l2-netcdf/description.md new file mode 100644 index 00000000..c239f25b --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-synergy-syn-l2-netcdf/description.md @@ -0,0 +1,13 @@ +This Collection provides the Sentinel-3 [Synergy Level-2 Land Surface Reflectance and Aerosol](https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-synergy/product-types/level-2-syn) product, which contains data on Surface Directional Reflectance, Aerosol Optical Thickness, and an Angstrom coefficient estimate over land. + +## Data Files + +Individual NetCDF files for the following variables: + +- Surface Directional Reflectance (SDR) with their associated error estimates for the sun-reflective [SLSTR](https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-slstr) channels (S1 to S6 for both nadir and oblique views, except S4) and for all [OLCI](https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-olci) channels, except for the oxygen absorption bands Oa13, Oa14, Oa15, and the water vapor bands Oa19 and Oa20. +- Aerosol optical thickness at 550nm with error estimates. +- Angstrom coefficient at 550nm. + +More information about the product and data processing can be found in the [User Guide](https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-synergy/product-types/level-2-syn) and [Technical Guide](https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-3-synergy/level-2/syn-level-2-product). + +This Collection contains Level-2 data in NetCDF files from September 2018 to present. diff --git a/datasets/sentinel-3/collection/sentinel-3-synergy-syn-l2-netcdf/template.json b/datasets/sentinel-3/collection/sentinel-3-synergy-syn-l2-netcdf/template.json new file mode 100644 index 00000000..03e7e895 --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-synergy-syn-l2-netcdf/template.json @@ -0,0 +1,1314 @@ +{ + "stac_version": "1.0.0", + "type": "Collection", + "id": "sentinel-3-synergy-syn-l2-netcdf", + "title": "Sentinel-3 Land Surface Reflectance and Aerosol", + "description": "{{ collection.description }}", + "license": "proprietary", + "links": [ + { + "rel": "license", + "href": "https://sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "type": "application/pdf", + "title": "Sentinel Data License" + }, + { + "rel": "about", + "href": "https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-synergy/product-types/level-2-syn", + "type": "text/html", + "title": "Sentinel-3 Land Surface Reflectance and Aerosol Product User Guide" + } + ], + "stac_extensions": [ + "https://stac-extensions.github.io/sat/v1.0.0/schema.json", + "https://stac-extensions.github.io/table/v1.2.0/schema.json", + "https://stac-extensions.github.io/item-assets/v1.0.0/schema.json", + "https://stac-extensions.github.io/eo/v1.1.0/schema.json" + ], + "keywords": [ + "Sentinel", + "Copernicus", + "ESA", + "Satellite", + "Land", + "Reflectance", + "Aerosol" + ], + "msft:group_id": "sentinel-3", + "msft:short_description": "Sentinel-3 surface reflectance and aerosol over land (SYNERGY SYN).", + "msft:storage_account": "sentinel3euwest", + "msft:container": "sentinel-3", + "msft:region": "westeurope", + "providers": [ + { + "name": "ESA", + "roles": [ + "producer", + "processor", + "licensor" + ], + "url": "https://earth.esa.int/web/guest/home" + }, + { + "name": "Microsoft", + "roles": [ + "host" + ], + "url": "https://planetarycomputer.microsoft.com" + } + ], + "assets": { + "thumbnail": { + "title": "Sentinel-3 Land Surface Reflectance and Aerosol Thumbnail", + "href": "https://ai4edatasetspublicassets.blob.core.windows.net/assets/pc_thumbnails/sentinel-3-synergy-syn-l2-netcdf-thumb.png", + "media_type": "image/png" + }, + "geoparquet-items": { + "href": "abfs://items/sentinel-3-synergy-syn-l2-netcdf.parquet", + "title": "GeoParquet STAC Items", + "description": "Snapshot of the collection's STAC items exported to GeoParquet format.", + "type": "application/x-parquet", + "roles": [ + "stac-items" + ], + "table:storage_options": { + "account_name": "pcstacitems" + }, + "msft:partition_info": { + "is_partitioned": true, + "partition_frequency": "W" + } + } + }, + "summaries": { + "constellation": [ + "Sentinel-3" + ], + "platform": [ + "Sentinel-3A", + "Sentinel-3B" + ], + "instruments": [ + "OLCI", + "SLSTR" + ], + "sat:platform_international_designator": [ + "2016-011A", + "2018-039A" + ], + "sat:orbit_state": [ + "ascending", + "descending" + ], + "s3:product_type": [ + "SY_2_SYN___" + ], + "s3:product_name": [ + "synergy-syn" + ], + "s3:processing_timeliness": [ + "NT" + ], + "eo:bands": [ + { + "name": "Oa01", + "description": "Band 1 - Aerosol correction, improved water constituent retrieval", + "center_wavelength": 0.4, + "full_width_half_max": 0.015 + }, + { + "name": "Oa02", + "description": "Band 2 - Yellow substance and detrital pigments (turbidity)", + "center_wavelength": 0.4125, + "full_width_half_max": 0.01 + }, + { + "name": "Oa03", + "description": "Band 3 - Chlorophyll absorption maximum, biogeochemistry, vegetation", + "center_wavelength": 0.4425, + "full_width_half_max": 0.01 + }, + { + "name": "Oa04", + "description": "Band 4 - Chlorophyll", + "center_wavelength": 0.49, + "full_width_half_max": 0.01 + }, + { + "name": "Oa05", + "description": "Band 5 - Chlorophyll, sediment, turbidity, red tide", + "center_wavelength": 0.51, + "full_width_half_max": 0.01 + }, + { + "name": "Oa06", + "description": "Band 6 - Chlorophyll reference (minimum)", + "center_wavelength": 0.56, + "full_width_half_max": 0.01 + }, + { + "name": "Oa07", + "description": "Band 7 - Sediment loading", + "center_wavelength": 0.62, + "full_width_half_max": 0.01 + }, + { + "name": "Oa08", + "description": "Band 8 - 2nd Chlorophyll absorption maximum, sediment, yellow substance / vegetation", + "center_wavelength": 0.665, + "full_width_half_max": 0.01 + }, + { + "name": "Oa09", + "description": "Band 9 - Improved fluorescence retrieval", + "center_wavelength": 0.67375, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa10", + "description": "Band 10 - Chlorophyll fluorescence peak, red edge", + "center_wavelength": 0.68125, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa11", + "description": "Band 11 - Chlorophyll fluorescence baseline, red edge transition", + "center_wavelength": 0.70875, + "full_width_half_max": 0.01 + }, + { + "name": "Oa12", + "description": "Band 12 - O2 absorption / clouds, vegetation", + "center_wavelength": 0.75375, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa13", + "description": "Band 13 - O2 absorption / aerosol correction", + "center_wavelength": 0.76125, + "full_width_half_max": 0.0025 + }, + { + "name": "Oa16", + "description": "Band 16 - Atmospheric / aerosol correction", + "center_wavelength": 0.77875, + "full_width_half_max": 0.015 + }, + { + "name": "Oa17", + "description": "Band 17 - Atmospheric / aerosol correction, clouds, pixel co-registration", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + }, + { + "name": "Oa18", + "description": "Band 18 - Water vapour absorption reference. Common reference band with SLSTR. Vegetation monitoring", + "center_wavelength": 0.885, + "full_width_half_max": 0.01 + }, + { + "name": "Oa19", + "description": "Band 19 - Water vapour absorption, vegetation monitoring (maximum REFLECTANCE)", + "center_wavelength": 0.9, + "full_width_half_max": 0.01 + }, + { + "name": "Oa21", + "description": "Band 21 - Water vapour absorption, atmospheric / aerosol correction", + "center_wavelength": 1.02, + "full_width_half_max": 0.04 + }, + { + "name": "S1", + "description": "Band 1 - Cloud screening, vegetation monitoring, aerosol", + "center_wavelength": 0.55427, + "full_width_half_max": 0.01926 + }, + { + "name": "S2", + "description": "Band 2 - NDVI, vegetation monitoring, aerosol", + "center_wavelength": 0.65947, + "full_width_half_max": 0.01925 + }, + { + "name": "S3", + "description": "Band 3 - NDVI, cloud flagging, pixel co-registration", + "center_wavelength": 0.868, + "full_width_half_max": 0.0206 + }, + { + "name": "S4", + "description": "Band 4 - Cirrus detection over land", + "center_wavelength": 1.3748, + "full_width_half_max": 0.0208 + }, + { + "name": "S5", + "description": "Band 5 - Cloud clearing, ice, snow, vegetation monitoring", + "center_wavelength": 1.6134, + "full_width_half_max": 0.06068 + }, + { + "name": "S6", + "description": "Band 6 - Vegetation state and cloud clearing", + "center_wavelength": 2.2557, + "full_width_half_max": 0.05015 + }, + { + "name": "SYN01", + "description": "OLCI channel Oa01", + "center_wavelength": 0.4, + "full_width_half_max": 0.015 + }, + { + "name": "SYN02", + "description": "OLCI channel Oa02", + "center_wavelength": 0.4125, + "full_width_half_max": 0.01 + }, + { + "name": "SYN03", + "description": "OLCI channel Oa03", + "center_wavelength": 0.4425, + "full_width_half_max": 0.01 + }, + { + "name": "SYN04", + "description": "OLCI channel Oa04", + "center_wavelength": 0.49, + "full_width_half_max": 0.01 + }, + { + "name": "SYN05", + "description": "OLCI channel Oa05", + "center_wavelength": 0.51, + "full_width_half_max": 0.01 + }, + { + "name": "SYN06", + "description": "OLCI channel Oa06", + "center_wavelength": 0.56, + "full_width_half_max": 0.01 + }, + { + "name": "SYN07", + "description": "OLCI channel Oa07", + "center_wavelength": 0.62, + "full_width_half_max": 0.01 + }, + { + "name": "SYN08", + "description": "OLCI channel Oa08", + "center_wavelength": 0.665, + "full_width_half_max": 0.01 + }, + { + "name": "SYN09", + "description": "OLCI channel Oa09", + "center_wavelength": 0.67375, + "full_width_half_max": 0.0075 + }, + { + "name": "SYN10", + "description": "OLCI channel Oa10", + "center_wavelength": 0.68125, + "full_width_half_max": 0.0075 + }, + { + "name": "SYN11", + "description": "OLCI channel Oa11", + "center_wavelength": 0.70875, + "full_width_half_max": 0.01 + }, + { + "name": "SYN12", + "description": "OLCI channel Oa12", + "center_wavelength": 0.75375, + "full_width_half_max": 0.0075 + }, + { + "name": "SYN13", + "description": "OLCI channel Oa16", + "center_wavelength": 0.7785, + "full_width_half_max": 0.015 + }, + { + "name": "SYN14", + "description": "OLCI channel Oa17", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + }, + { + "name": "SYN15", + "description": "OLCI channel Oa18", + "center_wavelength": 0.885, + "full_width_half_max": 0.01 + }, + { + "name": "SYN16", + "description": "OLCI channel Oa21", + "center_wavelength": 1.02, + "full_width_half_max": 0.04 + }, + { + "name": "SYN17", + "description": "SLSTR nadir channel S1", + "center_wavelength": 0.555, + "full_width_half_max": 0.02 + }, + { + "name": "SYN18", + "description": "SLSTR nadir channel S2", + "center_wavelength": 0.659, + "full_width_half_max": 0.02 + }, + { + "name": "SYN19", + "description": "SLSTR nadir channel S3", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + }, + { + "name": "SYN20", + "description": "SLSTR nadir channel S5", + "center_wavelength": 1.61, + "full_width_half_max": 0.06 + }, + { + "name": "SYN21", + "description": "SLSTR nadir channel S6", + "center_wavelength": 2.25, + "full_width_half_max": 0.05 + }, + { + "name": "SYN22", + "description": "SLSTR oblique channel S1", + "center_wavelength": 0.555, + "full_width_half_max": 0.02 + }, + { + "name": "SYN23", + "description": "SLSTR oblique channel S2", + "center_wavelength": 0.659, + "full_width_half_max": 0.02 + }, + { + "name": "SYN24", + "description": "SLSTR oblique channel S3", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + }, + { + "name": "SYN25", + "description": "SLSTR oblique channel S5", + "center_wavelength": 1.61, + "full_width_half_max": 0.06 + }, + { + "name": "SYN26", + "description": "SLSTR oblique channel S6", + "center_wavelength": 2.25, + "full_width_half_max": 0.05 + } + ] + }, + "extent": { + "spatial": { + "bbox": [ + [ + -180, + -90, + 180, + 90 + ] + ] + }, + "temporal": { + "interval": [ + [ + "2018-09-22T16:51:00.001276Z", + null + ] + ] + } + }, + "item_assets": { + "safe-manifest": { + "type": "application/xml", + "description": "SAFE product manifest", + "roles": [ + "metadata" + ] + }, + "syn-oa01-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with OLCI channel 01", + "eo:bands": [ + { + "name": "SYN01", + "description": "OLCI channel Oa01", + "center_wavelength": 0.4, + "full_width_half_max": 0.015 + } + ], + "roles": [ + "data" + ] + }, + "syn-oa02-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with OLCI channel 02", + "eo:bands": [ + { + "name": "SYN02", + "description": "OLCI channel Oa02", + "center_wavelength": 0.4125, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "syn-oa03-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with OLCI channel 03", + "eo:bands": [ + { + "name": "SYN03", + "description": "OLCI channel Oa03", + "center_wavelength": 0.4425, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "syn-oa04-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with OLCI channel 04", + "eo:bands": [ + { + "name": "SYN04", + "description": "OLCI channel Oa04", + "center_wavelength": 0.49, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "syn-oa05-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with OLCI channel 05", + "eo:bands": [ + { + "name": "SYN05", + "description": "OLCI channel Oa05", + "center_wavelength": 0.51, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "syn-oa06-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with OLCI channel 06", + "eo:bands": [ + { + "name": "SYN06", + "description": "OLCI channel Oa06", + "center_wavelength": 0.56, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "syn-oa07-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with OLCI channel 07", + "eo:bands": [ + { + "name": "SYN07", + "description": "OLCI channel Oa07", + "center_wavelength": 0.62, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "syn-oa08-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with OLCI channel 08", + "eo:bands": [ + { + "name": "SYN08", + "description": "OLCI channel Oa08", + "center_wavelength": 0.665, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "syn-oa09-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with OLCI channel 09", + "eo:bands": [ + { + "name": "SYN09", + "description": "OLCI channel Oa09", + "center_wavelength": 0.67375, + "full_width_half_max": 0.0075 + } + ], + "roles": [ + "data" + ] + }, + "syn-oa10-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with OLCI channel 10", + "eo:bands": [ + { + "name": "SYN10", + "description": "OLCI channel Oa10", + "center_wavelength": 0.68125, + "full_width_half_max": 0.0075 + } + ], + "roles": [ + "data" + ] + }, + "syn-oa11-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with OLCI channel 11", + "eo:bands": [ + { + "name": "SYN11", + "description": "OLCI channel Oa11", + "center_wavelength": 0.70875, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "syn-oa12-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with OLCI channel 12", + "eo:bands": [ + { + "name": "SYN12", + "description": "OLCI channel Oa12", + "center_wavelength": 0.75375, + "full_width_half_max": 0.0075 + } + ], + "roles": [ + "data" + ] + }, + "syn-oa16-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with OLCI channel 16", + "eo:bands": [ + { + "name": "SYN13", + "description": "OLCI channel Oa16", + "center_wavelength": 0.7785, + "full_width_half_max": 0.015 + } + ], + "roles": [ + "data" + ] + }, + "syn-oa17-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with OLCI channel 17", + "eo:bands": [ + { + "name": "SYN14", + "description": "OLCI channel Oa17", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + } + ], + "roles": [ + "data" + ] + }, + "syn-oa18-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with OLCI channel 18", + "eo:bands": [ + { + "name": "SYN15", + "description": "OLCI channel Oa18", + "center_wavelength": 0.885, + "full_width_half_max": 0.01 + } + ], + "roles": [ + "data" + ] + }, + "syn-oa21-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with OLCI channel 21", + "eo:bands": [ + { + "name": "SYN16", + "description": "OLCI channel Oa21", + "center_wavelength": 1.02, + "full_width_half_max": 0.04 + } + ], + "roles": [ + "data" + ] + }, + "syn-s1n-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with SLSTR channel 01 acquired in nadir view", + "eo:bands": [ + { + "name": "SYN17", + "description": "SLSTR nadir channel S1", + "center_wavelength": 0.555, + "full_width_half_max": 0.02 + } + ], + "roles": [ + "data" + ] + }, + "syn-s2n-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with SLSTR channel 02 acquired in nadir view", + "eo:bands": [ + { + "name": "SYN18", + "description": "SLSTR nadir channel S2", + "center_wavelength": 0.659, + "full_width_half_max": 0.02 + } + ], + "roles": [ + "data" + ] + }, + "syn-s3n-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with SLSTR channel 03 acquired in nadir view", + "eo:bands": [ + { + "name": "SYN19", + "description": "SLSTR nadir channel S3", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + } + ], + "roles": [ + "data" + ] + }, + "syn-s5n-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with SLSTR channel 05 acquired in nadir view", + "eo:bands": [ + { + "name": "SYN20", + "description": "SLSTR nadir channel S5", + "center_wavelength": 1.61, + "full_width_half_max": 0.06 + } + ], + "roles": [ + "data" + ] + }, + "syn-s6n-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with SLSTR channel 06 acquired in nadir view", + "eo:bands": [ + { + "name": "SYN21", + "description": "SLSTR nadir channel S6", + "center_wavelength": 2.25, + "full_width_half_max": 0.05 + } + ], + "roles": [ + "data" + ] + }, + "syn-s1o-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with SLSTR channel 01 acquired in oblique view", + "eo:bands": [ + { + "name": "SYN22", + "description": "SLSTR oblique channel S1", + "center_wavelength": 0.555, + "full_width_half_max": 0.02 + } + ], + "roles": [ + "data" + ] + }, + "syn-s2o-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with SLSTR channel 02 acquired in oblique view", + "eo:bands": [ + { + "name": "SYN23", + "description": "SLSTR oblique channel S2", + "center_wavelength": 0.659, + "full_width_half_max": 0.02 + } + ], + "roles": [ + "data" + ] + }, + "syn-s3o-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with SLSTR channel 03 acquired in oblique view", + "eo:bands": [ + { + "name": "SYN24", + "description": "SLSTR oblique channel S3", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + } + ], + "roles": [ + "data" + ] + }, + "syn-s5o-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with SLSTR channel 05 acquired in oblique view", + "eo:bands": [ + { + "name": "SYN25", + "description": "SLSTR oblique channel S5", + "center_wavelength": 1.61, + "full_width_half_max": 0.06 + } + ], + "roles": [ + "data" + ] + }, + "syn-s6o-reflectance": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance associated with SLSTR channel 06 acquired in oblique view", + "eo:bands": [ + { + "name": "SYN26", + "description": "SLSTR oblique channel S6", + "center_wavelength": 2.25, + "full_width_half_max": 0.05 + } + ], + "roles": [ + "data" + ] + }, + "syn-ato550": { + "type": "application/x-netcdf", + "description": "Aerosol Optical Thickness Data Set", + "eo:bands": [ + { + "name": "S1", + "description": "Band 1 - Cloud screening, vegetation monitoring, aerosol", + "center_wavelength": 0.55427, + "full_width_half_max": 0.01926 + }, + { + "name": "S2", + "description": "Band 2 - NDVI, vegetation monitoring, aerosol", + "center_wavelength": 0.65947, + "full_width_half_max": 0.01925 + }, + { + "name": "S3", + "description": "Band 3 - NDVI, cloud flagging, pixel co-registration", + "center_wavelength": 0.868, + "full_width_half_max": 0.0206 + }, + { + "name": "S5", + "description": "Band 5 - Cloud clearing, ice, snow, vegetation monitoring", + "center_wavelength": 1.6134, + "full_width_half_max": 0.06068 + }, + { + "name": "S6", + "description": "Band 6 - Vegetation state and cloud clearing", + "center_wavelength": 2.2557, + "full_width_half_max": 0.05015 + }, + { + "name": "Oa01", + "description": "Band 1 - Aerosol correction, improved water constituent retrieval", + "center_wavelength": 0.4, + "full_width_half_max": 0.015 + }, + { + "name": "Oa02", + "description": "Band 2 - Yellow substance and detrital pigments (turbidity)", + "center_wavelength": 0.4125, + "full_width_half_max": 0.01 + }, + { + "name": "Oa03", + "description": "Band 3 - Chlorophyll absorption maximum, biogeochemistry, vegetation", + "center_wavelength": 0.4425, + "full_width_half_max": 0.01 + }, + { + "name": "Oa04", + "description": "Band 4 - Chlorophyll", + "center_wavelength": 0.49, + "full_width_half_max": 0.01 + }, + { + "name": "Oa05", + "description": "Band 5 - Chlorophyll, sediment, turbidity, red tide", + "center_wavelength": 0.51, + "full_width_half_max": 0.01 + }, + { + "name": "Oa06", + "description": "Band 6 - Chlorophyll reference (minimum)", + "center_wavelength": 0.56, + "full_width_half_max": 0.01 + }, + { + "name": "Oa07", + "description": "Band 7 - Sediment loading", + "center_wavelength": 0.62, + "full_width_half_max": 0.01 + }, + { + "name": "Oa08", + "description": "Band 8 - 2nd Chlorophyll absorption maximum, sediment, yellow substance / vegetation", + "center_wavelength": 0.665, + "full_width_half_max": 0.01 + }, + { + "name": "Oa09", + "description": "Band 9 - Improved fluorescence retrieval", + "center_wavelength": 0.67375, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa10", + "description": "Band 10 - Chlorophyll fluorescence peak, red edge", + "center_wavelength": 0.68125, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa11", + "description": "Band 11 - Chlorophyll fluorescence baseline, red edge transition", + "center_wavelength": 0.70875, + "full_width_half_max": 0.01 + }, + { + "name": "Oa12", + "description": "Band 12 - O2 absorption / clouds, vegetation", + "center_wavelength": 0.75375, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa16", + "description": "Band 16 - Atmospheric / aerosol correction", + "center_wavelength": 0.77875, + "full_width_half_max": 0.015 + }, + { + "name": "Oa17", + "description": "Band 17 - Atmospheric / aerosol correction, clouds, pixel co-registration", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + }, + { + "name": "Oa18", + "description": "Band 18 - Water vapour absorption reference. Common reference band with SLSTR. Vegetation monitoring", + "center_wavelength": 0.885, + "full_width_half_max": 0.01 + }, + { + "name": "Oa21", + "description": "Band 21 - Water vapour absorption, atmospheric / aerosol correction", + "center_wavelength": 1.02, + "full_width_half_max": 0.04 + } + ], + "roles": [ + "data" + ] + }, + "syn-angstrom-exp550": { + "type": "application/x-netcdf", + "description": "Aerosol Angstrom Exponent Data Set", + "eo:bands": [ + { + "name": "S1", + "description": "Band 1 - Cloud screening, vegetation monitoring, aerosol", + "center_wavelength": 0.55427, + "full_width_half_max": 0.01926 + }, + { + "name": "S2", + "description": "Band 2 - NDVI, vegetation monitoring, aerosol", + "center_wavelength": 0.65947, + "full_width_half_max": 0.01925 + }, + { + "name": "S3", + "description": "Band 3 - NDVI, cloud flagging, pixel co-registration", + "center_wavelength": 0.868, + "full_width_half_max": 0.0206 + }, + { + "name": "S5", + "description": "Band 5 - Cloud clearing, ice, snow, vegetation monitoring", + "center_wavelength": 1.6134, + "full_width_half_max": 0.06068 + }, + { + "name": "S6", + "description": "Band 6 - Vegetation state and cloud clearing", + "center_wavelength": 2.2557, + "full_width_half_max": 0.05015 + }, + { + "name": "Oa01", + "description": "Band 1 - Aerosol correction, improved water constituent retrieval", + "center_wavelength": 0.4, + "full_width_half_max": 0.015 + }, + { + "name": "Oa02", + "description": "Band 2 - Yellow substance and detrital pigments (turbidity)", + "center_wavelength": 0.4125, + "full_width_half_max": 0.01 + }, + { + "name": "Oa03", + "description": "Band 3 - Chlorophyll absorption maximum, biogeochemistry, vegetation", + "center_wavelength": 0.4425, + "full_width_half_max": 0.01 + }, + { + "name": "Oa04", + "description": "Band 4 - Chlorophyll", + "center_wavelength": 0.49, + "full_width_half_max": 0.01 + }, + { + "name": "Oa05", + "description": "Band 5 - Chlorophyll, sediment, turbidity, red tide", + "center_wavelength": 0.51, + "full_width_half_max": 0.01 + }, + { + "name": "Oa06", + "description": "Band 6 - Chlorophyll reference (minimum)", + "center_wavelength": 0.56, + "full_width_half_max": 0.01 + }, + { + "name": "Oa07", + "description": "Band 7 - Sediment loading", + "center_wavelength": 0.62, + "full_width_half_max": 0.01 + }, + { + "name": "Oa08", + "description": "Band 8 - 2nd Chlorophyll absorption maximum, sediment, yellow substance / vegetation", + "center_wavelength": 0.665, + "full_width_half_max": 0.01 + }, + { + "name": "Oa09", + "description": "Band 9 - Improved fluorescence retrieval", + "center_wavelength": 0.67375, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa10", + "description": "Band 10 - Chlorophyll fluorescence peak, red edge", + "center_wavelength": 0.68125, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa11", + "description": "Band 11 - Chlorophyll fluorescence baseline, red edge transition", + "center_wavelength": 0.70875, + "full_width_half_max": 0.01 + }, + { + "name": "Oa12", + "description": "Band 12 - O2 absorption / clouds, vegetation", + "center_wavelength": 0.75375, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa16", + "description": "Band 16 - Atmospheric / aerosol correction", + "center_wavelength": 0.77875, + "full_width_half_max": 0.015 + }, + { + "name": "Oa17", + "description": "Band 17 - Atmospheric / aerosol correction, clouds, pixel co-registration", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + }, + { + "name": "Oa18", + "description": "Band 18 - Water vapour absorption reference. Common reference band with SLSTR. Vegetation monitoring", + "center_wavelength": 0.885, + "full_width_half_max": 0.01 + }, + { + "name": "Oa21", + "description": "Band 21 - Water vapour absorption, atmospheric / aerosol correction", + "center_wavelength": 1.02, + "full_width_half_max": 0.04 + } + ], + "roles": [ + "data" + ] + }, + "syn-sdr-removed-pixels": { + "type": "application/x-netcdf", + "description": "Surface directional reflectance and aerosol parameters associated with removed pixel", + "eo:bands": [ + { + "name": "S1", + "description": "Band 1 - Cloud screening, vegetation monitoring, aerosol", + "center_wavelength": 0.55427, + "full_width_half_max": 0.01926 + }, + { + "name": "S2", + "description": "Band 2 - NDVI, vegetation monitoring, aerosol", + "center_wavelength": 0.65947, + "full_width_half_max": 0.01925 + }, + { + "name": "S3", + "description": "Band 3 - NDVI, cloud flagging, pixel co-registration", + "center_wavelength": 0.868, + "full_width_half_max": 0.0206 + }, + { + "name": "S4", + "description": "Band 4 - Cirrus detection over land", + "center_wavelength": 1.3748, + "full_width_half_max": 0.0208 + }, + { + "name": "S6", + "description": "Band 6 - Vegetation state and cloud clearing", + "center_wavelength": 2.2557, + "full_width_half_max": 0.05015 + }, + { + "name": "Oa01", + "description": "Band 1 - Aerosol correction, improved water constituent retrieval", + "center_wavelength": 0.4, + "full_width_half_max": 0.015 + }, + { + "name": "Oa02", + "description": "Band 2 - Yellow substance and detrital pigments (turbidity)", + "center_wavelength": 0.4125, + "full_width_half_max": 0.01 + }, + { + "name": "Oa03", + "description": "Band 3 - Chlorophyll absorption maximum, biogeochemistry, vegetation", + "center_wavelength": 0.4425, + "full_width_half_max": 0.01 + }, + { + "name": "Oa04", + "description": "Band 4 - Chlorophyll", + "center_wavelength": 0.49, + "full_width_half_max": 0.01 + }, + { + "name": "Oa05", + "description": "Band 5 - Chlorophyll, sediment, turbidity, red tide", + "center_wavelength": 0.51, + "full_width_half_max": 0.01 + }, + { + "name": "Oa06", + "description": "Band 6 - Chlorophyll reference (minimum)", + "center_wavelength": 0.56, + "full_width_half_max": 0.01 + }, + { + "name": "Oa07", + "description": "Band 7 - Sediment loading", + "center_wavelength": 0.62, + "full_width_half_max": 0.01 + }, + { + "name": "Oa08", + "description": "Band 8 - 2nd Chlorophyll absorption maximum, sediment, yellow substance / vegetation", + "center_wavelength": 0.665, + "full_width_half_max": 0.01 + }, + { + "name": "Oa09", + "description": "Band 9 - Improved fluorescence retrieval", + "center_wavelength": 0.67375, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa10", + "description": "Band 10 - Chlorophyll fluorescence peak, red edge", + "center_wavelength": 0.68125, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa11", + "description": "Band 11 - Chlorophyll fluorescence baseline, red edge transition", + "center_wavelength": 0.70875, + "full_width_half_max": 0.01 + }, + { + "name": "Oa12", + "description": "Band 12 - O2 absorption / clouds, vegetation", + "center_wavelength": 0.75375, + "full_width_half_max": 0.0075 + }, + { + "name": "Oa13", + "description": "Band 13 - O2 absorption / aerosol correction", + "center_wavelength": 0.76125, + "full_width_half_max": 0.0025 + }, + { + "name": "Oa16", + "description": "Band 16 - Atmospheric / aerosol correction", + "center_wavelength": 0.77875, + "full_width_half_max": 0.015 + }, + { + "name": "Oa17", + "description": "Band 17 - Atmospheric / aerosol correction, clouds, pixel co-registration", + "center_wavelength": 0.865, + "full_width_half_max": 0.02 + }, + { + "name": "Oa18", + "description": "Band 18 - Water vapour absorption reference. Common reference band with SLSTR. Vegetation monitoring", + "center_wavelength": 0.885, + "full_width_half_max": 0.01 + }, + { + "name": "Oa19", + "description": "Band 19 - Water vapour absorption, vegetation monitoring (maximum REFLECTANCE)", + "center_wavelength": 0.9, + "full_width_half_max": 0.01 + }, + { + "name": "Oa21", + "description": "Band 21 - Water vapour absorption, atmospheric / aerosol correction", + "center_wavelength": 1.02, + "full_width_half_max": 0.04 + } + ], + "roles": [ + "data" + ] + }, + "syn-amin": { + "type": "application/x-netcdf", + "description": "L2 Aerosol model index number data", + "roles": [ + "data" + ] + }, + "syn-flags": { + "type": "application/x-netcdf", + "description": "Classification and quality Flags associated with OLCI, SLSTR and SYNERGY products", + "roles": [ + "data" + ] + }, + "geolocation": { + "type": "application/x-netcdf", + "description": "High resolution georeferencing data", + "roles": [ + "data" + ] + }, + "time": { + "type": "application/x-netcdf", + "description": "Time stamps annotation", + "roles": [ + "data" + ] + }, + "annotations-removed-pixels": { + "type": "application/x-netcdf", + "description": "Annotations parameters associated with removed pixel", + "roles": [ + "data" + ] + }, + "tiepoints-olci": { + "type": "application/x-netcdf", + "description": "Low resolution georeferencing data and Sun and View angles associated with OLCI products", + "roles": [ + "data" + ] + }, + "tiepoints-slstr-n": { + "type": "application/x-netcdf", + "description": "Low resolution georeferencing data and Sun and View angles associated with SLSTR nadir view products", + "roles": [ + "data" + ] + }, + "tiepoints-slstr-o": { + "type": "application/x-netcdf", + "description": "Low resolution georeferencing data and Sun and View angles associated with SLSTR oblique view products", + "roles": [ + "data" + ] + }, + "tiepoints-meteo": { + "type": "application/x-netcdf", + "description": "ECMWF meteorology data", + "roles": [ + "data" + ] + } + } +} \ No newline at end of file diff --git a/datasets/sentinel-3/collection/sentinel-3-synergy-v10-l2-netcdf/description.md b/datasets/sentinel-3/collection/sentinel-3-synergy-v10-l2-netcdf/description.md new file mode 100644 index 00000000..c79a9bc6 --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-synergy-v10-l2-netcdf/description.md @@ -0,0 +1,29 @@ +This Collection provides the Sentinel-3 [Synergy Level-2 10-Day Surface Reflectance and NDVI](https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-synergy/product-types/level-2-vg1-v10) products, which are SPOT VEGETATION Continuity Products similar to those obtained from the [VEGETATION instrument](https://docs.terrascope.be/#/Satellites/SPOT-VGT/MissionInstruments) onboard the SPOT-4 and SPOT-5 satellites. The primary variables are a maximum Normalized Difference Vegetation Index (NDVI) composite, which is derived from ground reflectance during a 10-day window, and four surface reflectance bands: + +- B0 (Blue, 450nm) +- B2 (Red, 645nm) +- B3 (NIR, 835nm) +- MIR (SWIR, 1665nm) + +The four reflectance bands have center wavelengths matching those on the original SPOT VEGETATION instrument. The NDVI variable, which is an indicator of the amount of vegetation, is derived from the B3 and B2 bands. + +## Data files + +The four reflectance bands and NDVI values are each contained in dedicated NetCDF files. Additional metadata are delivered in annotation NetCDF files, each containing a single variable, including the geometric viewing and illumination conditions, the total water vapour and ozone columns, and the aerosol optical depth. + +Each 10-day product is delivered as a set of 10 rectangular scenes: + +- AFRICA +- NORTH_AMERICA +- SOUTH_AMERICA +- CENTRAL_AMERICA +- NORTH_ASIA +- WEST_ASIA +- SOUTH_EAST_ASIA +- ASIAN_ISLANDS +- AUSTRALASIA +- EUROPE + +More information about the product and data processing can be found in the [User Guide](https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-synergy/product-types/level-2-vg1-v10) and [Technical Guide](https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-3-synergy/vgt-s/v10-product). + +This Collection contains Level-2 data in NetCDF files from September 2018 to present. diff --git a/datasets/sentinel-3/collection/sentinel-3-synergy-v10-l2-netcdf/template.json b/datasets/sentinel-3/collection/sentinel-3-synergy-v10-l2-netcdf/template.json new file mode 100644 index 00000000..f0e4d55e --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-synergy-v10-l2-netcdf/template.json @@ -0,0 +1,310 @@ +{ + "stac_version": "1.0.0", + "type": "Collection", + "id": "sentinel-3-synergy-v10-l2-netcdf", + "title": "Sentinel-3 10-Day Surface Reflectance and NDVI (SPOT VEGETATION)", + "description": "{{ collection.description }}", + "license": "proprietary", + "links": [ + { + "rel": "license", + "href": "https://sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "type": "application/pdf", + "title": "Sentinel Data License" + }, + { + "rel": "about", + "href": "https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-synergy/product-types/level-2-vg1-v10", + "type": "text/html", + "title": "Sentinel-3 10-Day Surface Reflectance and NDVI Product (SPOT VEGETATION) User Guide" + } + ], + "stac_extensions": [ + "https://stac-extensions.github.io/sat/v1.0.0/schema.json", + "https://stac-extensions.github.io/table/v1.2.0/schema.json", + "https://stac-extensions.github.io/item-assets/v1.0.0/schema.json", + "https://stac-extensions.github.io/eo/v1.1.0/schema.json" + ], + "keywords": [ + "Sentinel", + "Copernicus", + "ESA", + "Satellite", + "Reflectance", + "NDVI" + ], + "msft:group_id": "sentinel-3", + "msft:short_description": "Sentinel-3 10-day surface reflectance and NDVI (SYNERGY V10, a SPOT VEGETATION Continuity Product).", + "msft:storage_account": "sentinel3euwest", + "msft:container": "sentinel-3", + "msft:region": "westeurope", + "providers": [ + { + "name": "ESA", + "roles": [ + "producer", + "processor", + "licensor" + ], + "url": "https://earth.esa.int/web/guest/home" + }, + { + "name": "Microsoft", + "roles": [ + "host" + ], + "url": "https://planetarycomputer.microsoft.com" + } + ], + "assets": { + "thumbnail": { + "title": "Sentinel-3 10-Day Surface Reflectance and NDVI (SPOT VEGETATION) Thumbnail", + "href": "https://ai4edatasetspublicassets.blob.core.windows.net/assets/pc_thumbnails/sentinel-3-synergy-v10-l2-netcdf-thumb.png", + "media_type": "image/png" + }, + "geoparquet-items": { + "href": "abfs://items/sentinel-3-synergy-v10-l2-netcdf.parquet", + "title": "GeoParquet STAC Items", + "description": "Snapshot of the collection's STAC items exported to GeoParquet format.", + "type": "application/x-parquet", + "roles": [ + "stac-items" + ], + "table:storage_options": { + "account_name": "pcstacitems" + }, + "msft:partition_info": { + "is_partitioned": false + } + } + }, + "summaries": { + "constellation": [ + "Sentinel-3" + ], + "platform": [ + "Sentinel-3A", + "Sentinel-3B" + ], + "instruments": [ + "OLCI", + "SLSTR" + ], + "sat:platform_international_designator": [ + "2016-011A", + "2018-039A" + ], + "sat:orbit_state": [ + "ascending", + "descending" + ], + "s3:product_type": [ + "SY_2_V10___" + ], + "s3:product_name": [ + "synergy-v10" + ], + "s3:processing_timeliness": [ + "NT" + ], + "eo:bands": [ + { + "name": "B0", + "description": "OLCI channels Oa02, Oa03", + "center_wavelength": 0.45, + "full_width_half_max": 0.02 + }, + { + "name": "B2", + "description": "OLCI channels Oa06, Oa07, Oa08, Oa09, Oa10", + "center_wavelength": 0.645, + "full_width_half_max": 0.035 + }, + { + "name": "B3", + "description": "OLCI channels Oa16, Oa17, Oa18, Oa21", + "center_wavelength": 0.835, + "full_width_half_max": 0.055 + }, + { + "name": "MIR", + "description": "SLSTR nadir and oblique channels S5, S6", + "center_wavelength": 1.665, + "full_width_half_max": 0.085 + } + ] + }, + "extent": { + "spatial": { + "bbox": [ + [ + -180.0, + -56.0, + 180.0, + 75.0 + ] + ] + }, + "temporal": { + "interval": [ + [ + "2018-09-27T11:17:21Z", + null + ] + ] + } + }, + "item_assets": { + "safe-manifest": { + "type": "application/xml", + "description": "SAFE product manifest", + "roles": [ + "metadata" + ] + }, + "b0": { + "type": "application/x-netcdf", + "description": "Surface Reflectance Data Set associated with VGT-B0 channel", + "eo:bands": [ + { + "name": "B0", + "description": "OLCI channels Oa02, Oa03", + "center_wavelength": 0.45, + "full_width_half_max": 0.02 + } + ], + "roles": [ + "data" + ] + }, + "b2": { + "type": "application/x-netcdf", + "description": "Surface Reflectance Data Set associated with VGT-B2 channel", + "eo:bands": [ + { + "name": "B2", + "description": "OLCI channels Oa06, Oa07, Oa08, Oa09, Oa10", + "center_wavelength": 0.645, + "full_width_half_max": 0.035 + } + ], + "roles": [ + "data" + ] + }, + "b3": { + "type": "application/x-netcdf", + "description": "Surface Reflectance Data Set associated with VGT-B3 channel", + "eo:bands": [ + { + "name": "B3", + "description": "OLCI channels Oa16, Oa17, Oa18, Oa21", + "center_wavelength": 0.835, + "full_width_half_max": 0.055 + } + ], + "roles": [ + "data" + ] + }, + "mir": { + "type": "application/x-netcdf", + "description": "Surface Reflectance Data Set associated with VGT-MIR channel", + "eo:bands": [ + { + "name": "MIR", + "description": "SLSTR nadir and oblique channels S5, S6", + "center_wavelength": 1.665, + "full_width_half_max": 0.085 + } + ], + "roles": [ + "data" + ] + }, + "ndvi": { + "type": "application/x-netcdf", + "description": "Normalised difference vegetation index", + "eo:bands": [ + { + "name": "B2", + "description": "OLCI channels Oa06, Oa07, Oa08, Oa09, Oa10", + "center_wavelength": 0.645, + "full_width_half_max": 0.035 + }, + { + "name": "B3", + "description": "OLCI channels Oa16, Oa17, Oa18, Oa21", + "center_wavelength": 0.835, + "full_width_half_max": 0.055 + } + ], + "roles": [ + "data" + ] + }, + "vaa": { + "type": "application/x-netcdf", + "description": "View azimuth angle data", + "roles": [ + "data" + ] + }, + "vza": { + "type": "application/x-netcdf", + "description": "View zenith angle data", + "roles": [ + "data" + ] + }, + "saa": { + "type": "application/x-netcdf", + "description": "Solar azimuth angle data", + "roles": [ + "data" + ] + }, + "sza": { + "type": "application/x-netcdf", + "description": "Solar zenith angle data", + "roles": [ + "data" + ] + }, + "ag": { + "type": "application/x-netcdf", + "description": "Aerosol optical thickness data", + "roles": [ + "data" + ] + }, + "og": { + "type": "application/x-netcdf", + "description": "Total Ozone column data", + "roles": [ + "data" + ] + }, + "wvg": { + "type": "application/x-netcdf", + "description": "Total column Water vapour data", + "roles": [ + "data" + ] + }, + "tg": { + "type": "application/x-netcdf", + "description": "Synthesis time data", + "roles": [ + "data" + ] + }, + "sm": { + "type": "application/x-netcdf", + "description": "Status Map data", + "roles": [ + "data" + ] + } + } +} \ No newline at end of file diff --git a/datasets/sentinel-3/collection/sentinel-3-synergy-vg1-l2-netcdf/description.md b/datasets/sentinel-3/collection/sentinel-3-synergy-vg1-l2-netcdf/description.md new file mode 100644 index 00000000..93a622d3 --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-synergy-vg1-l2-netcdf/description.md @@ -0,0 +1,29 @@ +This Collection provides the Sentinel-3 [Synergy Level-2 1-Day Surface Reflectance and NDVI](https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-synergy/product-types/level-2-vg1-v10) products, which are SPOT VEGETATION Continuity Products similar to those obtained from the [VEGETATION instrument](https://docs.terrascope.be/#/Satellites/SPOT-VGT/MissionInstruments) onboard the SPOT-4 and SPOT-5 satellites. The primary variables are a maximum Normalized Difference Vegetation Index (NDVI) composite, which is derived from daily ground reflecrtance, and four surface reflectance bands: + +- B0 (Blue, 450nm) +- B2 (Red, 645nm) +- B3 (NIR, 835nm) +- MIR (SWIR, 1665nm) + +The four reflectance bands have center wavelengths matching those on the original SPOT VEGETATION instrument. The NDVI variable, which is an indicator of the amount of vegetation, is derived from the B3 and B2 bands. + +## Data files + +The four reflectance bands and NDVI values are each contained in dedicated NetCDF files. Additional metadata are delivered in annotation NetCDF files, each containing a single variable, including the geometric viewing and illumination conditions, the total water vapour and ozone columns, and the aerosol optical depth. + +Each 1-day product is delivered as a set of 10 rectangular scenes: + +- AFRICA +- NORTH_AMERICA +- SOUTH_AMERICA +- CENTRAL_AMERICA +- NORTH_ASIA +- WEST_ASIA +- SOUTH_EAST_ASIA +- ASIAN_ISLANDS +- AUSTRALASIA +- EUROPE + +More information about the product and data processing can be found in the [User Guide](https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-synergy/product-types/level-2-vg1-v10) and [Technical Guide](https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-3-synergy/vgt-s/vg1-product-surface-reflectance). + +This Collection contains Level-2 data in NetCDF files from October 2018 to present. diff --git a/datasets/sentinel-3/collection/sentinel-3-synergy-vg1-l2-netcdf/template.json b/datasets/sentinel-3/collection/sentinel-3-synergy-vg1-l2-netcdf/template.json new file mode 100644 index 00000000..01a6dd05 --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-synergy-vg1-l2-netcdf/template.json @@ -0,0 +1,311 @@ +{ + "stac_version": "1.0.0", + "type": "Collection", + "id": "sentinel-3-synergy-vg1-l2-netcdf", + "title": "Sentinel-3 1-Day Surface Reflectance and NDVI (SPOT VEGETATION)", + "description": "{{ collection.description }}", + "license": "proprietary", + "links": [ + { + "rel": "license", + "href": "https://sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "type": "application/pdf", + "title": "Sentinel Data License" + }, + { + "rel": "about", + "href": "https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-synergy/product-types/level-2-vg1-v10", + "type": "text/html", + "title": "Sentinel-3 1-Day Surface Reflectance and NDVI Product (SPOT VEGETATION) User Guide" + } + ], + "stac_extensions": [ + "https://stac-extensions.github.io/sat/v1.0.0/schema.json", + "https://stac-extensions.github.io/table/v1.2.0/schema.json", + "https://stac-extensions.github.io/item-assets/v1.0.0/schema.json", + "https://stac-extensions.github.io/eo/v1.1.0/schema.json" + ], + "keywords": [ + "Sentinel", + "Copernicus", + "ESA", + "Satellite", + "Reflectance", + "NDVI" + ], + "msft:group_id": "sentinel-3", + "msft:short_description": "Sentinel-3 1-day surface reflectance and NDVI (SYNERGY VG1, a SPOT VEGETATION Continuity Product).", + "msft:storage_account": "sentinel3euwest", + "msft:container": "sentinel-3", + "msft:region": "westeurope", + "providers": [ + { + "name": "ESA", + "roles": [ + "producer", + "processor", + "licensor" + ], + "url": "https://earth.esa.int/web/guest/home" + }, + { + "name": "Microsoft", + "roles": [ + "host" + ], + "url": "https://planetarycomputer.microsoft.com" + } + ], + "assets": { + "thumbnail": { + "title": "Sentinel-3 1-Day Surface Reflectance and NDVI (SPOT VEGETATION) Thumbnail", + "href": "https://ai4edatasetspublicassets.blob.core.windows.net/assets/pc_thumbnails/sentinel-3-synergy-vg1-l2-netcdf-thumb.png", + "media_type": "image/png" + }, + "geoparquet-items": { + "href": "abfs://items/sentinel-3-synergy-vg1-l2-netcdf.parquet", + "title": "GeoParquet STAC Items", + "description": "Snapshot of the collection's STAC items exported to GeoParquet format.", + "type": "application/x-parquet", + "roles": [ + "stac-items" + ], + "table:storage_options": { + "account_name": "pcstacitems" + }, + "msft:partition_info": { + "is_partitioned": true, + "partition_frequency": "AS" + } + } + }, + "summaries": { + "constellation": [ + "Sentinel-3" + ], + "platform": [ + "Sentinel-3A", + "Sentinel-3B" + ], + "instruments": [ + "OLCI", + "SLSTR" + ], + "sat:platform_international_designator": [ + "2016-011A", + "2018-039A" + ], + "sat:orbit_state": [ + "ascending", + "descending" + ], + "s3:product_type": [ + "SY_2_VG1___" + ], + "s3:product_name": [ + "synergy-vg1" + ], + "s3:processing_timeliness": [ + "NT" + ], + "eo:bands": [ + { + "name": "B0", + "description": "OLCI channels Oa02, Oa03", + "center_wavelength": 0.45, + "full_width_half_max": 0.02 + }, + { + "name": "B2", + "description": "OLCI channels Oa06, Oa07, Oa08, Oa09, Oa10", + "center_wavelength": 0.645, + "full_width_half_max": 0.035 + }, + { + "name": "B3", + "description": "OLCI channels Oa16, Oa17, Oa18, Oa21", + "center_wavelength": 0.835, + "full_width_half_max": 0.055 + }, + { + "name": "MIR", + "description": "SLSTR nadir and oblique channels S5, S6", + "center_wavelength": 1.665, + "full_width_half_max": 0.085 + } + ] + }, + "extent": { + "spatial": { + "bbox": [ + [ + -180.0, + -56.0, + 180.0, + 75.0 + ] + ] + }, + "temporal": { + "interval": [ + [ + "2018-10-04T23:17:21Z", + null + ] + ] + } + }, + "item_assets": { + "safe-manifest": { + "type": "application/xml", + "description": "SAFE product manifest", + "roles": [ + "metadata" + ] + }, + "b0": { + "type": "application/x-netcdf", + "description": "Surface Reflectance Data Set associated with VGT-B0 channel", + "eo:bands": [ + { + "name": "B0", + "description": "OLCI channels Oa02, Oa03", + "center_wavelength": 0.45, + "full_width_half_max": 0.02 + } + ], + "roles": [ + "data" + ] + }, + "b2": { + "type": "application/x-netcdf", + "description": "Surface Reflectance Data Set associated with VGT-B2 channel", + "eo:bands": [ + { + "name": "B2", + "description": "OLCI channels Oa06, Oa07, Oa08, Oa09, Oa10", + "center_wavelength": 0.645, + "full_width_half_max": 0.035 + } + ], + "roles": [ + "data" + ] + }, + "b3": { + "type": "application/x-netcdf", + "description": "Surface Reflectance Data Set associated with VGT-B3 channel", + "eo:bands": [ + { + "name": "B3", + "description": "OLCI channels Oa16, Oa17, Oa18, Oa21", + "center_wavelength": 0.835, + "full_width_half_max": 0.055 + } + ], + "roles": [ + "data" + ] + }, + "mir": { + "type": "application/x-netcdf", + "description": "Surface Reflectance Data Set associated with VGT-MIR channel", + "eo:bands": [ + { + "name": "MIR", + "description": "SLSTR nadir and oblique channels S5, S6", + "center_wavelength": 1.665, + "full_width_half_max": 0.085 + } + ], + "roles": [ + "data" + ] + }, + "ndvi": { + "type": "application/x-netcdf", + "description": "Normalised difference vegetation index", + "eo:bands": [ + { + "name": "B2", + "description": "OLCI channels Oa06, Oa07, Oa08, Oa09, Oa10", + "center_wavelength": 0.645, + "full_width_half_max": 0.035 + }, + { + "name": "B3", + "description": "OLCI channels Oa16, Oa17, Oa18, Oa21", + "center_wavelength": 0.835, + "full_width_half_max": 0.055 + } + ], + "roles": [ + "data" + ] + }, + "vaa": { + "type": "application/x-netcdf", + "description": "View azimuth angle data", + "roles": [ + "data" + ] + }, + "vza": { + "type": "application/x-netcdf", + "description": "View zenith angle data", + "roles": [ + "data" + ] + }, + "saa": { + "type": "application/x-netcdf", + "description": "Solar azimuth angle data", + "roles": [ + "data" + ] + }, + "sza": { + "type": "application/x-netcdf", + "description": "Solar zenith angle data", + "roles": [ + "data" + ] + }, + "ag": { + "type": "application/x-netcdf", + "description": "Aerosol optical thickness data", + "roles": [ + "data" + ] + }, + "og": { + "type": "application/x-netcdf", + "description": "Total Ozone column data", + "roles": [ + "data" + ] + }, + "wvg": { + "type": "application/x-netcdf", + "description": "Total column Water vapour data", + "roles": [ + "data" + ] + }, + "tg": { + "type": "application/x-netcdf", + "description": "Synthesis time data", + "roles": [ + "data" + ] + }, + "sm": { + "type": "application/x-netcdf", + "description": "Status Map data", + "roles": [ + "data" + ] + } + } +} \ No newline at end of file diff --git a/datasets/sentinel-3/collection/sentinel-3-synergy-vgp-l2-netcdf/description.md b/datasets/sentinel-3/collection/sentinel-3-synergy-vgp-l2-netcdf/description.md new file mode 100644 index 00000000..b656c42d --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-synergy-vgp-l2-netcdf/description.md @@ -0,0 +1,16 @@ +This Collection provides the Sentinel-3 [Synergy Level-2 Top of Atmosphere Reflectance](https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-synergy/product-types/level-2-vgp) product, which is a SPOT VEGETATION Continuity Product containing measurement data similar to that obtained by the [VEGETATION instrument](https://docs.terrascope.be/#/Satellites/SPOT-VGT/MissionInstruments) onboad the SPOT-3 and SPOT-4 satellites. The primary variables are four top of atmosphere reflectance bands: + +- B0 (Blue, 450nm) +- B2 (Red, 645nm) +- B3 (NIR, 835nm) +- MIR (SWIR, 1665nm) + +The four reflectance bands have center wavelengths matching those on the original SPOT VEGETATION instrument and have been adapted for scientific applications requiring highly accurate physical measurements through correction for systematic errors and re-sampling to predefined geographic projections. The pixel brightness count is the ground area's apparent reflectance as seen at the top of atmosphere. + +## Data files + +NetCDF files are provided for the four reflectance bands. Additional metadata are delivered in annotation NetCDF files, each containing a single variable, including the geometric viewing and illumination conditions, the total water vapour and ozone columns, and the aerosol optical depth. + +More information about the product and data processing can be found in the [User Guide](https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-synergy/product-types/level-2-vgp) and [Technical Guide](https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-3-synergy/level-2/vgt-p-product). + +This Collection contains Level-2 data in NetCDF files from October 2018 to present. diff --git a/datasets/sentinel-3/collection/sentinel-3-synergy-vgp-l2-netcdf/template.json b/datasets/sentinel-3/collection/sentinel-3-synergy-vgp-l2-netcdf/template.json new file mode 100644 index 00000000..38fd5eb8 --- /dev/null +++ b/datasets/sentinel-3/collection/sentinel-3-synergy-vgp-l2-netcdf/template.json @@ -0,0 +1,282 @@ +{ + "stac_version": "1.0.0", + "type": "Collection", + "id": "sentinel-3-synergy-vgp-l2-netcdf", + "title": "Sentinel-3 Top of Atmosphere Reflectance (SPOT VEGETATION)", + "description": "{{ collection.description }}", + "license": "proprietary", + "links": [ + { + "rel": "license", + "href": "https://sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice", + "type": "application/pdf", + "title": "Sentinel Data License" + }, + { + "rel": "about", + "href": "https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-3-synergy/product-types/level-2-vgp", + "type": "text/html", + "title": "Sentinel-3 Top of Atmosphere Reflectance Product (SPOT VEGETATION) User Guide" + } + ], + "stac_extensions": [ + "https://stac-extensions.github.io/sat/v1.0.0/schema.json", + "https://stac-extensions.github.io/table/v1.2.0/schema.json", + "https://stac-extensions.github.io/item-assets/v1.0.0/schema.json", + "https://stac-extensions.github.io/eo/v1.1.0/schema.json" + ], + "keywords": [ + "Sentinel", + "Copernicus", + "ESA", + "Satellite", + "Reflectance" + ], + "msft:group_id": "sentinel-3", + "msft:short_description": "Sentinel-3 top of atmosphere reflectance (SYNERGY VGP, a SPOT VEGETATION Continuity Product).", + "msft:storage_account": "sentinel3euwest", + "msft:container": "sentinel-3", + "msft:region": "westeurope", + "providers": [ + { + "name": "ESA", + "roles": [ + "producer", + "processor", + "licensor" + ], + "url": "https://earth.esa.int/web/guest/home" + }, + { + "name": "Microsoft", + "roles": [ + "host" + ], + "url": "https://planetarycomputer.microsoft.com" + } + ], + "assets": { + "thumbnail": { + "title": "Sentinel-3 Top of Atmosphere Reflectance (SPOT VEGETATION) Thumbnail", + "href": "https://ai4edatasetspublicassets.blob.core.windows.net/assets/pc_thumbnails/sentinel-3-synergy-vgp-l2-netcdf-thumb.png", + "media_type": "image/png" + }, + "geoparquet-items": { + "href": "abfs://items/sentinel-3-synergy-vgp-l2-netcdf.parquet", + "title": "GeoParquet STAC Items", + "description": "Snapshot of the collection's STAC items exported to GeoParquet format.", + "type": "application/x-parquet", + "roles": [ + "stac-items" + ], + "table:storage_options": { + "account_name": "pcstacitems" + }, + "msft:partition_info": { + "is_partitioned": true, + "partition_frequency": "QS" + } + } + }, + "summaries": { + "constellation": [ + "Sentinel-3" + ], + "platform": [ + "Sentinel-3A", + "Sentinel-3B" + ], + "instruments": [ + "OLCI", + "SLSTR" + ], + "sat:platform_international_designator": [ + "2016-011A", + "2018-039A" + ], + "sat:orbit_state": [ + "ascending", + "descending" + ], + "s3:product_type": [ + "SY_2_VGP___" + ], + "s3:product_name": [ + "synergy-vgp" + ], + "s3:processing_timeliness": [ + "NT" + ], + "eo:bands": [ + { + "name": "B0", + "description": "OLCI channels Oa02, Oa03", + "center_wavelength": 0.45, + "full_width_half_max": 0.02 + }, + { + "name": "B2", + "description": "OLCI channels Oa06, Oa07, Oa08, Oa09, Oa10", + "center_wavelength": 0.645, + "full_width_half_max": 0.035 + }, + { + "name": "B3", + "description": "OLCI channels Oa16, Oa17, Oa18, Oa21", + "center_wavelength": 0.835, + "full_width_half_max": 0.055 + }, + { + "name": "MIR", + "description": "SLSTR nadir and oblique channels S5, S6", + "center_wavelength": 1.665, + "full_width_half_max": 0.085 + } + ] + }, + "extent": { + "spatial": { + "bbox": [ + [ + -180, + -90, + 180, + 90 + ] + ] + }, + "temporal": { + "interval": [ + [ + "2018-10-08T08:09:40.491227Z", + null + ] + ] + } + }, + "item_assets": { + "safe-manifest": { + "type": "application/xml", + "description": "SAFE product manifest", + "roles": [ + "metadata" + ] + }, + "b0": { + "type": "application/x-netcdf", + "description": "Top of atmosphere reflectance data set associated with the VGT-B0 channel", + "eo:bands": [ + { + "name": "B0", + "description": "OLCI channels Oa02, Oa03", + "center_wavelength": 0.45, + "full_width_half_max": 0.02 + } + ], + "roles": [ + "data" + ] + }, + "b2": { + "type": "application/x-netcdf", + "description": "Top of atmosphere reflectance data set associated with the VGT-B2 channel", + "eo:bands": [ + { + "name": "B2", + "description": "OLCI channels Oa06, Oa07, Oa08, Oa09, Oa10", + "center_wavelength": 0.645, + "full_width_half_max": 0.035 + } + ], + "roles": [ + "data" + ] + }, + "b3": { + "type": "application/x-netcdf", + "description": "Top of atmosphere reflectance data set associated with the VGT-B3 channel", + "eo:bands": [ + { + "name": "B3", + "description": "OLCI channels Oa16, Oa17, Oa18, Oa21", + "center_wavelength": 0.835, + "full_width_half_max": 0.055 + } + ], + "roles": [ + "data" + ] + }, + "mir": { + "type": "application/x-netcdf", + "description": "Top of atmosphere Reflectance data set associated with the VGT-MIR channel", + "eo:bands": [ + { + "name": "MIR", + "description": "SLSTR nadir and oblique channels S5, S6", + "center_wavelength": 1.665, + "full_width_half_max": 0.085 + } + ], + "roles": [ + "data" + ] + }, + "vaa": { + "type": "application/x-netcdf", + "description": "View azimuth angle data", + "roles": [ + "data" + ] + }, + "vza": { + "type": "application/x-netcdf", + "description": "View zenith angle data", + "roles": [ + "data" + ] + }, + "saa": { + "type": "application/x-netcdf", + "description": "Solar azimuth angle data", + "roles": [ + "data" + ] + }, + "sza": { + "type": "application/x-netcdf", + "description": "Solar zenith angle data", + "roles": [ + "data" + ] + }, + "ag": { + "type": "application/x-netcdf", + "description": "Aerosol optical thickness data", + "roles": [ + "data" + ] + }, + "og": { + "type": "application/x-netcdf", + "description": "Total ozone column data", + "roles": [ + "data" + ] + }, + "wvg": { + "type": "application/x-netcdf", + "description": "Total column water vapour data", + "roles": [ + "data" + ] + }, + "sm": { + "type": "application/x-netcdf", + "description": "Status map data", + "roles": [ + "data" + ] + } + } +} \ No newline at end of file diff --git a/datasets/sentinel-3/dataset.yaml b/datasets/sentinel-3/dataset.yaml index 8e9e9cd6..346608d9 100644 --- a/datasets/sentinel-3/dataset.yaml +++ b/datasets/sentinel-3/dataset.yaml @@ -1,12 +1,183 @@ -id: sentinel-1-grd +id: sentinel-3 +image: ${{ args.registry }}/pctasks-sentinel-3:2023.5.1.0 + +args: + - registry + +code: + src: ${{ local.path(./sentinel_3) }} + +environment: + AZURE_TENANT_ID: ${{ secrets.task-tenant-id }} + AZURE_CLIENT_ID: ${{ secrets.task-client-id }} + AZURE_CLIENT_SECRET: ${{ secrets.task-client-secret }} + collections: - id: sentinel-1-grd - containers: - assets: sentinel1euwest/s1-grd - stac: sentinel1euwest/s1-grd-stac - etl-data: sentinel1euwest/s1-grd-etl-info -triggers: - storage: - account: sentinel1euwest - container: s1-grd-stac - filter: "*.json" + - id: sentinel-3-olci-lfr-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-olci-lfr-l2-netcdf/) }} + class: sentinel_3.sentinel_3_olci_lfr_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + # create-chunks took ~8 minutes. Consider splitting by year. + chunks: + options: + name_starts_with: OLCI/OL_2_LFR___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-olci-lfr-l2-netcdf + + - id: sentinel-3-olci-wfr-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-olci-wfr-l2-netcdf/) }} + class: sentinel_3.sentinel_3_olci_wfr_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: OLCI/OL_2_WFR___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-olci-wfr-l2-netcdf + + - id: sentinel-3-synergy-aod-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-synergy-aod-l2-netcdf) }} + class: sentinel_3.sentinel_3_synergy_aod_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SYNERGY/SY_2_AOD___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-synergy-aod-l2-netcdf + + - id: sentinel-3-synergy-syn-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-synergy-syn-l2-netcdf) }} + class: sentinel_3.sentinel_3_synergy_syn_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SYNERGY/SY_2_SYN___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-synergy-syn-l2-netcdf + + - id: sentinel-3-synergy-v10-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-synergy-v10-l2-netcdf) }} + class: sentinel_3.sentinel_3_synergy_v10_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SYNERGY/SY_2_V10___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-synergy-v10-l2-netcdf + + - id: sentinel-3-synergy-vg1-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-synergy-vg1-l2-netcdf) }} + class: sentinel_3.sentinel_3_synergy_vg1_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SYNERGY/SY_2_VG1___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-synergy-vg1-l2-netcdf + + - id: sentinel-3-synergy-vgp-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-synergy-vgp-l2-netcdf) }} + class: sentinel_3.sentinel_3_synergy_vgp_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SYNERGY/SY_2_VGP___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-synergy-vgp-l2-netcdf + + - id: sentinel-3-sral-lan-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-sral-lan-l2-netcdf) }} + class: sentinel_3.sentinel_3_sral_lan_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SRAL/SR_2_LAN___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-sral-lan-l2-netcdf + + - id: sentinel-3-sral-wat-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-sral-wat-l2-netcdf) }} + class: sentinel_3.sentinel_3_sral_wat_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SRAL/SR_2_WAT___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-sral-wat-l2-netcdf + + - id: sentinel-3-slstr-frp-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-slstr-frp-l2-netcdf) }} + class: sentinel_3.sentinel_3_slstr_frp_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SLSTR/SL_2_FRP___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-slstr-frp-l2-netcdf + + - id: sentinel-3-slstr-lst-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-slstr-lst-l2-netcdf) }} + class: sentinel_3.sentinel_3_slstr_lst_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SLSTR/SL_2_LST___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-slstr-lst-l2-netcdf + + - id: sentinel-3-slstr-wst-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-slstr-wst-l2-netcdf) }} + class: sentinel_3.sentinel_3_slstr_wst_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SLSTR/SL_2_WST___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-slstr-wst-l2-netcdf \ No newline at end of file diff --git a/datasets/sentinel-3/requirements.txt b/datasets/sentinel-3/requirements.txt new file mode 100644 index 00000000..10eba107 --- /dev/null +++ b/datasets/sentinel-3/requirements.txt @@ -0,0 +1 @@ +antimeridian==0.2.3 \ No newline at end of file diff --git a/datasets/sentinel-3/sentinel-3-olci-l2.json b/datasets/sentinel-3/sentinel-3-olci-l2.json deleted file mode 100755 index 8f30c6a3..00000000 --- a/datasets/sentinel-3/sentinel-3-olci-l2.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "type": "Collection", - "id": "sentinel-3-l2-olci", - "stac_version": "1.0.0", - "description": "The [Sentinel-3](https://sentinel.esa.int/web/sentinel/missions/sentinel-3) mission is composed of three versatile satellites designed to provide data continuity for the ERS, ENVISAT and SPOT satellites and to support operational land and ocean observation services. Sentinel-3 satellites make use of four main instruments on board; OLCI, SLSTR, SRAL and MWR, to measure sea surface topography, sea and land surface temperature and ocean and land surface color. The medium resolution OLCI(Ocean and Land Colour Instrument) is the successor to ENVISAT's MERIS instrument. Since its launch in 2016, OLCI acquires data of the entire globe at least once every 2 days, in 21 bands, from which information on marine and terrestrial biomass can be derived. OLCI also provides reliable information on the atmosphere, especially on the aerosols characterisation. Level 2 OLCI products provide land, water, and atmospheric geophysical parameters computed for Full Resolution and Reduced Resolution.", - "links": [ - { - "rel": "license", - "href": "https://sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice" - }, - { - "rel": "root", - "href": "./sentinel-3-olci.json", - "type": "application/json" - }, - { - "rel": "self", - "href": "https://sentinel3euwest.blob.core.windows.net/sentinel-3-stac/OLCI/sentinel-3-olci.json", - "type": "application/json" - } - ], - "stac_extensions": [ - "https://stac-extensions.github.io/sat/v1.0.0/schema.json", - "https://stac-extensions.github.io/eo/v1.0.0/schema.json" - ], - "extent": { - "spatial": { - "bbox": [ - [ - -180, - -85, - 180, - 85 - ] - ] - }, - "temporal": { - "interval": [ - [ - "2016-04-17T11:33:13Z", - null - ] - ] - } - }, - "license": "proprietary", - "keywords": [ - "eu", - "esa", - "copernicus", - "sentinel", - "systematic", - "satellite imagery", - "climate", - "atmospheric aerosols", - "marine biology", - "maritime monitoring", - "OLCI Terrestrial Chlorophyll Index (OTCI)", - "OLCI Global Vegetation Index (OGVI)", - "Integrated Water Vapour (IWV)", - "Rectified Reflectance", - "Surface directional reflectance", - "Neural Net Chlorophyll concentration", - "OC4Me algorithm Chlorophyll concentration", - "Inherent Optical Properties of water", - "Integrated water vapour column", - "Photosynthetically Active Radiation", - "Transparency properties of water", - "Total suspended matter concentration", - "Aerosol Over Water" - ], - "providers": [ - { - "name": "ESA", - "roles": [ - "producer", - "processor", - "licensor" - ], - "url": "https://earth.esa.int/web/guest/home" - }, - { - "name": "Microsoft", - "roles": [ - "host", - "processor" - ], - "url": "https://planetarycomputer.microsoft.com" - } - ], - "msft:container": "sentinel-3", - "msft:region": "westeurope", - "msft:storage_account": "sentinel3euwest", - "msft:short_description": "The [Sentinel-3](https://sentinel.esa.int/web/sentinel/missions/sentinel-3) mission is composed of three versatile satellites designed to provide data continuity for the ERS, ENVISAT and SPOT satellites and to support operational land and ocean observation services. Level 2 OLCI products provide land, water, and atmospheric geophysical parameters computed for Full Resolution and Reduced Resolution.", - "summaries": { - "constellation": [ - "Sentinel-3" - ], - "platform": [ - "Sentinel-3A", - "Sentinel-3B" - ], - "instruments": [ - "OCLI" - ], - "sat:platform_international_designator": [ - "2016-011A", - "2018-039A" - ], - "sat:orbit_state" : [ - "ascending", - "descending" - ], - "sat:absolute_orbit" : { - "minimum": 1 - }, - "sat:relative_orbi": { - "minimum": 1, - "maximum": 385 - }, - "eo:cloud_cover": { - "minimum": 0, - "maximum": 100 - }, - "s3:mode" : [ - "EO" - ], - "s3:productType": [ - "OL_2_LFR___", - "OL_2_WFR___" - ], - "s3:salineWaterPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:coastalPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:freshInlandWaterPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:tidalRegionPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:landPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:invalidPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:cosmeticPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:duplicatedPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:saturatedPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:dubiousSamples_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:shape": { - "dimensions": "columns x rows", - "columns": "Number of columns in the product image", - "rows": "Number of rows in the product image" - } - }, - "title": "Sentinel-3 Level-2 OLCI" -} \ No newline at end of file diff --git a/datasets/sentinel-3/sentinel-3-slstr-l2.json b/datasets/sentinel-3/sentinel-3-slstr-l2.json deleted file mode 100755 index eb969aa9..00000000 --- a/datasets/sentinel-3/sentinel-3-slstr-l2.json +++ /dev/null @@ -1,160 +0,0 @@ -{ - "type": "Collection", - "id": "sentinel-3-l2-slstr", - "stac_version": "1.0.0", - "description": "The [Sentinel-3](https://sentinel.esa.int/web/sentinel/missions/sentinel-3) mission is composed of three versatile satellites designed to provide data continuity for the ERS, ENVISAT and SPOT satellites and to support operational land and ocean observation services. Sentinel-3 satellites make use of four main instruments on board; OLCI, SLSTR, SRAL and MWR, to measure sea surface topography, sea and land surface temperature and ocean and land surface color. The SLSTR (Sea and Land Surface Temperature Radiometer) continues the timeline of Sea Surface Temperature measurements from the ATSR instrument series. The principal objective of SLSTR products is to provide global and regional Sea and Land Surface Temperature (SST, LST) to a very high level of accuracy (better than 0.3 K for SST) for both climatological and meteorological applications. The SLSTR Level-2 processing includes five types of products: WCT products providing the sea surface temperature for single and dual view, for two or three channels, WST products providing L2P sea surface temperature, following the GHRSST specifications, LST products providing land surface temperature, FRP products providing global (over land and water) fire radiative power, and AOD products providing global (over land and water) aerosol optical depth.", - "links": [ - { - "rel": "license", - "href": "https://sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice" - }, - { - "rel": "root", - "href": "./sentinel-3-slstr.json", - "type": "application/json" - }, - { - "rel": "self", - "href": "https://sentinel3euwest.blob.core.windows.net/sentinel-3-stac/SLSTR/sentinel-3-slstr.json", - "type": "application/json" - } - ], - "stac_extensions": [ - "https://stac-extensions.github.io/sat/v1.0.0/schema.json", - "https://stac-extensions.github.io/eo/v1.0.0/schema.json" - ], - "extent": { - "spatial": { - "bbox": [ - [ - -180, - -85, - 180, - 85 - ] - ] - }, - "temporal": { - "interval": [ - [ - "2016-04-17T11:33:13Z", - null - ] - ] - } - }, - "license": "proprietary", - "keywords": [ - "eu", - "esa", - "copernicus", - "sentinel", - "Fire Radiative Power", - "Land Surface Temperature (LST)", - "Group for High Resolution Sea Surface Temperature (GHRSST)" - ], - "providers": [ - { - "name": "ESA", - "roles": [ - "producer", - "processor", - "licensor" - ], - "url": "https://earth.esa.int/web/guest/home" - }, - { - "name": "Microsoft", - "roles": [ - "host", - "processor" - ], - "url": "https://planetarycomputer.microsoft.com" - } - ], - "msft:container": "sentinel-3", - "msft:region": "westeurope", - "msft:storage_account": "sentinel3euwest", - "msft:short_description": "The [Sentinel-3](https://sentinel.esa.int/web/sentinel/missions/sentinel-3) mission is composed of three versatile satellites designed to provide data continuity for the ERS, ENVISAT and SPOT satellites and to support operational land and ocean observation services. The SLSTR Level-2 processing includes five types of products: WCT products providing the sea surface temperature for single and dual view, for two or three channels, WST products providing L2P sea surface temperature, following the GHRSST specifications, LST products providing land surface temperature, FRP products providing global (over land and water) fire radiative power, and AOD products providing global (over land and water) aerosol optical depth.", - "summaries": { - "constellation": [ - "Sentinel-3" - ], - "platform": [ - "Sentinel-3A", - "Sentinel-3B" - ], - "instruments": [ - "SLSTR" - ], - "sat:platform_international_designator": [ - "2016-011A", - "2018-039A" - ], - "sat:orbit_state" : [ - "ascending", - "descending" - ], - "sat:absolute_orbit" : { - "minimum": 1 - }, - "sat:relative_orbi": { - "minimum": 1, - "maximum": 385 - }, - "eo:cloud_cover": { - "minimum": 0, - "maximum": 100 - }, - "s3:mode" : [ - "EO" - ], - "s3:productType": [ - "SL_2_FRP___", - "SL_2_LST___", - "SL_2_WST___" - ], - "s3:salineWaterPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:landPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:coastalPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:freshInlandWaterPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:tidalRegionPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:cosmeticPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:duplicatedPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:saturatedPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:outOfRangePixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:shape": { - "dimensions": "columns x rows", - "columns": "Number of columns in the product image", - "rows": "Number of rows in the product image" - } - }, - "title": "Sentinel-3 Level-2 SLSTR" -} diff --git a/datasets/sentinel-3/sentinel-3-sral-l2.json b/datasets/sentinel-3/sentinel-3-sral-l2.json deleted file mode 100755 index e4f49630..00000000 --- a/datasets/sentinel-3/sentinel-3-sral-l2.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "type": "Collection", - "id": "sentinel-3-l2-sral", - "stac_version": "1.0.0", - "description": "The [Sentinel-3](https://sentinel.esa.int/web/sentinel/missions/sentinel-3) mission is composed of three versatile satellites designed to provide data continuity for the ERS, ENVISAT and SPOT satellites and to support operational land and ocean observation services. Sentinel-3 satellites make use of four main instruments on board; OLCI, SLSTR, SRAL and MWR, to measure sea surface topography, sea and land surface temperature and ocean and land surface color. The SAR Radar Altimeter (SRAL) instrument measures Surface Height (SSH), Significant Wave Height (SWH), Wind Speed over ocean surface at High Resolution Mode (HRM) and uses Low Resolution Mode (LRM) as a backup for ocean topography application. There are two types of Level-2 products according to the surface covered, including Water products (SR_2_WAT) generated by the Marine Centre and land products (SR_2_LAN) generated by the Land Centres.", - "links": [ - { - "rel": "license", - "href": "https://sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice" - }, - { - "rel": "root", - "href": "./sentinel-3-sral.json", - "type": "application/json" - }, - { - "rel": "self", - "href": "https://sentinel3euwest.blob.core.windows.net/sentinel-3-stac/SRAL/sentinel-3-sral.json", - "type": "application/json" - } - ], - "stac_extensions": [ - "https://stac-extensions.github.io/sat/v1.0.0/schema.json" - ], - "extent": { - "spatial": { - "bbox": [ - [ - -180, - -85, - 180, - 85 - ] - ] - }, - "temporal": { - "interval": [ - [ - "2016-04-17T11:33:13Z", - null - ] - ] - } - }, - "license": "proprietary", - "keywords": [ - "eu", - "esa", - "copernicus", - "sentinel", - "ocean topography", - "Surface Height (SSH)", - "Significant Wave Height (SWH)", - "Wind Speed over ocean surface" - ], - "providers": [ - { - "name": "ESA", - "roles": [ - "producer", - "processor", - "licensor" - ], - "url": "https://earth.esa.int/web/guest/home" - }, - { - "name": "Microsoft", - "roles": [ - "host", - "processor" - ], - "url": "https://planetarycomputer.microsoft.com" - } - ], - "msft:container": "sentinel-3", - "msft:region": "westeurope", - "msft:storage_account": "sentinel3euwest", - "msft:short_description": "The [Sentinel-3](https://sentinel.esa.int/web/sentinel/missions/sentinel-3) mission is composed of three versatile satellites designed to provide data continuity for the ERS, ENVISAT and SPOT satellites and to support operational land and ocean observation services. Level-2 SRAL products provide geophysical parameters of ocean topography.", - "summaries": { - "constellation": [ - "Sentinel-3" - ], - "platform": [ - "Sentinel-3A", - "Sentinel-3B" - ], - "instruments": [ - "SRAL" - ], - "sat:platform_international_designator": [ - "2016-011A", - "2018-039A" - ], - "sat:orbit_state" : [ - "ascending", - "descending" - ], - "sat:absolute_orbit" : { - "minimum": 1 - }, - "sat:relative_orbi": { - "minimum": 1, - "maximum": 385 - }, - "s3:mode" : [ - "EO" - ], - "s3:productType": [ - "SR_2_LAN___", - "SR_2_WAT___" - ], - "s3:lrmModePercentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:sarModePercentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:landPercentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:closedSeaPercentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:continentalIcePercentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:openOceanPercentage": { - "minimum": 0, - "maximum": 100 - } - }, - "title": "Sentinel-3 Level-2 SRAL" -} diff --git a/datasets/sentinel-3/sentinel-3-synergy-l2.json b/datasets/sentinel-3/sentinel-3-synergy-l2.json deleted file mode 100755 index 2e99d3a7..00000000 --- a/datasets/sentinel-3/sentinel-3-synergy-l2.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "type": "Collection", - "id": "sentinel-3-l2-synergy", - "stac_version": "1.0.0", - "description": "The [Sentinel-3](https://sentinel.esa.int/web/sentinel/missions/sentinel-3) mission is composed of three versatile satellites designed to provide data continuity for the ERS, ENVISAT and SPOT satellites and to support operational land and ocean observation services. Sentinel-3 satellites make use of four main instruments on board; OLCI, SLSTR, SRAL and MWR, to measure sea surface topography, sea and land surface temperature and ocean and land surface color. OLCI, in conjunction with the SLSTR instrument, provides the SYN products, providing continuity with SPOT VEGETATION. The primary objective of SYN products is the monitoring of land use. SYN also provides information relating to worldwide food security and contributes to the study of climate.", - "links": [ - { - "rel": "license", - "href": "https://sentinel.esa.int/documents/247904/690755/Sentinel_Data_Legal_Notice" - }, - { - "rel": "root", - "href": "./sentinel-3-synergy.json", - "type": "application/json" - }, - { - "rel": "self", - "href": "https://sentinel3euwest.blob.core.windows.net/sentinel-3-stac/SYNERGY/sentinel-3-synergy.json", - "type": "application/json" - } - ], - "stac_extensions": [ - "https://stac-extensions.github.io/sat/v1.0.0/schema.json", - "https://stac-extensions.github.io/eo/v1.0.0/schema.json" - ], - "extent": { - "spatial": { - "bbox": [ - [ - -180, - -85, - 180, - 85 - ] - ] - }, - "temporal": { - "interval": [ - [ - "2016-04-17T11:33:13Z", - null - ] - ] - } - }, - "license": "proprietary", - "keywords": [ - "eu", - "esa", - "copernicus", - "sentinel", - "Surface directional reflectance", - "Aerosol Optical Thickness", - "Aerosol Angstrom Exponent", - "Normalised difference vegetation index", - "VEGETATION-Like product (~VGT-P) TOA Reflectance", - "VEGETATION-Like product (~VGT-S1) 1 day synthesis surface reflectance", - "VEGETATION-Like product (~VGT-S10) 10 day synthesis surface reflectance", - "Global aerosol parameters" - ], - "providers": [ - { - "name": "ESA", - "roles": [ - "producer", - "processor", - "licensor" - ], - "url": "https://earth.esa.int/web/guest/home" - }, - { - "name": "Microsoft", - "roles": [ - "host", - "processor" - ], - "url": "https://planetarycomputer.microsoft.com" - } - ], - "msft:container": "sentinel-3", - "msft:region": "westeurope", - "msft:storage_account": "sentinel3euwest", - "msft:short_description": "The [Sentinel-3](https://sentinel.esa.int/web/sentinel/missions/sentinel-3) mission is composed of three versatile satellites designed to provide data continuity for the ERS, ENVISAT and SPOT satellites and to support operational land and ocean observation services. OLCI, in conjunction with the SLSTR instrument, provides the SYN products, providing continuity with SPOT VEGETATION.", - "summaries": { - "constellation": [ - "Sentinel-3" - ], - "platform": [ - "Sentinel-3A", - "Sentinel-3B" - ], - "instruments": [ - "SYNERGY" - ], - "sat:platform_international_designator": [ - "2016-011A", - "2018-039A" - ], - "sat:orbit_state" : [ - "ascending", - "descending" - ], - "sat:absolute_orbit" : { - "minimum": 1 - }, - "sat:relative_orbi": { - "minimum": 1, - "maximum": 385 - }, - "eo:cloud_cover": { - "minimum": 0, - "maximum": 100 - }, - "s3:mode" : [ - "EO" - ], - "s3:productType": [ - "SY_2_AOD___", - "SY_2_SYN___", - "SY_2_V10___", - "SY_2_VG1___", - "SY_2_VGP___" - ], - "s3:salineWaterPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:coastalPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:freshInlandWaterPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:tidalRegionPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:landPixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:snowOrIcePixels_percentage": { - "minimum": 0, - "maximum": 100 - }, - "s3:shape": { - "dimensions": "columns x rows", - "columns": "Number of columns in the product image", - "rows": "Number of rows in the product image" - } - }, - "title": "Sentinel-3 Level-2 SYNERGY" -} diff --git a/datasets/sentinel-3/s3/__init__.py b/datasets/sentinel-3/sentinel_3/__init__.py similarity index 100% rename from datasets/sentinel-3/s3/__init__.py rename to datasets/sentinel-3/sentinel_3/__init__.py diff --git a/datasets/sentinel-3/sentinel_3/sentinel_3_base.py b/datasets/sentinel-3/sentinel_3/sentinel_3_base.py new file mode 100644 index 00000000..46acb887 --- /dev/null +++ b/datasets/sentinel-3/sentinel_3/sentinel_3_base.py @@ -0,0 +1,257 @@ +import logging +from decimal import Decimal +from pathlib import Path +from typing import Any, Dict, List, Optional + +import antimeridian +import pystac +import shapely.geometry +from sentinel_3.sentinel_3_winding import get_winding + +import pctasks.dataset.collection + +handler = logging.StreamHandler() +handler.setFormatter(logging.Formatter("[%(levelname)s]:%(asctime)s: %(message)s")) +handler.setLevel(logging.INFO) +logger = logging.getLogger(__name__) +logger.addHandler(handler) +logger.setLevel(logging.INFO) + +PRODUCT_NAMES = { + "OL_2_LFR___": "olci-lfr", + "OL_2_WFR___": "olci-wfr", + "SL_2_FRP___": "slstr-frp", + "SL_2_LST___": "slstr-lst", + "SL_2_WST___": "slstr-wst", + "SR_2_LAN___": "sral-lan", + "SR_2_WAT___": "sral-wat", + "SY_2_AOD___": "synergy-aod", + "SY_2_SYN___": "synergy-syn", + "SY_2_V10___": "synergy-v10", + "SY_2_VG1___": "synergy-vg1", + "SY_2_VGP___": "synergy-vgp", +} + + +def recursive_round(coordinates: List[Any], precision: int) -> List[Any]: + """Rounds a list of numbers. The list can contain additional nested lists + or tuples of numbers. + + Any tuples encountered will be converted to lists. + + Args: + coordinates (List[Any]): A list of numbers, possibly containing nested + lists or tuples of numbers. + precision (int): Number of decimal places to use for rounding. + + Returns: + List[Any]: The list of numbers rounded to the given precision. + """ + rounded: List[Any] = [] + for value in coordinates: + if isinstance(value, (int, float)): + rounded.append(round(value, precision)) + else: + rounded.append(recursive_round(list(value), precision)) + return rounded + + +def nano2micro(value: float) -> float: + """Converts nanometers to micrometers while handling floating + point arithmetic errors.""" + return float(Decimal(str(value)) / Decimal("1000")) + + +def hz2ghz(value: float) -> float: + """Converts hertz to gigahertz while handling floating point + arithmetic errors.""" + return float(Decimal(str(value)) / Decimal("1000000000")) + + +class BaseSentinelCollection(pctasks.dataset.collection.Collection): # type: ignore + def base_updates(item_dict: Dict[str, Any]) -> Optional[Dict[str, Any]]: + """Apply item updates. + + Args: + item_dict (Dict[str, Any]): The Item dictionary as read from Azure. + max_delta_lon (float): The maximum longitude difference used by + the winding detection algorithm. + + Returns: + Optional[Dict[str, Any]]: The updated Item dictionary, or None if + the Item is not a NT (Not Time critical) product. + """ + + # Skip item if it is not a NT (Not Time critical) product. + asset_directory = Path(item_dict["assets"]["safe-manifest"]["href"]).parent.name + assert asset_directory.endswith(".SEN3") + timeliness = asset_directory[-11:-9] + assert timeliness in ["NR", "ST", "NT"] + if asset_directory[-11:-9] != "NT": + return None + + # Strip any trailing underscores from the ID + original_id = item_dict["id"] + item_dict["id"] = original_id.rstrip("_") + + # ---- PROPERTIES ---- + properties = item_dict.pop("properties") + + # Update placeholder platform ID to the final version + sat_id = "sat:platform_international_designator" + if properties[sat_id] == "0000-000A": + properties[sat_id] = "2016-011A" + elif properties[sat_id] == "0000-000B": + properties[sat_id] = "2018-039A" + + if properties["instruments"] == ["SYNERGY"]: + # "SYNERGY" is not a instrument + properties["instruments"] = ["OLCI", "SLSTR"] + + # Add the processing timelessness to the properties + properties["s3:processing_timeliness"] = timeliness + + # Add a user-friendly name + properties["s3:product_name"] = PRODUCT_NAMES[properties["s3:productType"]] + + # Providers should be supplied in the Collection, not the Item + properties.pop("providers", None) + + # start_datetime and end_datetime are incorrectly formatted + properties["start_datetime"] = pystac.utils.datetime_to_str( + pystac.utils.str_to_datetime(properties["start_datetime"]) + ) + properties["end_datetime"] = pystac.utils.datetime_to_str( + pystac.utils.str_to_datetime(properties["end_datetime"]) + ) + properties["datetime"] = pystac.utils.datetime_to_str( + pystac.utils.str_to_datetime(properties["datetime"]) + ) + + # Remove s3:mode, which is always set to EO (Earth # Observation). It + # offers no additional information. + properties.pop("s3:mode", None) + + # Use underscores instead of camel case for consistency + new_properties = {} + for key in properties: + if key.startswith("s3:"): + new_key = "".join( + "_" + char.lower() if char.isupper() else char for char in key + ) + # strip "_pixels_percentages" to match eo:cloud_cover pattern + if new_key.endswith("_pixels_percentage"): + new_key = new_key.replace("_pixels_percentage", "") + elif new_key.endswith("_pixelss_percentage"): + new_key = new_key.replace("_pixelss_percentage", "") + elif new_key.endswith("_percentage"): + new_key = new_key.replace("_percentage", "") + new_properties[new_key] = properties[key] + else: + new_properties[key] = properties[key] + + item_dict["properties"] = new_properties + + # ---- LINKS ---- + links = item_dict.pop("links") + + # license is the same for all Items; include on the Collection, not the Item + for link in links: + if link["rel"] == "license": + links.remove(link) + + item_dict["links"] = links + + # ---- ASSETS ---- + assets = item_dict.pop("assets") + + new_assets = {} + for asset_key, asset in assets.items(): + # remove local paths + asset.pop("file:local_path", None) + + # Add a description to the safe_manifest asset + if asset_key == "safe-manifest": + asset["description"] = "SAFE product manifest" + + # correct eo:bands + if "eo:bands" in asset: + for band in asset["eo:bands"]: + band["center_wavelength"] = nano2micro(band["center_wavelength"]) + band["full_width_half_max"] = nano2micro(band["band_width"]) + band.pop("band_width") + + # Tune up the radar altimetry bands. Radar altimetry is different + # enough than radar imagery that the existing SAR extension doesn't + # quite work (plus, the SAR extension doesn't have a band object). + # We'll use a band construct similar to eo:bands, but follow the + # naming and unit conventions in the SAR extension. + if "sral:bands" in asset: + asset["s3:altimetry_bands"] = asset.pop("sral:bands") + for band in asset["s3:altimetry_bands"]: + band["frequency_band"] = band.pop("name") + band["center_frequency"] = hz2ghz(band.pop("central_frequency")) + band["band_width"] = hz2ghz(band.pop("band_width_in_Hz")) + + # Some titles are just the filenames + if asset_key == "eopmetadata" or asset_key == "browse_jpg": + asset.pop("title", None) + + # Make asset keys kebab-case + new_asset_key = "" + for first, second in zip(asset_key, asset_key[1:]): + new_asset_key += first + if first.islower() and second.isupper(): + new_asset_key += "-" + new_asset_key += asset_key[-1] + new_asset_key = new_asset_key.replace("_", "-") + new_asset_key = new_asset_key.lower() + if asset_key == "eopmetadata": + new_asset_key = "eop-metadata" + new_assets[new_asset_key] = asset + + item_dict["assets"] = new_assets + + # ---- GEOMETRY ---- + geometry_dict = item_dict["geometry"] + assert geometry_dict["type"] == "Polygon" + + if item_dict["properties"]["s3:product_name"] in [ + "synergy-v10", + "synergy-vg1", + ]: + max_delta_lon = 300 + else: + max_delta_lon = 120 + + coords = geometry_dict["coordinates"][0] + winding = get_winding(coords, max_delta_lon) + if winding == "CW": + geometry_dict["coordinates"][0] = coords[::-1] + elif winding is None: + logger.warning( + f"Could not determine winding order of polygon in " + f"Item: '{item_dict['id']}'" + ) + + geometry = shapely.geometry.shape(geometry_dict) + + # slstr-lst strip geometries are incorrect, so we apply a hack + if item_dict["properties"][ + "s3:product_name" + ] == "slstr-lst" and original_id.endswith("_____"): + geometry = antimeridian.fix_polygon(geometry, force_north_pole=True) + else: + geometry = antimeridian.fix_polygon(geometry) + + if not geometry.is_valid: + geometry = geometry.buffer(0) + + item_dict["bbox"] = list(geometry.bounds) + item_dict["geometry"] = shapely.geometry.mapping(geometry) + item_dict["geometry"]["coordinates"] = recursive_round( + list(item_dict["geometry"]["coordinates"]), precision=4 + ) + item_dict["bbox"] = recursive_round(list(item_dict["bbox"]), precision=4) + + return item_dict diff --git a/datasets/sentinel-3/sentinel_3/sentinel_3_olci_lfr_l2_netcdf.py b/datasets/sentinel-3/sentinel_3/sentinel_3_olci_lfr_l2_netcdf.py new file mode 100644 index 00000000..ac0c2179 --- /dev/null +++ b/datasets/sentinel-3/sentinel_3/sentinel_3_olci_lfr_l2_netcdf.py @@ -0,0 +1,55 @@ +from typing import List, Union + +import pystac +from sentinel_3.sentinel_3_base import BaseSentinelCollection + +from pctasks.core.models.task import WaitTaskResult +from pctasks.core.storage import StorageFactory + +ASSET_DESCRIPTIONS = { + "safe-manifest": "SAFE product manifest", + "gifapar": "Green instantaneous Fraction of Absorbed Photosynthetically Active Radiation (FAPAR)", # noqa + "ogvi": "OLCI Global Vegetation Index (OGVI)", + "otci": "OLCI Terrestrial Chlorophyll Index (OTCI)", + "iwv": "Integrated water vapour column", + "rc-ogvi": "Rectified reflectance", + "rc-gifapar": "Rectified reflectance", + "lqsf": "Land quality and science flags", + "time-coordinates": "Time coordinate annotations", + "geo-coordinates": "Geo coordinate annotations", + "tie-geo-coordinates": "Tie-point geo coordinate annotations", + "tie-geometries": "Tie-point geometry annotations", + "tie-meteo": "Tie-point meteo annotations", + "instrument-data": "Instrument annotations", +} + + +class Collection(BaseSentinelCollection): + @classmethod + def create_item( + cls, asset_uri: str, storage_factory: StorageFactory + ) -> Union[List[pystac.Item], WaitTaskResult]: + storage, json_path = storage_factory.get_storage_for_file(asset_uri) + item_dict = storage.read_json(json_path) + + item_dict = cls.base_updates(item_dict) + if item_dict is None: + # Skip any NT scenes + return [] + + # Grab the shape; we'll move it to assets to be consistent with the + # other collections + shape = item_dict["properties"].pop("s3:shape") + + for asset_key, asset in item_dict["assets"].items(): + if "resolution" in asset: + # flip to row, column order + asset["s3:spatial_resolution"] = asset.pop("resolution")[::-1] + # add shape, flip to row, column order + asset["s3:shape"] = shape[::-1] + + # clean up descriptions + if asset_key in ASSET_DESCRIPTIONS: + asset["description"] = ASSET_DESCRIPTIONS[asset_key] + + return [pystac.Item.from_dict(item_dict)] diff --git a/datasets/sentinel-3/sentinel_3/sentinel_3_olci_wfr_l2_netcdf.py b/datasets/sentinel-3/sentinel_3/sentinel_3_olci_wfr_l2_netcdf.py new file mode 100644 index 00000000..5abbe6df --- /dev/null +++ b/datasets/sentinel-3/sentinel_3/sentinel_3_olci_wfr_l2_netcdf.py @@ -0,0 +1,56 @@ +from typing import List, Union + +import pystac +from sentinel_3.sentinel_3_base import BaseSentinelCollection + +from pctasks.core.models.task import WaitTaskResult +from pctasks.core.storage import StorageFactory + +ASSET_DESCRIPTIONS = { + "chl-nn": "Neural net chlorophyll concentration", + "chl-oc4me": "OC4Me algorithm chlorophyll concentration", + "iop-nn": "Inherent optical properties of water", + "iwv": "Integrated water vapour column", + "par": "Photosynthetically active radiation", + "w-aer": "Aerosol over water", + "geo-coordinates": "Geo coordinate annotations", + "instrument-data": "Instrument annotations", + "tie-geo-coordinates": "Tie-point geo coordinate annotations", + "tie-geometries": "Tie-point geometry annotations", + "tie-meteo": "Tie-point meteo annotations", + "time-coordinates": "Time coordinate annotations", + "wqsf": "Water quality and science flags", + "eop-metadata": "Metadata produced by the European Organisation for the Exploitation of Meteorological Satellites (EUMETSAT)", # noqa: E501 + "browse-jpg": "Preview image produced by the European Organisation for the Exploitation of Meteorological Satellites (EUMETSAT)", # noqa: E501 +} + + +class Collection(BaseSentinelCollection): + @classmethod + def create_item( + cls, asset_uri: str, storage_factory: StorageFactory + ) -> Union[List[pystac.Item], WaitTaskResult]: + storage, json_path = storage_factory.get_storage_for_file(asset_uri) + item_dict = storage.read_json(json_path) + + item_dict = cls.base_updates(item_dict) + if item_dict is None: + # Skip any NT scenes + return [] + + # Grab the shape; we'll move it to assets to be consistent with the + # other collections + shape = item_dict["properties"].pop("s3:shape") + + for asset_key, asset in item_dict["assets"].items(): + if "resolution" in asset: + # flip to row, column order + asset["s3:spatial_resolution"] = asset.pop("resolution")[::-1] + # add shape, flip to row, column order + asset["s3:shape"] = shape[::-1] + + # clean up descriptions + if asset_key in ASSET_DESCRIPTIONS: + asset["description"] = ASSET_DESCRIPTIONS[asset_key] + + return [pystac.Item.from_dict(item_dict)] diff --git a/datasets/sentinel-3/sentinel_3/sentinel_3_slstr_frp_l2_netcdf.py b/datasets/sentinel-3/sentinel_3/sentinel_3_slstr_frp_l2_netcdf.py new file mode 100644 index 00000000..73e98048 --- /dev/null +++ b/datasets/sentinel-3/sentinel_3/sentinel_3_slstr_frp_l2_netcdf.py @@ -0,0 +1,34 @@ +from typing import List, Union + +import pystac +from sentinel_3.sentinel_3_base import BaseSentinelCollection + +from pctasks.core.models.task import WaitTaskResult +from pctasks.core.storage import StorageFactory + + +class Collection(BaseSentinelCollection): + @classmethod + def create_item( + cls, asset_uri: str, storage_factory: StorageFactory + ) -> Union[List[pystac.Item], WaitTaskResult]: + + storage, json_path = storage_factory.get_storage_for_file(asset_uri) + item_dict = storage.read_json(json_path) + + item_dict = cls.base_updates(item_dict) + if item_dict is None: + return [] + + # Grab the shape; we'll move it to assets to be consistent with the + # other collections + shape = item_dict["properties"].pop("s3:shape") + + for asset in item_dict["assets"].values(): + if "resolution" in asset: + # flip to row, column order + asset["s3:spatial_resolution"] = asset.pop("resolution")[::-1] + # add shape, flip to row, column order + asset["s3:shape"] = shape[::-1] + + return [pystac.Item.from_dict(item_dict)] diff --git a/datasets/sentinel-3/sentinel_3/sentinel_3_slstr_lst_l2_netcdf.py b/datasets/sentinel-3/sentinel_3/sentinel_3_slstr_lst_l2_netcdf.py new file mode 100644 index 00000000..fd8226ac --- /dev/null +++ b/datasets/sentinel-3/sentinel_3/sentinel_3_slstr_lst_l2_netcdf.py @@ -0,0 +1,53 @@ +from typing import List, Union + +import pystac +from sentinel_3.sentinel_3_base import BaseSentinelCollection + +from pctasks.core.models.task import WaitTaskResult +from pctasks.core.storage import StorageFactory + +ASSET_DESCRIPTIONS = { + "safe-manifest": "SAFE product manifest", + "lst-in": "Land Surface Temperature (LST) values", + "st-ancillary-ds": "LST ancillary measurement dataset", + "slstr-flags-in": "Global flags for the 1km TIR grid, nadir view", + "slstr-indices-in": "Scan, pixel and detector indices annotations for the 1km TIR grid, nadir view", # noqa: E501 + "slstr-time-in": "Time annotations for the 1km grid", + "slstr-geodetic-in": "Full resolution geodetic coordinates for the 1km TIR grid, nadir view", + "slstr-cartesian-in": "Full resolution cartesian coordinates for the 1km TIR grid, nadir view", + "slstr-geometry-tn": "16km solar and satellite geometry annotations, nadir view", + "slstr-geodetic-tx": "16km geodetic coordinates", + "slstr-cartesian-tx": "16km cartesian coordinates", + "slstr-met-tx": "Meteorological parameters regridded onto the 16km tie points", +} + + +class Collection(BaseSentinelCollection): + @classmethod + def create_item( + cls, asset_uri: str, storage_factory: StorageFactory + ) -> Union[List[pystac.Item], WaitTaskResult]: + + storage, json_path = storage_factory.get_storage_for_file(asset_uri) + item_dict = storage.read_json(json_path) + + item_dict = cls.base_updates(item_dict) + if item_dict is None: + return [] + + # Grab the shape; we'll move it to assets to be consistent with the + # other collections + shape = item_dict["properties"].pop("s3:shape") + + for asset_key, asset in item_dict["assets"].items(): + if "resolution" in asset: + # flip to row, column order + asset["s3:spatial_resolution"] = asset.pop("resolution")[::-1] + # add shape, flip to row, column order + asset["s3:shape"] = shape[::-1] + + # clean up descriptions + if asset_key in ASSET_DESCRIPTIONS: + asset["description"] = ASSET_DESCRIPTIONS[asset_key] + + return [pystac.Item.from_dict(item_dict)] diff --git a/datasets/sentinel-3/sentinel_3/sentinel_3_slstr_wst_l2_netcdf.py b/datasets/sentinel-3/sentinel_3/sentinel_3_slstr_wst_l2_netcdf.py new file mode 100644 index 00000000..5d0324b8 --- /dev/null +++ b/datasets/sentinel-3/sentinel_3/sentinel_3_slstr_wst_l2_netcdf.py @@ -0,0 +1,47 @@ +from typing import List, Union + +import pystac +from sentinel_3.sentinel_3_base import BaseSentinelCollection + +from pctasks.core.models.task import WaitTaskResult +from pctasks.core.storage import StorageFactory + +ASSET_DESCRIPTIONS = { + "safe-manifest": "SAFE product manifest", + "l2p": "Skin Sea Surface Temperature (SST) values", + "eop-metadata": "Metadata produced by the European Organisation for the Exploitation of Meteorological Satellites (EUMETSAT)", # noqa: E501 + "browse-jpg": "Preview image produced by the European Organisation for the Exploitation of Meteorological Satellites (EUMETSAT)", # noqa: E501 +} + + +class Collection(BaseSentinelCollection): + @classmethod + def create_item( + cls, asset_uri: str, storage_factory: StorageFactory + ) -> Union[List[pystac.Item], WaitTaskResult]: + + storage, json_path = storage_factory.get_storage_for_file(asset_uri) + item_dict = storage.read_json(json_path) + + item_dict = cls.base_updates(item_dict) + if item_dict is None: + return [] + + # Grab the shape; we'll move it to assets to be consistent with the + # other collections + shape = item_dict["properties"].pop("s3:shape") + + for asset_key, asset in item_dict["assets"].items(): + if "resolution" in asset: + # resolution is a text string, not a list of numbers + assert asset["resolution"] == "1 km at nadir" + asset.pop("resolution") + asset["s3:spatial_resolution"] = [1000, 1000] + # add shape, flip to row, column order + asset["s3:shape"] = shape[::-1] + + # clean up descriptions + if asset_key in ASSET_DESCRIPTIONS: + asset["description"] = ASSET_DESCRIPTIONS[asset_key] + + return [pystac.Item.from_dict(item_dict)] diff --git a/datasets/sentinel-3/sentinel_3/sentinel_3_sral_lan_l2_netcdf.py b/datasets/sentinel-3/sentinel_3/sentinel_3_sral_lan_l2_netcdf.py new file mode 100644 index 00000000..21758a9a --- /dev/null +++ b/datasets/sentinel-3/sentinel_3/sentinel_3_sral_lan_l2_netcdf.py @@ -0,0 +1,47 @@ +from typing import List, Union + +import pystac +from sentinel_3.sentinel_3_base import BaseSentinelCollection + +from pctasks.core.models.task import WaitTaskResult +from pctasks.core.storage import StorageFactory + +ASSET_DESCRIPTIONS = { + "safe-manifest": "SAFE product manifest", + "standard-measurement": "Standard measurement data file", + "enhanced-measurement": "Enhanced measurement data file", + "reduced-measurement": "Reduced measurement data file", +} + + +class Collection(BaseSentinelCollection): + @classmethod + def create_item( + cls, asset_uri: str, storage_factory: StorageFactory + ) -> Union[List[pystac.Item], WaitTaskResult]: + + storage, json_path = storage_factory.get_storage_for_file(asset_uri) + item_dict = storage.read_json(json_path) + + item_dict = cls.base_updates(item_dict) + if item_dict is None: + return [] + + for asset_key, asset in item_dict["assets"].items(): + if "shape" in asset: + # Shape is a list of single entry dicts, each dict containing + # the length of a series of 1D variables. Removing since we + # can't format to match the other collections, which are a + # single 2D list for the primary 2D variable. + asset.pop("shape") + + # clean up descriptions + if asset_key in ASSET_DESCRIPTIONS: + asset["description"] = ASSET_DESCRIPTIONS[asset_key] + + # eo extension is not used + item_dict["stac_extensions"] = [ + ext for ext in item_dict["stac_extensions"] if "/eo/" not in ext + ] + + return [pystac.Item.from_dict(item_dict)] diff --git a/datasets/sentinel-3/sentinel_3/sentinel_3_sral_wat_l2_netcdf.py b/datasets/sentinel-3/sentinel_3/sentinel_3_sral_wat_l2_netcdf.py new file mode 100644 index 00000000..11e8b092 --- /dev/null +++ b/datasets/sentinel-3/sentinel_3/sentinel_3_sral_wat_l2_netcdf.py @@ -0,0 +1,48 @@ +from typing import List, Union + +import pystac +from sentinel_3.sentinel_3_base import BaseSentinelCollection + +from pctasks.core.models.task import WaitTaskResult +from pctasks.core.storage import StorageFactory + +ASSET_DESCRIPTIONS = { + "safe-manifest": "SAFE product manifest", + "standard-measurement": "Standard measurement data file", + "enhanced-measurement": "Enhanced measurement data file", + "reduced-measurement": "Reduced measurement data file", + "eop-metadata": "Product metadata file produced by the European Organisation for the Exploitation of Meteorological Satellites (EUMETSAT)", # noqa +} + + +class Collection(BaseSentinelCollection): + @classmethod + def create_item( + cls, asset_uri: str, storage_factory: StorageFactory + ) -> Union[List[pystac.Item], WaitTaskResult]: + + storage, json_path = storage_factory.get_storage_for_file(asset_uri) + item_dict = storage.read_json(json_path) + + item_dict = cls.base_updates(item_dict) + if item_dict is None: + return [] + + for asset_key, asset in item_dict["assets"].items(): + if "shape" in asset: + # Shape is a list of single entry dicts containing the length + # of a series of 1D variables. Removing since we can't format + # to match the other collections, which are a single 2D list for + # the primary 2D variable. + asset.pop("shape") + + # clean up descriptions + if asset_key in ASSET_DESCRIPTIONS: + asset["description"] = ASSET_DESCRIPTIONS[asset_key] + + # eo extension is not used + item_dict["stac_extensions"] = [ + ext for ext in item_dict["stac_extensions"] if "/eo/" not in ext + ] + + return [pystac.Item.from_dict(item_dict)] diff --git a/datasets/sentinel-3/sentinel_3/sentinel_3_synergy_aod_l2_netcdf.py b/datasets/sentinel-3/sentinel_3/sentinel_3_synergy_aod_l2_netcdf.py new file mode 100644 index 00000000..c47007e4 --- /dev/null +++ b/datasets/sentinel-3/sentinel_3/sentinel_3_synergy_aod_l2_netcdf.py @@ -0,0 +1,36 @@ +from typing import List, Union + +import pystac +from sentinel_3.sentinel_3_base import BaseSentinelCollection + +from pctasks.core.models.task import WaitTaskResult +from pctasks.core.storage import StorageFactory + + +class Collection(BaseSentinelCollection): + @classmethod + def create_item( + cls, asset_uri: str, storage_factory: StorageFactory + ) -> Union[List[pystac.Item], WaitTaskResult]: + + storage, json_path = storage_factory.get_storage_for_file(asset_uri) + item_dict = storage.read_json(json_path) + + item_dict = cls.base_updates(item_dict) + if item_dict is None: + return [] + + # Grab the custom shape field and place on the assets for consistency + # with the other sentinel-3 collections + s3_shape = item_dict["properties"].pop("s3:shape") + + for asset_key, asset in item_dict["assets"].items(): + if asset_key == "ntc-aod": + # Place the custom shape field on the asset. Reverse the order + # to be in [row, column] order. + asset["s3:shape"] = s3_shape[::-1] + + # Reverse the provided resolution order to match the shape order + asset["s3:spatial_resolution"] = asset.pop("resolution")[::-1] + + return [pystac.Item.from_dict(item_dict)] diff --git a/datasets/sentinel-3/sentinel_3/sentinel_3_synergy_syn_l2_netcdf.py b/datasets/sentinel-3/sentinel_3/sentinel_3_synergy_syn_l2_netcdf.py new file mode 100644 index 00000000..703ab6ff --- /dev/null +++ b/datasets/sentinel-3/sentinel_3/sentinel_3_synergy_syn_l2_netcdf.py @@ -0,0 +1,51 @@ +from typing import List, Union + +import pystac +from sentinel_3.sentinel_3_base import BaseSentinelCollection + +from pctasks.core.models.task import WaitTaskResult +from pctasks.core.storage import StorageFactory + + +class Collection(BaseSentinelCollection): + @classmethod + def create_item( + cls, asset_uri: str, storage_factory: StorageFactory + ) -> Union[List[pystac.Item], WaitTaskResult]: + + storage, json_path = storage_factory.get_storage_for_file(asset_uri) + item_dict = storage.read_json(json_path) + + item_dict = cls.base_updates(item_dict) + if item_dict is None: + return [] + + for asset in item_dict["assets"].values(): + # standardize the shape property + if "syn:shape" in asset: + assert "resolution" in asset + shape = asset.pop("syn:shape") + resolution = asset.pop("resolution") + + if len(shape) == 1: + asset["s3:shape"] = [list(shape[0].values())[0]] + else: + columns = next( + (d["columns"] for d in shape if "columns" in d), False + ) + rows = next((d["rows"] for d in shape if "rows" in d), False) + # "removed pixels" are a columnar dimension. + removed_pixels = next( + (d["removed_pixels"] for d in shape if "removed_pixels" in d), + False, + ) + assert not (columns and removed_pixels) + # Use [row, column] order to align with the ordering + # provided in the netcdf descriptions and the order used by + # xarray, numpy, and rasterio. + asset["s3:shape"] = [rows, columns or removed_pixels] + + # Reverse the provided resolution order to match the shape order + asset["s3:spatial_resolution"] = resolution[::-1] + + return [pystac.Item.from_dict(item_dict)] diff --git a/datasets/sentinel-3/sentinel_3/sentinel_3_synergy_v10_l2_netcdf.py b/datasets/sentinel-3/sentinel_3/sentinel_3_synergy_v10_l2_netcdf.py new file mode 100644 index 00000000..ad7cc0dd --- /dev/null +++ b/datasets/sentinel-3/sentinel_3/sentinel_3_synergy_v10_l2_netcdf.py @@ -0,0 +1,40 @@ +from typing import List, Union + +import pystac +from sentinel_3.sentinel_3_base import BaseSentinelCollection + +from pctasks.core.models.task import WaitTaskResult +from pctasks.core.storage import StorageFactory + + +class Collection(BaseSentinelCollection): + @classmethod + def create_item( + cls, asset_uri: str, storage_factory: StorageFactory + ) -> Union[List[pystac.Item], WaitTaskResult]: + + storage, json_path = storage_factory.get_storage_for_file(asset_uri) + item_dict = storage.read_json(json_path) + + item_dict = cls.base_updates(item_dict) + if item_dict is None: + return [] + + for asset in item_dict["assets"].values(): + # standardize the shape property + if "v10:shape" in asset: + assert "resolution" in asset + shape = asset.pop("v10:shape") + resolution = asset.pop("resolution") + + latitude = next((d["latitude"] for d in shape if "latitude" in d)) + longitude = next((d["longitude"] for d in shape if "longitude" in d)) + # Use [row, column] order to align with the ordering + # provided in the netcdf descriptions and the order used by + # xarray, numpy, and rasterio. + asset["s3:shape"] = [latitude, longitude] + + # Reverse the provided resolution order to match the shape order + asset["s3:spatial_resolution"] = resolution[::-1] + + return [pystac.Item.from_dict(item_dict)] diff --git a/datasets/sentinel-3/sentinel_3/sentinel_3_synergy_vg1_l2_netcdf.py b/datasets/sentinel-3/sentinel_3/sentinel_3_synergy_vg1_l2_netcdf.py new file mode 100644 index 00000000..f142a15d --- /dev/null +++ b/datasets/sentinel-3/sentinel_3/sentinel_3_synergy_vg1_l2_netcdf.py @@ -0,0 +1,40 @@ +from typing import List, Union + +import pystac +from sentinel_3.sentinel_3_base import BaseSentinelCollection + +from pctasks.core.models.task import WaitTaskResult +from pctasks.core.storage import StorageFactory + + +class Collection(BaseSentinelCollection): + @classmethod + def create_item( + cls, asset_uri: str, storage_factory: StorageFactory + ) -> Union[List[pystac.Item], WaitTaskResult]: + + storage, json_path = storage_factory.get_storage_for_file(asset_uri) + item_dict = storage.read_json(json_path) + + item_dict = cls.base_updates(item_dict) + if item_dict is None: + return [] + + for asset in item_dict["assets"].values(): + # standardize the shape property + if "vg1:shape" in asset: + assert "resolution" in asset + shape = asset.pop("vg1:shape") + resolution = asset.pop("resolution") + + latitude = next((d["latitude"] for d in shape if "latitude" in d)) + longitude = next((d["longitude"] for d in shape if "longitude" in d)) + # Use [row, column] order to align with the ordering + # provided in the netcdf descriptions and the order used by + # xarray, numpy, and rasterio. + asset["s3:shape"] = [latitude, longitude] + + # Reverse the provided resolution order to match the shape order + asset["s3:spatial_resolution"] = resolution[::-1] + + return [pystac.Item.from_dict(item_dict)] diff --git a/datasets/sentinel-3/sentinel_3/sentinel_3_synergy_vgp_l2_netcdf.py b/datasets/sentinel-3/sentinel_3/sentinel_3_synergy_vgp_l2_netcdf.py new file mode 100644 index 00000000..d99a2f7e --- /dev/null +++ b/datasets/sentinel-3/sentinel_3/sentinel_3_synergy_vgp_l2_netcdf.py @@ -0,0 +1,59 @@ +from typing import List, Union + +import pystac +from sentinel_3.sentinel_3_base import BaseSentinelCollection + +from pctasks.core.models.task import WaitTaskResult +from pctasks.core.storage import StorageFactory + +ASSET_DESCRIPTIONS = { + "safe-manifest": "SAFE product manifest", + "b0": "Top of atmosphere reflectance data set associated with the VGT-B0 channel", + "b2": "Top of atmosphere reflectance data set associated with the VGT-B2 channel", + "b3": "Top of atmosphere reflectance data set associated with the VGT-B3 channel", + "mir": "Top of atmosphere Reflectance data set associated with the VGT-MIR channel", + "vaa": "View azimuth angle data", + "vza": "View zenith angle data", + "saa": "Solar azimuth angle data", + "sza": "Solar zenith angle data", + "ag": "Aerosol optical thickness data", + "og": "Total ozone column data", + "wvg": "Total column water vapour data", + "sm": "Status map data", +} + + +class Collection(BaseSentinelCollection): + @classmethod + def create_item( + cls, asset_uri: str, storage_factory: StorageFactory + ) -> Union[List[pystac.Item], WaitTaskResult]: + + storage, json_path = storage_factory.get_storage_for_file(asset_uri) + item_dict = storage.read_json(json_path) + + item_dict = cls.base_updates(item_dict) + if item_dict is None: + return [] + + for asset_key, asset in item_dict["assets"].items(): + # standardize the shape property + if "vgp:shape" in asset: + assert "resolution" in asset + shape = asset.pop("vgp:shape") + resolution = asset.pop("resolution") + + latitude = next((d["latitude"] for d in shape if "latitude" in d)) + longitude = next((d["longitude"] for d in shape if "longitude" in d)) + # Use [row, column] order to align with the ordering + # provided in the netcdf descriptions and the order used by + # xarray, numpy, and rasterio. + asset["s3:shape"] = [latitude, longitude] + + # Reverse the provided resolution order to match the shape order + asset["s3:spatial_resolution"] = resolution[::-1] + + # Add missing descriptions + asset["description"] = ASSET_DESCRIPTIONS[asset_key] + + return [pystac.Item.from_dict(item_dict)] diff --git a/datasets/sentinel-3/sentinel_3/sentinel_3_winding.py b/datasets/sentinel-3/sentinel_3/sentinel_3_winding.py new file mode 100644 index 00000000..b304dcf0 --- /dev/null +++ b/datasets/sentinel-3/sentinel_3/sentinel_3_winding.py @@ -0,0 +1,97 @@ +from itertools import groupby +from typing import List, Optional + + +def crossing_longitude( + coord1: List[float], coord2: List[float], center_lat: float, max_delta_lon: float +) -> float: + # check if we are interpolating across the antimeridian + delta_lon_1 = abs(coord2[0] - coord1[0]) + if delta_lon_1 > max_delta_lon: + delta_lon_2 = 360 - delta_lon_1 + if coord1[0] < 0: + coord2[0] = coord1[0] - delta_lon_2 + else: + coord2[0] = coord1[0] + delta_lon_2 + + # interpolate + crossing_longitude = ((center_lat - coord1[1]) / (coord2[1] - coord1[1])) * ( + coord2[0] - coord1[0] + ) + coord1[0] + + # force interpolated longitude to be in the range [-180, 180] + crossing_longitude = ((crossing_longitude + 180) % 360) - 180 + + return crossing_longitude + + +def ccw_or_cw(lon_crossings: List[List[float]], max_delta_lon: float) -> Optional[str]: + for cross1, cross2 in zip(lon_crossings, lon_crossings[1:]): + delta_lon = cross2[0] - cross1[0] + if delta_lon < max_delta_lon: + if cross1[1] != -cross2[1]: + raise ValueError("Crossings should be in opposite directions") + if cross1[1] == -1: + return "CCW" + else: + return "CW" + return None + + +def get_winding(coords: List[List[float]], max_delta_lon: float) -> Optional[str]: + """Heuristic method for determining the winding for complex Sentinel-3 + 'strip' polygons that self-intersect and overlap and for simple Sentinel-3 + 'chip' polygons that may cross the antimeridian. + + Args: + coords (List[List[float]]): List of coordinates in the polygon. + max_delta_lon (float): This argument serves two purposes: + 1. Longitude crossings (of the center latitude of the polygon) that + are within this distance of each other are considered to be on either + side of polygon interior. + 2. When interpolating a longitude crossing, if the difference in + longitudes between the two points is greater than this value, then + we assume that we are interpolating across the antimeridian. + + --> Recommended values are 120 degrees for strips and chips, and + 300 degrees for the rectangular synergy-v10 and synergy-vg1 products. + """ + # force all longitudes to be in the range [-180, 180] + for i, point in enumerate(coords): + coords[i] = [((point[0] + 180) % 360) - 180, point[1]] + + # duplicate points will cause a divide by zero problem + coords = [c for c, _ in groupby(coords)] + + # get center latitude against which we will check for crossings + lats = [coord[1] for coord in coords] + center_lat = (max(lats) + min(lats)) / 2 + + # find all longitude crossings of the center latitude + lon_crossings = [] + for coord1, coord2 in zip(coords, coords[1:]): + if coord1[1] >= center_lat and coord2[1] < center_lat: + lon_crossings.append( + [crossing_longitude(coord1, coord2, center_lat, max_delta_lon), -1] + ) + elif coord1[1] <= center_lat and coord2[1] > center_lat: + lon_crossings.append( + [crossing_longitude(coord1, coord2, center_lat, max_delta_lon), 1] + ) + if len(lon_crossings) == 0: + raise ValueError("No crossings found") + if len(lon_crossings) % 2 != 0: + raise ValueError("Number of crossings should always be a multiple of 2") + lon_crossings = sorted(lon_crossings, key=lambda x: x[0]) + + # get winding + winding = ccw_or_cw(lon_crossings, max_delta_lon) + if winding is None: + # we could have an antimeridian crossing + for crossing in lon_crossings: + if crossing[0] < 0: + crossing[0] += 360 + lon_crossings = sorted(lon_crossings, key=lambda x: x[0]) + winding = ccw_or_cw(lon_crossings, max_delta_lon) + + return winding diff --git a/datasets/sentinel-3/tests/test_sentinel_3.py b/datasets/sentinel-3/tests/test_sentinel_3.py new file mode 100644 index 00000000..90701368 --- /dev/null +++ b/datasets/sentinel-3/tests/test_sentinel_3.py @@ -0,0 +1,101 @@ +# sentinel_3 might not be on your path. Run with +# PYTHONPATH=datasets/sentinel-3 python -m pytest datasets/sentinel-3/tests/ +from sentinel_3 import sentinel_3_olci_lfr_l2_netcdf, sentinel_3_olci_wfr_l2_netcdf +from pctasks.core.storage import StorageFactory + + +S3_KEYS = { + "s3:saline_water", + "s3:coastal", + "s3:fresh_inland_water", + "s3:tidal_region", + "s3:land", + "s3:cosmetic", + "s3:duplicated", + "s3:saturated", + "s3:dubious_samples", + "s3:invalid", +} + + +def test_olci_lfr(): + c = sentinel_3_olci_lfr_l2_netcdf.Collection() + asset_uri = "blob://sentinel3euwest/sentinel-3-stac/OLCI/OL_2_LFR___/2023/04/01/S3A_OL_2_LFR_20230401T004527_20230401T004655_0088_097_145_1440.json" # noqa: E501 + storage_factory = StorageFactory() + [item] = c.create_item(asset_uri, storage_factory) + item.validate() + + assert item.id == "S3A_OL_2_LFR_20230401T004527_20230401T004655_0088_097_145_1440" + assert item.properties["s3:processing_timeliness"] == "NT" + assert item.properties["start_datetime"] == "2023-04-01T00:45:26.790564Z" + assert item.properties["s3:product_type"] == "OL_2_LFR___" + assert item.properties["s3:product_name"] == "olci-lfr" + assert set(item.assets) == { + "geo-coordinates", + "gifapar", + "instrument-data", + "iwv", + "lqsf", + "otci", + "rc-gifapar", + "safe-manifest", + "tie-geo-coordinates", + "tie-geometries", + "tie-meteo", + "time-coordinates", + } + + assert S3_KEYS <= set(item.properties.keys()) + + +def test_olci_wfr(): + c = sentinel_3_olci_wfr_l2_netcdf.Collection() + asset_uri = "blob://sentinel3euwest/sentinel-3-stac/OLCI/OL_2_WFR___/2023/01/01/S3A_OL_2_WFR_20230101T000030_20230101T000330_0179_094_016_2880.json" # noqa: E501 + storage_factory = StorageFactory() + [item] = c.create_item(asset_uri, storage_factory) + item.validate() + + assert item.id == "S3A_OL_2_WFR_20230101T000030_20230101T000330_0179_094_016_2880" + assert item.properties["s3:processing_timeliness"] == "NT" + assert item.properties["start_datetime"] == "2023-01-01T00:00:29.538087Z" + assert item.properties["s3:product_type"] == "OL_2_WFR___" + assert item.properties["s3:product_name"] == "olci-wfr" + + assert set(item.assets) == { + "browse-jpg", + "chl-nn", + "chl-oc4me", + "eop-metadata", + "geo-coordinates", + "instrument-data", + "iop-nn", + "iwv", + "oa01-reflectance", + "oa02-reflectance", + "oa03-reflectance", + "oa04-reflectance", + "oa05-reflectance", + "oa06-reflectance", + "oa07-reflectance", + "oa08-reflectance", + "oa09-reflectance", + "oa10-reflectance", + "oa11-reflectance", + "oa12-reflectance", + "oa16-reflectance", + "oa17-reflectance", + "oa18-reflectance", + "oa21-reflectance", + "par", + "safe-manifest", + "tie-geo-coordinates", + "tie-geometries", + "tie-meteo", + "time-coordinates", + "trsp", + "tsm-nn", + "w-aer", + "wqsf", + } + + assert S3_KEYS <= set(item.properties.keys()) diff --git a/datasets/sentinel-3/update.yaml b/datasets/sentinel-3/update.yaml new file mode 100644 index 00000000..a68216aa --- /dev/null +++ b/datasets/sentinel-3/update.yaml @@ -0,0 +1,184 @@ +id: sentinel-3 +image: ${{ args.registry }}/pctasks-sentinel-3:2023.5.1.0 + +args: + - registry + - since + +code: + src: ${{ local.path(./sentinel_3) }} + +environment: + AZURE_TENANT_ID: ${{ secrets.task-tenant-id }} + AZURE_CLIENT_ID: ${{ secrets.task-client-id }} + AZURE_CLIENT_SECRET: ${{ secrets.task-client-secret }} + +collections: + - id: sentinel-3-olci-lfr-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-olci-lfr-l2-netcdf/) }} + class: sentinel_3.sentinel_3_olci_lfr_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + # create-chunks took ~8 minutes. Consider splitting by year. + chunks: + options: + name_starts_with: OLCI/OL_2_LFR___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-olci-lfr-l2-netcdf + + - id: sentinel-3-olci-wfr-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-olci-wfr-l2-netcdf/) }} + class: sentinel_3.sentinel_3_olci_wfr_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: OLCI/OL_2_WFR___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-olci-wfr-l2-netcdf + + - id: sentinel-3-synergy-aod-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-synergy-aod-l2-netcdf) }} + class: sentinel_3.sentinel_3_synergy_aod_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SYNERGY/SY_2_AOD___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-synergy-aod-l2-netcdf + + - id: sentinel-3-synergy-syn-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-synergy-syn-l2-netcdf) }} + class: sentinel_3.sentinel_3_synergy_syn_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SYNERGY/SY_2_SYN___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-synergy-syn-l2-netcdf + + - id: sentinel-3-synergy-v10-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-synergy-v10-l2-netcdf) }} + class: sentinel_3.sentinel_3_synergy_v10_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SYNERGY/SY_2_V10___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-synergy-v10-l2-netcdf + + - id: sentinel-3-synergy-vg1-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-synergy-vg1-l2-netcdf) }} + class: sentinel_3.sentinel_3_synergy_vg1_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SYNERGY/SY_2_VG1___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-synergy-vg1-l2-netcdf + + - id: sentinel-3-synergy-vgp-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-synergy-vgp-l2-netcdf) }} + class: sentinel_3.sentinel_3_synergy_vgp_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SYNERGY/SY_2_VGP___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-synergy-vgp-l2-netcdf + + - id: sentinel-3-sral-lan-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-sral-lan-l2-netcdf) }} + class: sentinel_3.sentinel_3_sral_lan_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SRAL/SR_2_LAN___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-sral-lan-l2-netcdf + + - id: sentinel-3-sral-wat-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-sral-wat-l2-netcdf) }} + class: sentinel_3.sentinel_3_sral_wat_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SRAL/SR_2_WAT___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-sral-wat-l2-netcdf + + - id: sentinel-3-slstr-frp-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-slstr-frp-l2-netcdf) }} + class: sentinel_3.sentinel_3_slstr_frp_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SLSTR/SL_2_FRP___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-slstr-frp-l2-netcdf + + - id: sentinel-3-slstr-lst-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-slstr-lst-l2-netcdf) }} + class: sentinel_3.sentinel_3_slstr_lst_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SLSTR/SL_2_LST___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-slstr-lst-l2-netcdf + + - id: sentinel-3-slstr-wst-l2-netcdf + template: ${{ local.path(./collection/sentinel-3-slstr-wst-l2-netcdf) }} + class: sentinel_3.sentinel_3_slstr_wst_l2_netcdf:Collection + asset_storage: + - uri: blob://sentinel3euwest/sentinel-3-stac/ + token: ${{ pc.get_token(sentinel3euwest, sentinel-3-stac) }} + chunks: + options: + name_starts_with: SLSTR/SL_2_WST___/ + extensions: [.json] + chunk_length: 5000 + chunk_storage: + uri: blob://sentinel3euwest/sentinel-3-etl-data/pctasks-chunks/sentinel-3-slstr-wst-l2-netcdf \ No newline at end of file