JRC hazards (EFHM + sea-level forecasts) — introduction#
earthlens ships one earthlens.jrc backend for the JRC / Copernicus
Emergency Management Service (CEMS) hazard products. A single class (JRC)
serves every JRC dataset, selected by dataset and dispatched internally on the
catalog row's kind — the same "pick a dataset, the backend routes it" shape as
the ecmwf backend's per-store endpoint:
| Facade key(s) | Product | kind |
Output |
|---|---|---|---|
jrc / efhm / jrc-flood / jrc-flood-hazard / jrc:european-flood-hazard |
European Flood Hazard Map (river-flood depth per return period) | flood_hazard_raster |
list[Path] GeoTIFF |
jrc:sea-level-forecast / jrc-sea-level / jrc:twl-forecast |
Probabilistic Total Water Level (TWL) forecasts (gridded) | sea_level_gridded |
list[Path] GeoTIFF |
jrc:coastal-forecast |
Subseasonal coastal per-country summary | sea_level_coastal |
pandas.DataFrame |
Why the bare jrc key means the flood hazard map
The JRC publishes more than these datasets, and earthlens serves two of the others through their own
backends — ghsl (Global Human Settlement Layer) and inform (INFORM Risk). So jrc names the JRC
hazards backend, whose products are the European Flood Hazard Map and the sea-level forecasts, and
it resolves to the EFHM because that is the flood-hazard product its aliases already served. Reach the
others by their own keys; a qualified key such as jrc:sea-level-forecast picks a topic within this
backend.
For the walkthrough see Usage, the datasets on the Available datasets page, and the rendered API on the Reference page.
The European Flood Hazard Map (EFHM)#
The EFHM is "River flood hazard maps for Europe and the Mediterranean Basin":
each cell is river-flood water depth in metres for a chosen return period
(how rare the flood is — a 1-in-100-year event, etc.). Each return period is one
whole-Europe EPSG:4326 GeoTIFF of ~23 GB uncompressed, so the backend never
reads it whole: it opens the file lazily over GDAL's /vsicurl (HTTP range
requests), reads only the AOI's pixel window through the
pyramids GIS backend, and writes one
GeoTIFF per return period. A small AOI transfers kilobytes, not gigabytes.
from earthlens.core import EarthLens
paths = EarthLens(
data_source="efhm",
lat_lim=[51.8, 52.0],
lon_lim=[4.8, 5.0],
return_periods=[100],
path="efhm_out",
).download()
# -> [Path('efhm_out/efhm_RP100.tif')]
The request axis is return_periods (ints, "100", or "RP100"); the EFHM is
static, so aggregate= is rejected. An AOI outside the Europe / Mediterranean
coverage raises a clear ValueError.
There are two JRC flood-hazard products, and earthlens covers both: the global
map (JRC/CEMS_GLOFAS/FloodHazard/v2_1, ~90 m) is a curated row of the
gee backend; the higher-fidelity European EFHM is
this backend.
The sea-level (Total Water Level) forecasts#
The JRC also produces probabilistic, data-driven sea-level forecasts — storm surge + tide + wave-derived coastal Total Water Level (TWL) — the coastal / storm-surge counterpart to the river-flood EFHM. Two products, both global 0.25° NetCDF-4:
- medium-term — issued twice daily, 15-day horizon.
- subseasonal — issued weekly, ~46-day horizon, with a small global per-country coastal-summary CSV alongside the gridded cube.
A request selects a product, an optional reference_time (default "latest",
which resolves the newest complete forecast cycle), and — for the gridded product
— a bounding box and a field (default TWL75, the 75th-percentile TWL). The
gridded cube is read the same windowed way as the EFHM but through
pyramids.netcdf.NetCDF, and written as one multi-band GeoTIFF (one band per
forecast time step).
from earthlens.core import EarthLens
# gridded medium-term TWL forecast, latest cycle, cropped to the North Sea
paths = EarthLens(
data_source="jrc:sea-level-forecast",
product="medium_term",
lat_lim=[51.0, 53.0],
lon_lim=[3.0, 5.0],
path="twl_out",
).download()
# subseasonal global coastal summary -> a pandas.DataFrame
summary = EarthLens(data_source="jrc:coastal-forecast").download()
The forecasts are read only over the AOI window (/vsicurl), so a small area
transfers little of the 13–38 GB cube. Because a forecast cycle is chosen by
reference_time (not a start/end scan) and carries no reducible time axis,
aggregate= is rejected.
Licence#
Every JRC product here is CC-BY-4.0 (permissive attribution) — no licence warning. Cite the EFHM as Dottori, F., Alfieri, L., Bianchi, A., Skoulikaris, C., Salamon, P. (2020), River flood hazard maps for Europe and the Mediterranean Basin region, JRC / CEMS. The sea-level forecasts follow the group's 2024 methodology paper (full citation + DOI pending confirmation with the producers).