Skip to main content

Python bridge between Copernicus Data Stores (C3S, CAMS, CEMS) and mainstream GIS operations

Project description

GeoBridge

Python library that bridges Copernicus Data Stores into mainstream GIS workflows.

GeoBridge removes the technical friction GIS users face when working with Copernicus climate, atmosphere, and emergency data. It resolves dataset discovery, authentication, and access-method differences into a single ergonomic API that produces analysis-ready Cloud Optimized GeoTIFFs.

The library is the foundation for the project's QGIS plugin.


What it does

  • Discovery. gb.discover() lists every dataset in the Copernicus catalogue with filters for keyword, service, variable, bounding box, and time range — all from a locally bundled snapshot, no network needed.
  • Authentication. A single gb.authenticate() call handles credential resolution for the new ARCO bearer-token model.
  • Extraction — ARCO path. gb.zarr_to_geotiff() pulls a spatial / temporal subset from the ARCO Zarr Data Lake and writes it as a Cloud Optimized GeoTIFF, ready for QGIS or ArcGIS.
  • Extraction — CDS API path. gb.cds_to_geotiff() submits a download job through the standard CDS API for datasets that are not yet in the ARCO lake, converts the result to GeoTIFF, and streams it to disk.
  • WMTS. gb.wmts_layer() returns a ready-to-use WMTS layer object for live tile streaming inside QGIS or Leaflet.
  • Form schema. gb.fetch_form() and gb.fetch_constraints() retrieve the server-side parameter form for any dataset so your UI can build validated request widgets. gb.valid_variables_for_product_type() filters the variable list to what the selected product type actually supports.
  • Styling. gb.to_qgis_style() generate calibrated colour ramps for known Copernicus variables.
  • Fusion. gb.fuse() co-registers multiple layers onto a common grid for joint analysis (e.g. heat + air quality).
  • Semantics. gb.semantic_search() resolves user themes like "urban heat island" or "wildfire risk" into concrete dataset and workflow recommendations. gb.list_themes() and gb.list_use_cases() enumerate the built-in vocabulary.

How to run it

Prerequisites

  • Python 3.10 or newer. GeoBridge does not support older Python.
  • A free Copernicus account. Register at https://cds.climate.copernicus.eu and copy your personal access token from your profile page.
  • macOS, Linux, or Windows with WSL2. Native Windows may work but is not tested.

Step 1 — Create a clean environment

A separate environment avoids dependency conflicts with anything else you have installed. With Conda (recommended because some geospatial libraries need compiled C bindings that pip alone struggles with):

conda create -n geobridge python=3.11 -y
conda activate geobridge

Or with venv:

python3.11 -m venv ~/.venvs/geobridge
source ~/.venvs/geobridge/bin/activate

Step 2 — Install the geospatial stack

If you used Conda, install the heavy native dependencies through conda-forge first:

conda install -c conda-forge rasterio rioxarray zarr fsspec httpio dask -y

This avoids the most common build failures (GDAL, PROJ, libtiff).

Step 3 — Install GeoBridge

GeoBridge is published on PyPI: https://pypi.org/project/geobridge/

pip install "geobridge[full]"

The [full] extra adds everything: xarray/rasterio/zarr for zarr_to_geotiff(), plus OWSLib (WMTS) and cfgrib (GRIB support). Use geobridge[zarr] instead if you only need the ARCO extraction path, or plain pip install geobridge for the lightweight core (discover(), wmts_layer(), to_qgis_style(), and the semantic search functions all work with only pyyaml, the sole hard runtime dependency — no extra needed).

If you're contributing to GeoBridge itself, install from a clone in editable mode instead so your local edits take effect immediately:

git clone https://github.com/ECMWFCode4Earth/GeoBridge
cd geobridge
pip install -e ".[dev]"

Step 4 — Configure your credentials

Create ~/.cdsapirc with your personal access token:

key: YOUR-CDS-API-KEY-HERE

Then protect the file so other users on the machine cannot read it:

chmod 600 ~/.cdsapirc

Alternatively, export your key as an environment variable instead of writing it to a file:

export CDS_API_KEY=YOUR-CDS-API-KEY-HERE

Repository layout

geobridge/                              ← repository root
├── README.md                           ← this file
├── LICENSE                             ← MIT
├── pyproject.toml                      ← installable Python package
├── smoke_test.py                       ← offline smoke test (9 stages)
│
├── geobridge/                          ← Python package
│   ├── __init__.py                     ← public API exports
│   ├── auth.py                         ← bearer-token authentication
│   ├── modules/
│   │   ├── discover.py                 ← catalogue discovery
│   │   ├── extract.py                  ← ARCO Zarr → GeoTIFF
│   │   ├── cds_download.py             ← CDS API → GeoTIFF (non-ARCO datasets)
│   │   ├── wmts.py                     ← WMTS layer
│   │   ├── form.py                     ← dataset form schema & constraints
│   │   ├── style.py                    ← QGIS QML export
│   │   └── fuse.py                     ← multi-layer co-registration
│   └── semantic/
│       ├── engine.py                   ← rule-based query resolver
│       ├── vocabulary.yaml             ← themes and use cases
│       ├── arco_overrides.yaml         ← Zarr URLs and variable aliases
│       ├── arco_snapshot.yaml          ← ARCO catalogue snapshot (generated)
│       └── cds_snapshot.yaml           ← STAC catalogue snapshot (generated)
│
├── scripts/
│   ├── refresh_catalogue.py            ← maintainer-side CDS STAC refresh
│   └── refresh_arco_catalogue.py       ← maintainer-side ARCO snapshot refresh
│
├── examples/
│   ├── athens_urban_heat.py            ← end-to-end ERA5 demo
│   ├── example_utci.py                 ← UTCI thermal comfort demo
│   ├── examplepm2.5.py                 ← CAMS PM2.5 air quality demo
│   └── ...                             ← additional live-test scripts
│
└── tests/
    ├── test_auth.py
    └── unit/                           ← pytest unit tests
        ├── test_discover.py
        ├── test_auth.py
        ├── test_extract.py
        ├── test_style.py
        ├── test_semantic.py
        └── test_wmts.py

Maintainer workflow

Refreshing catalogue snapshots

The cds_snapshot.yaml and arco_snapshot.yaml files are regenerated periodically from the live ECMWF catalogues. End users never run these scripts; they get the snapshots bundled with whatever GeoBridge version they install.

To refresh the CDS STAC snapshot (maintainers only):

python scripts/refresh_catalogue.py --limit 5 --output /tmp/test.yaml   # quick test
python scripts/refresh_catalogue.py                                      # full run
git diff geobridge/semantic/cds_snapshot.yaml
git add geobridge/semantic/cds_snapshot.yaml
git commit -m "Refresh CDS catalogue snapshot"

To refresh the ARCO snapshot:

python scripts/refresh_arco_catalogue.py
git add geobridge/semantic/arco_snapshot.yaml
git commit -m "Refresh ARCO catalogue snapshot"

Adding a new ARCO dataset

  1. Visit the dataset page on https://cds.climate.copernicus.eu and open the "Analysis ready data" tab.

  2. Copy the Zarr URLs (typically there are two: time_chunked and geo_chunked).

  3. Verify each URL responds with a 200 status:

    curl -I -H "Authorization: Bearer $CDS_API_KEY" "https://.../.zmetadata"
    
  4. Add an entry to geobridge/semantic/arco_overrides.yaml following the schema of existing entries.

  5. Add the variable aliases (CDS long-form name → ARCO short-form name) by inspecting the Zarr store with xarray.open_zarr() and listing ds.data_vars.


License

MIT. See LICENSE.


Acknowledgements

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

geobridge-0.1.6.tar.gz (254.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

geobridge-0.1.6-py3-none-any.whl (246.2 kB view details)

Uploaded Python 3

File details

Details for the file geobridge-0.1.6.tar.gz.

File metadata

  • Download URL: geobridge-0.1.6.tar.gz
  • Upload date:
  • Size: 254.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for geobridge-0.1.6.tar.gz
Algorithm Hash digest
SHA256 72de23f979fff16e56404cdc91bfe9e417ef17b6cfbee3d70652c8791d20aa75
MD5 ff9cfd5996ab52224d345f6d4db31cd1
BLAKE2b-256 373ede11fe8ce7ba5f5bd0fdb06a0b80840ff5dce2656f9283f4dd6cb3682afd

See more details on using hashes here.

File details

Details for the file geobridge-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: geobridge-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 246.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for geobridge-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 0ec070a62df893be90689f9cf9dc286e1c1c4dcc3242bf3b1c1219acfca9b858
MD5 d5cf1675bcd8aa7fbaf51fbaf6856c4a
BLAKE2b-256 c40d004eebd3ffecde17385efd4cc8cccc2d00896a884ed373cd1405116d48dd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page