Skip to main content

EuroFlood

CI codecov PyPI docs Python License: MIT DOI Ruff

Query Europe's observed satellite flood-depth maps by place and time: lightweight, cloud-native, pip-installable.

EuroFlood: flood-recurrence map of Zutphen on the river IJssel, over a grayscale basemap

Flood-recurrence over Zutphen (river IJssel): how often each ~90 m pixel flooded across a decade, straight from the index.

EuroFlood is a data-access tool for the JRC / Copernicus CEMS-EFAS Satellite-Derived Flood Depth Maps for Europe: ~3,610 observed, Sentinel-1-derived flood-depth maps across Europe, 2015–2025. The source is published only as an un-indexed bulk FTP archive; EuroFlood turns it into a queryable index so you can discover which flood events touched a region (and when) and extract only the depth rasters you actually need.

It follows a Discover → Extract model:

  • Discover: floods("Zutphen, Netherlands") streams a compact index (a Cloud-Optimized GeoTIFF read a window at a time via /vsicurl, plus a small sorted GeoParquet dictionary cached on first use) and returns a GeoDataFrame of matching flood events, transferring a few MB, never the whole archive.
  • Extract: .download("out/") fetches and crops only the source depth GeoTIFFs for the events you selected.

It also exposes the global CEMS-GLOFAS modelled flood-hazard maps via hazard().

Install

pip install euroflood

Quick start

import euroflood as ef

# Discover observed flood events (place name, bbox, point+radius, or a shapefile)
cat = ef.floods("Zutphen, Netherlands")    # -> a GeoDataFrame, one row per event
cat = ef.floods(bbox=(6.14, 52.09, 6.27, 52.17), start=2024, end=2024)

# Extract: download + crop the depth rasters for the selected events
cat[cat["date"] >= "2024-01-01"].download("out/")

# Global modelled hazard (CEMS-GLOFAS return-period depth)
ef.hazard("Zutphen, Netherlands", return_period=100).download("hazard/")

Or from the command line:

euroflood floods "Zutphen, Netherlands"
euroflood hazard "Zutphen, Netherlands" -r 100 --download --out hazard/

New to EuroFlood? Work through the runnable tutorials: Quickstart → Discover & filter → Visualize → Download & measure → Hazard.

Visualize (optional [viz] extra)

pip install "euroflood[viz]" adds plotting: flood-recurrence and per-event footprints straight from the index (no download), plus the downloaded depth maps:

cat = ef.floods("Zutphen, Netherlands")
cat.plot()                                 # flood-recurrence heatmap (shown at the top)
cat.footprints()                           # a GeoDataFrame of each event's extent (+ extent_km2)
cat.explore()                              # interactive map with per-region hover tooltips
cat.head(3).download().plot(depth=True)    # fetch + render the actual depth rasters

A decade of flooding at Zutphen: per-cell recurrence, per-event depth, and observed depths on the modelled return-period curve

A decade at Zutphen: per-cell recurrence, per-event depth, and observed depths against the modelled CEMS-GLOFAS return-period curve (see the case study).

See the Visualize tutorial.

How the data is served

  • Zero-config (default): the published index is read remotely: the COG streams via /vsicurl and the ~19 MB dictionary + events table are cached locally on first use (SHA-256-verified). Set EUROFLOOD_INDEX_MODE=local to only ever use a local copy.
  • Offline / HPC: euroflood mirror all --bbox <…> -r 100 stages a region's catalogue, flood depth maps, and hazard tiles into the cache (checksum-ledgered; euroflood verify all --deep gates readiness); then EUROFLOOD_OFFLINE=1 runs floods()/hazard() fully offline. Mirror layers independently with mirror index|floods|hazard.
  • Build it yourself: producers can rebuild the index from the source archive (euroflood fetch-sources → ingest → build-index); see the HPC runbook.

Place names resolve online-first (OpenStreetMap Nominatim, falling back to an offline Eurostat NUTS dataset); set EUROFLOOD_GEOCODER_BACKEND=local to stay fully offline.

Documentation

Full docs: https://cisgroup.github.io/euroflood/

Data source, attribution & license

EuroFlood code is licensed under the MIT License.

The index and the underlying flood-depth maps are derived from the JRC / Copernicus CEMS-EFAS Satellite-Derived Flood Depth Maps for Europe and are licensed CC-BY-4.0.

For how to cite EuroFlood (the software, the index dataset, the source data, and the paper reproduction package), see Citing EuroFlood.

Developed at Princeton University (Complex Infrastructure Systems Group).


This is the public mirror of EuroFlood. Development happens in a separate private repository; each release here is a clean snapshot. Issues and pull requests are welcome — PRs are triaged and applied upstream.

Metadata

Release files for euroflood 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for euroflood 0.3.0
File Size Uploaded
euroflood-0.3.0.tar.gz 3.6 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for euroflood 0.3.0
File Interpreter ABI Platform
euroflood-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 4.0 MB

Release files / euroflood-0.3.0.tar.gz

Download URL euroflood-0.3.0.tar.gz
Size 3.6 MB
Tags Source
SHA-256 checksum
How to use checksums
d474c3f4b22e0c2fce9b6ac09b67b2a38db761bfd62b41b1c04d9fb7cf3a908a
BLAKE2b-256 checksum
How to use checksums
5602c1020fd17536a38d75653dbc1b7eade937dc244db9953e3a13a7a88bf978
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.

Transparency log

Release files / euroflood-0.3.0-py3-none-any.whl

Download URL euroflood-0.3.0-py3-none-any.whl
Size 423.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
41dc0f1b40b2b620a6dcf30790d2a593993bc4ea2e32ddcbbcb93308f98a44da
BLAKE2b-256 checksum
How to use checksums
951a9dbcb655472649447eb1ad980b49aad383ae1a1ee2f44358f2fa12724b1a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.

Transparency log

Release history Release notifications | RSS feed

0.3.1

2 release files

This release

0.3.0 This release

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page