Getting Started#
earthkit-data-meteoswiss-opendata provides earthkit-data source plugins for accessing MeteoSwiss numerical weather prediction data through the MeteoSwiss Open Data STAC API.
Installation#
Install the released package with pip:
$ pip install earthkit-data-meteoswiss-opendata
With Poetry:
$ poetry add earthkit-data-meteoswiss-opendata
Installing the package also installs earthkit-data and automatically
registers the meteoswiss-opendata and
meteoswiss-opendata-constants source plugins. No additional plugin
configuration is required.
Using the Library#
Load the latest deterministic ICON-CH2-EPS forecast +0h, +1h & +2h for total precipitation:
import datetime as dt
import earthkit.data as ekd
forecast = ekd.from_source(
"meteoswiss-opendata",
collection="ogd-forecasting-icon-ch2",
variable="TOT_PREC",
perturbed=False,
ref_time="latest",
lead_time=[
dt.timedelta(hours=0),
dt.timedelta(hours=1),
dt.timedelta(hours=2),
],
)
dataset = forecast.to_xarray(time_dims=["forecast_reference_time", "step"], squeeze=False)
print(dataset)
For ref_time="latest", the plugin selects the newest forecast run that
contains all requested lead times.
An exact reference time can be provided as a timezone-aware
datetime.datetime:
forecast = ekd.from_source(
"meteoswiss-opendata",
collection="ogd-forecasting-icon-ch2",
variable="TOT_PREC",
perturbed=False,
ref_time=dt.datetime(
2026,
7,
20,
6,
tzinfo=dt.timezone.utc,
),
lead_time=dt.timedelta(hours=1),
)
ISO 8601 strings such as "2026-07-20T06:00:00Z" and "PT1H" are also
accepted.
Parameters#
collectionMeteoSwiss Open Data collection, for example
ogd-forecasting-icon-ch2.variableForecast variable name, for example
TOT_PREC.perturbedFalsefor deterministic data orTruefor perturbed data.ref_time"latest", a timezone-awaredatetime.datetime, an ISO 8601 datetime string, or an ISO 8601 datetime interval.lead_timeA
datetime.timedelta, an ISO 8601 duration string, or a list of either. Examples includedatetime.timedelta(hours=1),"PT1H", and["PT0H", "PT1H", "PT2H"].
Model Constants#
Load the horizontal or vertical constants associated with a model collection:
horizontal = ekd.from_source(
"meteoswiss-opendata-constants",
collection="ogd-forecasting-icon-ch2",
asset="horizontal",
)
vertical = ekd.from_source(
"meteoswiss-opendata-constants",
collection="ogd-forecasting-icon-ch2",
asset="vertical",
)
The asset parameter accepts "horizontal" or "vertical". The
returned data can be handled with the standard earthkit methods e.g. to_xarray() or to_target(), for example:
horizontal.to_target(
"file",
"horizontal_constants_icon-ch2-eps.grib2",
)
Development Setup with Poetry#
Building the Project#
$ cd earthkit-data-meteoswiss-opendata
$ poetry install
Run Tests#
Run the offline unit tests:
$ poetry run pytest
Run the optional live integration test:
$ RUN_INTEGRATION=1 poetry run pytest -m integration
Run Quality Tools#
$ poetry run pylint earthkit_data_meteoswiss_opendata
$ poetry run mypy earthkit_data_meteoswiss_opendata
$ poetry run ruff format --check
$ poetry run ruff check
Generate Documentation#
$ poetry run sphinx-build doc doc/_build
Then open doc/_build/index.html.
Build Wheels#
$ poetry build
Release the Project#
The project follows the GitOps concept: releases are triggered whenever a Git tag is created.
The tag must follow Semantic Versioning and PEP 440. Otherwise, the release task will fail.
Follow these steps to create a release:
Update
CHANGELOG.rstwith the release information.Update
doc/_static/switcher_config.jsonwith the new documentation URL.Create a new release and matching tag in the GitHub project.