- Name: noaa-cdr
- Package:
stactools.noaa_cdr - stactools-noaa-cdr on PyPI
- Owner: @gadomski
- Dataset homepage
- STAC extensions used:
- Extra fields:
noaa_cdr:interval: The time resolution (derived from thetime_coverage_resolutionfield) of the dataset. Useful for filtering multi-temporal-resolution CDRs, such as ocean heat content.noaa_cdr:max_depth: The maximum depth of the measurements. Only used forocean-heat-content.
- Browse the example in human-readable form
- Collections
- Items
Each Climate Data Record can have multiple subdatasets, which themselves can be organized by time intervals and other attributes. We have chosen to create one STAC collection for each CDR, and to organize items in that collection by time interval and time window. Subdatasets are included as COG assets.
Because each CDR has a different data layout in its NetCDFs, the mapping from
NetCDF(s) to STAC Collections and Items varies from CDR to CDR.
The diagram below is an abstract representation of those layouts. Note that the
class names do not directly correspond to code entities; this is strictly a
conceptual diagram. Note too the 8-1 relationship between
SeaSurfaceTemperatureWHOIItem and SeaSurfaceTemperatureWHOINetCDF; each
SST-WHOI NetCDF contains eight timesteps, and so breaks apart into eight STAC
items per NetCDF.
classDiagram
direction LR
class OceanHeatContent
<<Collection>> OceanHeatContent
class SeaIceConcentration
<<Collection>> SeaIceConcentration
class SeaSurfaceTemperatureOptimumInterpolation
<<Collection>> SeaSurfaceTemperatureOptimumInterpolation
class SeaSurfaceTemperatureWHOI
<<Collection>> SeaSurfaceTemperatureWHOI
OceanHeatContent "1" --> "n" OceanHeatContentNetCDF
OceanHeatContent "1" --> "0..n" OceanHeatContentItem
SeaIceConcentration "1" --> "0..n" SeaIceConcentrationItem
SeaIceConcentrationItem "1" --> "1" SeaIceConcentrationNetCDF
SeaSurfaceTemperatureOptimumInterpolation "1" --> "0..n" SeaSurfaceTemperatureOptimumInterpolationItem
SeaSurfaceTemperatureOptimumInterpolationItem "1" --> "1" SeaSurfaceTemperatureOptimumInterpolationNetCDF
SeaSurfaceTemperatureWHOI "1" --> "0..n" SeaSurfaceTemperatureWHOIItem
SeaSurfaceTemperatureWHOIItem "8" --> "1" SeaSurfaceTemperatureWHOINetCDF
pip install stactools-noaa-cdrTo create a collection, e.g. for the Ocean heat content CDR:
stac noaa-cdr ocean-heat-content create-collection examples/ocean-heat-content/collection.jsonTo create COGs and items:
stac noaa-cdr ocean-heat-content create-collection --create-items \
examples/ocean-heat-content/collection.jsonTo only create COGs and items for the latest data (e.g. to create a small example collection):
stac noaa-cdr ocean-heat-content create-collection --create-items --latest-only \
examples/ocean-heat-content/collection.jsonTo create an item for sea-ice-concentration (without COGS):
stac noaa-cdr sea-ice-concentration create-item
https://noaadata.apps.nsidc.org/NOAA/G02202_V4/north/daily/2023/seaice_conc_daily_nh_20230203_f17_v04r00.nc
noaa-cdr-sea-ice-concentration/north/seaice_conc_daily_nh_20230203_f17_v04r00.jsonTo add an item to a catalog:
stac add examples/sea-ice-concentration/north/seaice_conc_daily_20230203_f17_v0400.json
examples/noaa-cdr-sea-ice-concentration/collection.jsonEach CDR has its own flavor of command line interface; use stac noaa-cdr --help to see a list of supported CDRs.
We use pre-commit to check any changes. To set up your development environment:
pip install -e .
pip install -r requirements-dev.txt
pre-commit installTo check all files:
pre-commit run --all-filesTo run the tests:
pytestMany tests are skipped by default because access external data, which makes them slow and a bit flakey. To run these tests:
pytest --external-dataThere are several .json files in the source tree that are used to populate
metadata when creating collections and items.
There are two helper scripts in the scripts/ directory that update these files.
scripts/create_item_assets.py
scripts/extract_netcdf_asset_metadata.py > src/stactools/noaa_cdr/ocean-heat-content/asset-metadata.jsonAdditionally, there is a script to create the examples/ directory:
scripts/create_examples.py