ERA5-Land#
Description#
ERA5-Land hourly data from 1950 to present are climatic reanalysis data covering all lands.
From source website
ERA5-Land is a reanalysis dataset providing a consistent view of the evolution of land variables over several decades at an enhanced resolution compared to ERA5. ERA5-Land has been produced by replaying the land component of the ECMWF ERA5 climate reanalysis.
Data are distributed by the C3S through the Copernicus Climate Data Store,
which exposes a Python API (cdsapi) used internally by GEOP4TH. A free CDS account
and an API key are required before any download.
Key characteristics:
Temporal coverage: 1950-01-01 to present
Temporal resolution: hourly
Spatial resolution: 0.1° × 0.1° (~9 km)
Spatial coverage: global (lands)
Native CRS: EPSG:4326 (WGS84)
Source: C3S / CDS
GEOP4TH workflows#
ERA5-Land data are accessed through the CDS API and can be:
downloaded with
download_era5_land, which wraps the lower-levelERA5LandDownloaderclass,standardized into CF-compliant netCDF files with
standardize_era5_land,formatted as inputs for specific applications, such as for the CWatM hydrological model with
cwatm_meteo.
The downloader supports flexible area specifications (bounding box, file path, or GeoDataFrame),
partial dates ('2024', '2024-03', '2024-03-15'), variable categories (e.g. 'precipitation')
and predefined profiles (e.g. 'hydrogeology_water_balance').
Existing files in the output directory are detected and reused to avoid redundant downloads.
The standardizer handles:
temporal aggregation (hourly → daily / monthly),
unit corrections (J/m² → W/m² for radiation, sign correction for evaporation fluxes),
optional bias correction (predefined or user-supplied factors, fixed or monthly),
computation of secondary variables (
wind_speed,relative_humidity,ET0,EW0).
CDS API setup#
Before the first download you need a free CDS account and a personal API token. The official reference is the CDS how-to-api guide, the short version:
Create (or log in to) an account at cds.climate.copernicus.eu.
Open your profile page and copy your Personal Access Token (under the API Token section).
Save the token in a credentials file (
~/.cdsapircon Linux/macOS,%USERPROFILE%\.cdsapircon Windows) read bycdsapi. The recommended way is the bundledgeop4th cds-setupCLI, which works identically across operating systems and sets the right file permissions.Interactive prompt (input hidden). Accepts either the bare token, a single
key: <TOKEN>line, or the fullurl:/key:snippet copy-pasted from the profile page:geop4th cds-setupNon-interactive variants:
# Pass the token directly geop4th cds-setup --token <your-personal-access-token> # Or pipe the snippet copied from the profile page geop4th cds-setup < copernicus_snippet.txt # Overwrite an existing file geop4th cds-setup --token <your-personal-access-token> --force
The same command is also reachable as
python -m geop4th.cli cds-setupif thegeop4thconsole script isn’t on yourPATH. Seegeop4th cds-setup --helpfor all flags.If you’d rather edit the file by hand, create
~/.cdsapircwith the snippet displayed on the profile page (equivalent to):url: https://cds.climate.copernicus.eu/api key: <your-personal-access-token>
Then restrict its permissions:
chmod 600 ~/.cdsapirc.Create
%USERPROFILE%\.cdsapirc(e.g.C:\Users\<you>\.cdsapirc) with the same two lines as above.As an alternative to the file, export:
export CDSAPI_URL=https://cds.climate.copernicus.eu/api export CDSAPI_KEY=<your-personal-access-token>
Accept the dataset Terms of Use (one-off, per dataset). Open the ERA5-Land dataset page, scroll to the bottom of the Download tab and click Accept. The first download will fail with a
Required licences not acceptederror otherwise.(Optional) Sanity-check the connection from a shell where
geoenvis active:python -c "import cdsapi; cdsapi.Client(); print('CDS credentials OK')"
Basic example#
import geop4th as geo
# 1. Download (requires a configured CDS API key)
files = geo.download_era5_land(
area=(50.0, -5.0, 47.0, 0.0), # (North, West, South, East)
variables='hydrogeology_water_balance',
start_date='2020',
end_date='2024',
output_dir='./era5land_raw',
)
# 2. Standardize: hourly -> daily, unit and sign corrections,
# secondary variables (wind speed, RH, ET0, EW0)
geo.standardize_era5_land(
data='./era5land_raw',
target_frequency='daily',
compute_secondary=True,
output_path='./era5land_std',
)
Available variables#
ERA5-Land exposes about 60 variables grouped by physical category, plus a set of
time-invariant fields (vegetation cover, soil type, land–sea mask…).
Each variable carries an aggregation hint (sum / mean / min / max)
used by the standardizer when changing temporal frequency.
Temperature (8 variables)
Short |
Variable |
Units |
Aggregation |
|---|---|---|---|
|
|
K |
mean |
|
|
K |
mean |
|
|
K |
mean |
|
|
K |
mean |
|
|
K |
mean |
|
|
K |
mean |
|
|
K |
mean |
|
|
K |
mean |
Wind & pressure (3 variables)
Short |
Variable |
Units |
Aggregation |
|---|---|---|---|
|
|
m s-1 |
mean |
|
|
m s-1 |
mean |
|
|
Pa |
mean |
Precipitation (2 variables)
Short |
Variable |
Units |
Aggregation |
|---|---|---|---|
|
|
m |
sum |
|
|
m of water equivalent |
sum |
Snow (7 variables)
Short |
Variable |
Units |
Aggregation |
|---|---|---|---|
|
|
% |
mean |
|
|
m |
mean |
|
|
m of water equivalent |
mean |
|
|
(0-1) |
mean |
|
|
kg m-3 |
mean |
|
|
m of water equivalent |
sum |
|
|
m of water equivalent |
sum |
Soil water (5 variables)
Short |
Variable |
Units |
Aggregation |
|---|---|---|---|
|
|
m3 m-3 |
mean |
|
|
m3 m-3 |
mean |
|
|
m3 m-3 |
mean |
|
|
m3 m-3 |
mean |
|
|
m of water equivalent |
mean |
Evaporation & runoff (9 variables)
Short |
Variable |
Units |
Aggregation |
|---|---|---|---|
|
|
m of water equivalent |
sum |
|
|
m |
sum |
|
|
m of water equivalent |
sum |
|
|
m of water equivalent |
sum |
|
|
m of water equivalent |
sum |
|
|
m of water equivalent |
sum |
|
|
m |
sum |
|
|
m |
sum |
|
|
m |
sum |
Radiation & energy fluxes (7 variables)
Short |
Variable |
Units |
Aggregation |
|---|---|---|---|
|
|
J m-2 |
sum |
|
|
J m-2 |
sum |
|
|
J m-2 |
sum |
|
|
J m-2 |
sum |
|
|
J m-2 |
sum |
|
|
J m-2 |
sum |
|
|
(0-1) |
mean |
Vegetation (2 variables)
Short |
Variable |
Units |
Aggregation |
|---|---|---|---|
|
|
m2 m-2 |
mean |
|
|
m2 m-2 |
mean |
Lakes (7 variables)
Short |
Variable |
Units |
Aggregation |
|---|---|---|---|
|
|
K |
mean |
|
|
m |
mean |
|
|
K |
mean |
|
|
K |
mean |
|
|
dimensionless |
mean |
|
|
K |
mean |
|
|
m |
mean |
Time-invariant fields (10 variables)
These fields have no time dimension. They are downloaded only once and reused across all subsequent requests.
Short |
Variable |
Units |
|---|---|---|
|
|
m2 s-2 |
|
|
(0-1) |
|
|
(0-1) |
|
|
m |
|
|
(0-1) |
|
|
(0-1) |
|
|
~ |
|
|
~ |
|
|
~ |
|
|
Proportion |
Secondary (derived) variables (4 variables)
These variables are not downloaded as such but recomputed by the standardizer
from primary variables when compute_secondary=True is passed.
Variable |
Computed from |
Units |
Notes |
|---|---|---|---|
|
|
m s-1 |
vector magnitude |
|
|
% |
Magnus formula |
|
|
m |
reference crop evapotranspiration |
|
|
m |
reference open water evaporation |
Variable profiles#
Predefined bundles can be passed directly as variables= to skip having
to list every variable name:
'hydrogeology_water_balance'(25 variables): essential set for water balance and hydrogeological studies (precipitation, snow, evaporation, runoff, soil water, temperature, wind, radiation, dewpoint, pressure + secondary variableswind_speed,relative_humidity,ET0).'complete': every primary variable plus all invariants.
A category name (e.g. 'precipitation', 'soil_water') can also be
passed and is expanded to every variable of that category.
Examples#
Coming soon…
Illustrative figures and notebook outputs.