Climate Demo (Lao PDR)

Climate anomaly

Publishes a dataset

Description

Compute an anomaly (observed − climatological normal) and publish it as a new GeoZarr dataset

Loads a published observed collection over a time range and a published climatological normal, computes the anomaly (observed − normal, aligned by day-of-year or month), and publishes the result as a new GeoZarr dataset with the observed t axis preserved.

Use it to derive anomalies from datasets already on the instance — e.g. the observed era5land_temperature_daily against the normal era5land_temperature_daily_normal_1991_2020. The normal must already exist (compute it with the climate_normal workflow, or use an EDH-direct normal data source).

Keep an anomaly dataset current by re-running this workflow over the desired range — recomputing observed − normal is a cheap lazy subtract, so no incremental sync cascade is needed.

If the output_dataset_id has no registered data source, managed save_result auto-registers one (inheriting units/period_type from the observed dataset). Pre-registering a static data source (a dataset template in plugins/rasters/ with sync: {kind: static} and a display block) is recommended for anomalies so you control the diverging colormap centred on zero. No ingestion plugin is required — the data is produced by this workflow.

Zarr output cannot be produced synchronously, so run this as a batch job (POST /jobs, then POST /jobs/{id}/results):

{
  "anomaly": {
    "process_id": "climate_anomaly",
    "arguments": {
      "observed_dataset_id": "era5land_temperature_daily",
      "normal_dataset_id": "era5land_temperature_daily_normal_1991_2020",
      "output_dataset_id": "era5land_temperature_daily_anomaly_1991_2020",
      "variable": "t2m",
      "temporal_extent": ["2024-01-01", "2024-12-31"],
      "method": "absolute"
    },
    "result": true
  }
}

Parameters

Name Type Description
observed_dataset_id
required
string ID of the published observed collection (datetime time axis), e.g. era5land_temperature_daily.
normal_dataset_id
required
string ID of the published climatological normal (with a dayofyear or month ordinal axis).
output_dataset_id
required
string ID of the anomaly dataset to publish. Auto-registered if no static data source exists, taking its units from the computed result (so a relative anomaly registers as '%'); pre-register one to control the diverging display, making sure its units match the method (no ingestion plugin needed).
variable
required
string Variable/band name carried through to the published anomaly dataset.
temporal_extent
required
temporal-interval Observed time range as [start, end] ISO-8601 date strings, e.g. ["2024-01-01", "2024-12-31"].
method
optional, default "absolute"
absolute | relative 'absolute' (observed − normal, default) or 'relative' (percent of normal). A relative anomaly is published with units '%' rather than the observed variable's unit, so a pre-registered output data source must declare '%' to match; publishing into one that declares the observed unit is refused rather than relabelled.

Produces

  • 2m temperature daily anomaly (ERA5-Land, vs 1991–2020 normal)
  • 2m temperature monthly anomaly (ERA5-Land, vs 1991–2020 normal)
  • Precipitation daily anomaly (CHIRPS3, vs 1991–2020 normal)
  • Precipitation daily anomaly (ERA5-Land, vs 1991–2020 normal)
  • Precipitation daily relative anomaly (CHIRPS3, vs 1991–2020 normal)
  • Precipitation daily relative anomaly (ERA5-Land, vs 1991–2020 normal)
  • Precipitation monthly anomaly (CHIRPS3, vs 1991–2020 normal)
  • Precipitation monthly anomaly (ERA5-Land, vs 1991–2020 normal)
  • Precipitation monthly relative anomaly (CHIRPS3, vs 1991–2020 normal)
  • Precipitation monthly relative anomaly (ERA5-Land, vs 1991–2020 normal)

Automation

No automation runs this workflow on this instance.