Infrastructure exposure: the Shannon callows¶
A worked example with the euroflood package,
reproducing Section S1.3 (Fig. S3) of the EuroFlood paper. It joins a decade of observed flood
footprints to a user-supplied road and settlement network, turning the archive into an
observation-based infrastructure screen: instead of a yes/no modelled hazard flag, every
road segment and settlement gets a recurrence count, how often it was actually seen flooded.
The place¶
The Shannon callows are the broad riverine floodplain meadows along the middle River Shannon in the Irish midlands. They flood extensively and persistently in most winters. Because the flooding is broad and long-lived, Sentinel-1 observes it comparatively well, which makes the reach an ideal test of an observation-based alternative to modelled hazard screening. This is explicitly a screening, not a routing or accessibility model: no road is claimed severed and no settlement isolated.
The archive and the index¶
The observations come from the CEMS-EFAS satellite-derived flood-depth maps served through
euroflood's inverted raster index: each approximately 90 m cell stores the identifiers of
every event that inundated it, so footprints and recurrence come from a windowed read with no
rasters downloaded. Because a FloodFrame is a geopandas.GeoDataFrame, its footprints combine
directly with an external road and settlement network through ordinary spatial operations.
Runs against
euroflood >= 0.2.0with thevizextra, querying the published index (needs network on first use, or a locally mirrored index).
import geopandas as gpd
import matplotlib.pyplot as plt
import numpy as np
from IPython.display import Markdown
import euroflood as ef
import _support as S
IRISH_TM = "EPSG:2157" # Irish Transverse Mercator, a metric CRS for lengths and areas
1. Discover¶
One query over the callows window returns every archived event. Index-only, no download.
cat = ef.floods(bbox=(-8.6, 52.7, -7.9, 53.5))
print(f"{len(cat)} events, {str(cat['date'].min())[:10]} to {str(cat['date'].max())[:10]}")
cat.head()
54 events, 2015-02-23 to 2024-11-18
| collection | event_id | date | year | end_date | cluster_id | filename | download_url | area_km2 | geometry | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | historic | 3064702723 | 2015-12-28 | 2016 | 2016-01-25 | 294 | WD_MERGE_2015-12-28---2016-01-25_duration_28_d... | https://jeodpp.jrc.ec.europa.eu/ftp/jrc-openda... | 141.313 | POLYGON ((-7.9 52.7, -7.9 53.5, -8.6 53.5, -8.... |
| 1 | historic | 117792470 | 2016-12-26 | 2016 | 2017-01-02 | 288 | WD_MERGE_2016-12-26---2017-01-02_duration_7_da... | https://jeodpp.jrc.ec.europa.eu/ftp/jrc-openda... | 1.467 | POLYGON ((-7.9 52.7, -7.9 53.5, -8.6 53.5, -8.... |
| 2 | historic | 4049036842 | 2019-03-04 | 2019 | 2019-04-08 | 333 | WD_MERGE_2019-03-04---2019-04-08_duration_28_d... | https://jeodpp.jrc.ec.europa.eu/ftp/jrc-openda... | 88.898 | POLYGON ((-7.9 52.7, -7.9 53.5, -8.6 53.5, -8.... |
| 3 | historic | 3040053496 | 2016-05-02 | 2016 | 2016-05-09 | 090 | WD_MERGE_2016-05-02---2016-05-09_duration_7_da... | https://jeodpp.jrc.ec.europa.eu/ftp/jrc-openda... | 0.274 | POLYGON ((-7.9 52.7, -7.9 53.5, -8.6 53.5, -8.... |
| 4 | historic | 956982064 | 2020-11-09 | 2020 | 2021-01-04 | 393 | WD_MERGE_2020-11-09---2021-01-04_duration_56_d... | https://jeodpp.jrc.ec.europa.eu/ftp/jrc-openda... | 46.865 | POLYGON ((-7.9 52.7, -7.9 53.5, -8.6 53.5, -8.... |
2. Recurrence and the ever-flooded footprint¶
cat.explore(footprints=True) draws each archived event's footprint on an interactive grey
basemap. Pan and zoom to inspect the reach. Per-cell recurrence (how often each cell
flooded) is quantified just below, and we union the 54 event footprints into a single
ever-flooded mask, the ground seen wet at least once.
cat.explore(footprints=True, tiles="grayscale")