Get started
Install EuroFlood, run your first flood query, and download a depth map, end to end, against the published index (no data build required). Prefer runnable notebooks? The Tutorials cover all of this in depth.
Install
EuroFlood works out of the box: the published index is read remotely and cached on first use (~14 MB of tables), so there is nothing to download or configure first.
Your first query
floods(...) returns a FloodFrame: a geopandas.GeoDataFrame, one row per historic
flood event. It's cheap: it streams a small window of the index and downloads no rasters.
That's the discover step of EuroFlood's discover → extract model; you extract depth
rasters only for the events you keep.
Because it is a GeoDataFrame, filter and plot it as usual, then .download() the depth
rasters for the events you keep and .stats() them (no network after the download):
recent = cat[cat["date"] >= "2021-01-01"] # any pandas / geopandas operation
recent.plot() # recurrence heatmap, still no download
dl = recent.download("out/") # fetch + crop only these events' rasters
dl.stats() # max/mean/p95 depth (m), area (km²), volume
Ways to specify a region
A place name is geocoded; a bbox, point + radius_m, or shapefile skip geocoding.
Administrative boundaries can be awkward (they often follow a river), so shape="bbox" /
"hull" gives a cleaner ROI, and buffer_m grows it:
ef.floods("Zutphen, Netherlands", buffer_m=1000)
ef.floods("Zutphen, Netherlands", shape="bbox") # a clean bounding-box ROI
ef.floods(bbox=(6.14, 52.09, 6.27, 52.17))
ef.floods(point=(52.14, 6.20), radius_m=6000) # point is (lat, lon)
Modelled hazard
The same API queries the global CEMS-GLOFAS flood-hazard maps by return period (seven are available: 10, 20, 50, 75, 100, 200, and 500 years):
Offline & HPC
Everything above streams data on demand. For a fully offline / cluster node, mirror the layers you need once (on a machine with internet), then flip the node offline:
# On a networked login node, stage a study region for offline use:
euroflood mirror all --bbox 6.1 52.0 6.3 52.2 -r 100 # index + flood depths + hazard tiles
euroflood verify all --bbox 6.1 52.0 6.3 52.2 -r 100 --deep # readiness gate (checksums)
# On the offline compute node, one switch forces everything cache-only:
export EUROFLOOD_OFFLINE=1
euroflood floods --bbox 6.1 52.0 6.3 52.2 --download --out out/
euroflood hazard --bbox 6.1 52.0 6.3 52.2 -r 100 --download --out out/
mirror stages any layer independently: mirror index (the flood catalogue, so
floods() queries run offline), mirror floods --bbox … (the flood depth maps
for a region), mirror hazard --bbox … (GLOFAS hazard tiles for a region), or
mirror all for everything. verify reports what is present / missing / corrupt (--deep
re-checks sha256). EUROFLOOD_OFFLINE=1 (or euroflood.offline() in Python) forces both
collections cache-only and the geocoder to the offline NUTS backend; a missing tile then
raises a clear error naming the exact mirror command to run, never a silent partial
result. In Python: ef.mirror("hazard", bbox=(6.1, 52.0, 6.3, 52.2), return_period=100).
Next steps
-
Tutorials
The guided path: from a first query to hazard maps and quantitative analysis.
-
Case studies
Real-world flood analyses on genuine events across Europe, from Storm Boris to the Valencia DANA.
-
Concepts
How the index works: the one page that makes everything else click.
-
API reference
Every public function, class, and
EUROFLOOD_*setting.