GAIA Pipeline Documentation #
Overview #
The Global Aggregation of Indicators for Anticipatory Action (GAIA) Pipeline produces a series of thematic files per country, aggregated to administrative units (by default administrative level 2). It currently covers 164 countries: 140 countries with administrative boundaries and place codes (PCODEs) from OCHA on HDX, and 24 EU countries with Eurostat NUTS regions (see Administrative Boundaries). Each file captures different aspects of population, infrastructure, and environmental conditions. Below is an overview of the available files:
Access to Services – Population accessibility to key facilities such as education and health centers.
Facilities – Availability and distribution of essential service infrastructure.
Coping Capacity – Combined indicators derived from Access, Facilities, Evacuability, and RAI layers.
Demographics – Distribution of vulnerable population.
Rural Population – Demographic indicators focused specifically on rural populations.
Rural Accessibility Index (RAI) – Percentage of rural population within 2 km of a paved road.
Vulnerability – Composite indicators derived from Demographics and Rural Population layers.
Flood Exposure – Exposure of populations, cropland and facilities to flood hazards.
Cyclone Exposure – Exposure of populations, cropland and facilities to cyclone hazards.
Evacuability – Travel time from at-risk areas to the nearest safe zone.
Where the files are published (HDX, public storage, interactive dashboard) is described in Outputs and Publishing.
Further details on GAIA’s methodology are available in the GAIA repository on GitHub. Each chapter below links to the source code that produces the respective file.
Information
The Coping Capacity, Vulnerability, and Flood Exposure files can be used directly as input for the Risk Assessment QGIS Plugin when analyzing flood hazards. Only minor adjustments, such as renaming the ID columns, are required for compatibility.
Administrative Boundaries #
All indicators are aggregated to administrative units. The boundaries come from one of two sources, depending on the country.
OCHA Common Operational Datasets (140 countries) #
Source: OCHA Common Operational Datasets for administrative boundaries (COD-AB), downloaded from the HDX dataset
cod-ab-{iso3}of each country.Levels: ADM0 (country), ADM1 and ADM2. Deeper levels are not used.
Processing: the boundary files are converted to GeoJSON in WGS84 (
EPSG:4326) and lightly simplified (tolerance 0.0001°, about 10 m).Identifier: the OCHA place code (PCODE) in the column
{admin_level}_PCODE, e.g.ADM2_PCODE.
Eurostat NUTS regions (24 EU countries) #
OCHA COD-AB datasets are not available for most EU countries, so these countries use the official statistical regions of the EU.
Countries: AUT, BEL, BGR, CZE, DEU, DNK, ESP, EST, FIN, FRA, GRC, HRV, HUN, IRL, ITA, LTU, LVA, NLD, POL, PRT, ROU, SVK, SVN, SWE. Cyprus, Luxembourg and Malta are not included because they consist of only one or two NUTS3 regions.
Source: Eurostat GISCO NUTS 2024, scale 1:1 million, WGS84 (
EPSG:4326).Levels:
ADM2 = NUTS3 for all countries (e.g. the 400 Kreise in Germany, the 96 départements in France, the 107 province in Italy).
ADM1 = NUTS1 for Belgium, Germany and France (regions, Länder, régions), NUTS2 for all other countries.
ADM0 is the country outline, built from the regions.
Not included: the French outermost regions (Guadeloupe, Martinique, French Guiana, Réunion, Mayotte), which have their own country codes in global datasets such as WorldPop. The Canary Islands, the Azores and Madeira are included in Spain and Portugal.
Region names are given in the local language in Latin script (e.g.
Stuttgart, Stadtkreis).Identifier: the NUTS code (e.g.
DE111). NUTS codes are hierarchical:DE111lies withinDE11, which lies withinDE1, which lies withinDE. They are not OCHA place codes, so in all published files of these countries the ID columns are named after NUTS:Column in OCHA countries
Column in NUTS countries
ADM2_PCODENUTS3_CODEADM1_PCODENUTS1_CODE(BEL, DEU, FRA) orNUTS2_CODEADM0_PCODENUTS0_CODEADM_PCODENUTS_CODEThe column descriptions in the following chapters use the OCHA names; for NUTS countries, read them according to this table.
License: © EuroGeographics for the administrative boundaries. This notice must be shown wherever the boundaries are displayed.
Administrative level #
Indicators are computed for ADM2 by default. If a country has no ADM2 boundary, the next available lower level is used (ADM1, then ADM0). The file names always contain the level that was actually used, e.g. STP_ADM1_facilities.csv.
Source code: fetch_boundaries_hdx.py · fetch_boundaries_nuts.py · boundaries.py
1. Access to Services #
Represents the number of people living within defined travel distances or travel times of key facilities (education, hospitals, primary healthcare), per administrative unit.
Data Sources #
Accessibility isochrones published by HeiGIT, downloaded as GeoPackage files from HeiGIT’s public storage (
https://hot.storage.heigit.org/heigit-hdx-public/access/{iso3}/{ISO3}_{category}_access.gpkg) for the categorieseducation,hospitalsandprimary_healthcare:Education: distance-based, 5 km, 10 km and 20 km.
Hospitals and primary healthcare: travel-time-based, 30 minutes, 1 hour and 2 hours.
Population data: WorldPop age and sex structures (release R2025A, constrained, 100 m, population estimates for the year 2030), the same rasters used in Demographics. For processing they are aggregated to approximately 1 km resolution by summing pixel values.
Administrative boundaries: see Administrative Boundaries.
Processing Steps #
Load administrative boundaries for the configured admin level (default: ADM2). If no boundary file exists for that level, the next lower level is used (ADM1, then ADM0).
Download the accessibility isochrones (GeoPackage, national layer) for each category.
Prepare the population raster (total population) from the WorldPop data.
For each category and cutoff:
Select the isochrone polygons for that cutoff.
Intersect them with the administrative boundaries.
Sum the population raster within each intersection (zonal statistics) and add up the results per administrative unit.
Save the results as a CSV with one row per administrative unit. Units with no population inside an isochrone get
0.
Outputs #
CSV file:
{ISO3}_{ADM}_access.csv(e.g.AFG_ADM2_access.csv)Columns:
{ADM}_PCODE– code of the administrative unit (e.g.ADM2_PCODE)ADM_PCODE– same value as{ADM}_PCODE, provided as a level-independent join keyaccess_pop_education_5km,access_pop_education_10km,access_pop_education_20kmaccess_pop_hospitals_30min,access_pop_hospitals_1h,access_pop_hospitals_2haccess_pop_primary_healthcare_30min,access_pop_primary_healthcare_1h,access_pop_primary_healthcare_2h
Units: number of people (rounded to whole persons)
Note: if the isochrone dataset of a country contains no polygons for a given cutoff, the corresponding column is omitted from that country’s file.
Source code: fetch_access_s3.py · access.py
2. Facilities #
Represents the availability and spatial distribution of essential service infrastructure (schools, hospitals and primary healthcare facilities), as the number of facilities mapped in OpenStreetMap per administrative unit.
Data Sources #
OpenStreetMap (OSM) data, accessed through either:
the ohsome API by HeiGIT (
https://api.heigit.org/ohsome-api/v2-rc) – default; orthe Overpass API – alternative, selectable via the pipeline configuration.
Administrative boundaries: see Administrative Boundaries.
Processing Steps #
Load administrative boundaries for the configured admin level (default: ADM2). If no boundary file exists for that level, the next lower level is used (ADM1, then ADM0).
Define OSM tag filters for each facility type:
Education:
amenity=schoolHospitals:
amenity=hospitalorhealthcare=hospitalPrimary healthcare:
amenity=doctors|clinicorhealthcare=clinic|doctors|midwife|nurse|center, excluding any feature tagged as a hospital (amenity=hospitalorhealthcare=hospital).
Count facilities per administrative unit:
ohsome API (default): for each administrative unit and facility type, the number of matching OSM features inside the unit’s boundary polygon is requested from the ohsome statistics endpoint, using the most recent OSM data available at processing time.
Overpass API: matching OSM features are downloaded for the country’s bounding box, reduced to point locations (centroids for areas), and assigned to administrative units with a spatial join.
Store facility locations: the matching OSM features for each facility type are additionally downloaded for the whole country and stored as intermediate files. They are used internally by the hazard exposure steps (e.g. Flood Exposure).
Combine and export results: the counts for all facility types are merged into one table (units with no facilities get
0) and saved as a CSV.
Outputs #
CSV file:
{ISO3}_{ADM}_facilities.csv(e.g.AFG_ADM2_facilities.csv)Columns:
{ADM}_PCODE– code of the administrative unit (e.g.ADM2_PCODE)ADM_PCODE– same value as{ADM}_PCODE, provided as a level-independent join keyeducation_counthospitals_countprimary_healthcare_count
Units: number of OSM facilities per administrative unit
Note: counts reflect what is mapped in OpenStreetMap and depend on local mapping completeness.
Source code: fetch_facilities_ohsome_overpass.py · facilities.py
3. Coping Capacity #
Represents the ability of a population to access essential services and to move to safety when a hazard strikes.
This layer does not compute new indicators. It combines, per administrative unit, the outputs of the Access to Services, Facilities, Evacuability and Rural Accessibility Index (RAI) layers into one table.
Data Sources #
Access to Services CSV (
{country_code}_{admin_level}_access.csv): population within distance/travel-time thresholds of education, hospital and primary-healthcare facilities (see Access to Services).Facilities CSV (
{country_code}_{admin_level}_facilities.csv): number of OpenStreetMap facilities per administrative unit (see Facilities).Evacuability CSV (
{country_code}_{admin_level}_evacuability.csv): travel time from flood- or cyclone-affected areas to the nearest safe area (see Evacuability).RAI CSV (
{country_code}_{admin_level}_rai.csv): rural population within 2 km of a paved road (see Rural Accessibility Index (RAI)).All inputs refer to the same administrative level (by default ADM2).
Processing Steps #
Input CSVs:
The four input CSVs are read for each administrative level (default: ADM2).
The administrative identifier column (
ADM0_PCODE,ADM1_PCODEorADM2_PCODE) is taken from the Access CSV.
Merge Operations:
The Access table is the base table; every administrative unit in it appears in the output.
Facilities columns are joined to it with a left join on the
*_PCODEcolumn. The Access and Facilities CSVs are both required; without them no coping file is produced.Evacuability columns are joined if an Evacuability CSV exists for the country. Countries with no flood or cyclone exposure therefore have no evacuation-time columns.
RAI columns are joined if an RAI CSV exists.
Duplicate identifier columns created by the joins are merged into a single
ADM_PCODEcolumn.
Output Generation:
The merged table is saved as
{country_code}_{admin_level}_coping.csv.One file is produced per administrative level.
Outputs #
File:
{country_code}_{admin_level}_coping.csvColumns (in this order; a group is missing if its source layer was not available):
{admin_level}_PCODE– administrative unit codeAccess to services (number of people; a column is omitted if no isochrone exists for that threshold):
access_pop_education_5km,access_pop_education_10km,access_pop_education_20kmaccess_pop_hospitals_30min,access_pop_hospitals_1h,access_pop_hospitals_2haccess_pop_primary_healthcare_30min,access_pop_primary_healthcare_1h,access_pop_primary_healthcare_2h
Facilities (number of facilities):
education_count,hospitals_count,primary_healthcare_count
Flood evacuability (minutes; one set per flood return period, by default RP 10, 50, 100 and 500):
RP{rp}_evac_time_minutes_mean,RP{rp}_evac_time_minutes_max,RP{rp}_evac_time_minutes_median
Cyclone evacuability (minutes; only for countries with cyclone exposure):
kt34_evac_time_minutes_mean,kt34_evac_time_minutes_max,kt34_evac_time_minutes_median
Rural access (rural population within 2 km of a paved road, persons):
rural_access_children_u5,rural_access_dependents,rural_access_working,rural_access_elderly,rural_access_female_pop,rural_access_female_u15,rural_access_female_u5,rural_access_pop_u15,rural_access_total_pop,rural_access_wra_poprural_access_dependency_ratio(dependents per 100 working-age people among the rural population with road access)
Rural Accessibility Index (% of the respective rural population group within 2 km of a paved road):
RAI_total_pop,RAI_female_pop,RAI_children_u5,RAI_female_u5,RAI_elderly,RAI_pop_u15,RAI_female_u15,RAI_wra_pop
ADM_PCODE– administrative unit code (same as{admin_level}_PCODE, kept for compatibility)
Format: tabular CSV without geometry; join it to the boundary layer via
{admin_level}_PCODE.Units: population counts, facility counts, minutes (1 decimal) and percentages (1 decimal). Evacuation times are empty for units with no affected area.
Source code: coping.py
4. Demographics #
Provides population counts by age and sex for each administrative unit.
This layer is derived from the WorldPop age/sex-structured population estimates and quantifies population groups that are often more vulnerable to hazards (children, elderly people, women of reproductive age).
Data Sources #
WorldPop Age-Sex Population Rasters:
WorldPop global age/sex structures, seriesGlobal_2015_2030, releaseR2025A, constrained version (population only allocated to built-up areas), 100 m resolution, year 2030 (projected estimates).
One raster per sex (f,m) and age group:0(under 1),1(1–4), then 5-year groups5–75, and80(80 and older).Administrative boundaries: used to aggregate the rasters per administrative unit, at the configured administrative level (default: ADM2; see Administrative Boundaries).
Indicators #
Each population indicator is the sum of WorldPop population counts over the listed age groups and sexes:
Indicator |
Description |
Ages (years) |
Sexes |
|---|---|---|---|
|
Total population |
all (0 – 80+) |
f, m |
|
Total female population |
all (0 – 80+) |
f |
|
Children under 5 |
0–4 |
f, m |
|
Female children under 5 |
0–4 |
f |
|
Population aged 65 and above |
65+ |
f, m |
|
Population under 15 |
0–14 |
f, m |
|
Female population under 15 |
0–14 |
f |
|
Women of reproductive age |
15–49 |
f |
|
Dependents (ages 0–14 and 65+) per 100 people of working age (15–64) |
derived |
f, m |
Processing Steps #
Download WorldPop Rasters
All age/sex rasters needed for the indicators are downloaded for the country (
Global_2015_2030/R2025A/2030, constrained, 100 m).
Sum Rasters per Indicator
For each indicator, the matching age/sex rasters are added together into one raster.
During this step the 100 m grid is aggregated to approximately 1 km by summing blocks of cells, so population totals are preserved.
Aggregate by Administrative Units
For each administrative unit, the population of all ~1 km grid cells whose centre lies inside the unit is summed (zonal sum).
If the boundary for the requested level is not available, the next coarser level (ADM1, then ADM0) is used.
Results are rounded to whole persons; missing values are set to 0.
Derive Dependency Ratio
dependency_ratio = (population aged 0–14 and 65+) / (population aged 15–64) × 100, rounded to 2 decimals. Units with no working-age population get 0.
Output
One CSV per country and administrative level:
{country_code}_{admin_level}_demographics.csv.
Outputs #
File:
{country_code}_{admin_level}_demographics.csvColumns:
{admin_level}_PCODE– administrative unit codeADM_PCODE– same code, kept for compatibilitytotal_popfemale_popchildren_u5female_u5elderlypop_u15female_u15wra_popdependency_ratio
Format: tabular CSV without geometry; join it to the boundary layer via
{admin_level}_PCODE.Units: population counts (whole persons, 2030 estimates);
dependency_ratioin dependents per 100 working-age persons (2 decimals).
Source code: fetch_worldpop.py · demographics.py
5. Rural Population #
Estimates how many people live in rural areas within each administrative unit, broken down by demographic group, together with the overall share of the population that is rural and the dependency ratio of the rural population. Rural areas are defined using the Global Human Settlement Layer Settlement Model (GHS-SMOD): grid cells classified as very low density rural, low density rural or rural cluster.
This layer combines WorldPop population rasters with the GHS-SMOD settlement classification to estimate rural populations for each demographic group.
Data Sources #
WorldPop Population Rasters:
WorldPop Age-Sex structures, release R2025A, constrained, projection year 2030, 100 m resolution, aggregated to roughly 1 km for processing.
The same demographic rasters are used as in the Demographics chapter.GHS-SMOD (Settlement Model) Raster:
GHS-SMOD R2023A, epoch 2030, 1 km, Mollweide, from the JRC Global Human Settlement Layer.
Used to classify grid cells as rural or urban.Administrative Boundaries:
Boundary files for the configured administrative level (default: ADM2) define the spatial units used for aggregation (see Administrative Boundaries).
Processing Steps #
Download GHS-SMOD Raster
The global GHS-SMOD 2030 raster (R2023A, 1 km) is downloaded from the JRC GHSL repository.
Reclassify SMOD Raster
Converts the original SMOD classes into two classes:
Rural = 1 (classes 11–13: very low density rural, low density rural, rural cluster)
Urban = 2 (classes 21–23 and 30: suburban/peri-urban, semi-dense and dense urban cluster, urban centre)
Water (class 10) and no data are excluded.
Fetch WorldPop Demographic Indicators
Uses the WorldPop rasters for total population, female population, children under 5, female children under 5, elderly (65+), population under 15, females under 15, women of reproductive age (15–49), dependents (ages 0–14 and 65+) and working-age population (15–64), shared with the Demographics layer.
Compute Rural Population
Aligns the reclassified SMOD raster to the WorldPop grid.
Keeps only population in rural cells (SMOD class 1).
Sums rural population per administrative unit for each demographic group.
Derive Ratios
Rural dependency ratio = rural dependents / rural working-age population × 100 (0 if there is no working-age population).
Rural population share = rural total population / total population of the unit × 100.
Output Generation
Writes one CSV per country and administrative level. Population counts are rounded to whole people; ratio and percentage are rounded to two decimals.
Outputs #
CSV file:
{country_code}_{admin_level}_rural_population.csv(e.g.AFG_ADM2_rural_population.csv)Columns:
{admin_level}_PCODE– administrative unit codeADM_PCODE– copy of the administrative unit code (level-independent join key)total_pop_rural,female_pop_rural,children_u5_rural,female_u5_ruralelderly_rural,pop_u15_rural,female_u15_rural,wra_pop_rural– rural population counts per demographic groupdependency_ratio_rural– rural dependency ratio (dependents aged 0–14 and 65+ per 100 people aged 15–64)rural_pop_perc– percentage of the unit’s total population living in rural areas
Units: number of people (integers); ratio and percentage per administrative unit (two decimals)
Source code: fetch_ruralness_ghsl.py · rural.py
6. Rural Accessibility Index (RAI) #
Computes the percentage of rural population living within 2 km of a paved road. The Rural Accessibility Index measures the proportion of people living in rural areas (GHS-SMOD classes 11–13) whose location lies within a 2 km straight-line buffer around a paved road. Results are provided for multiple demographic groups, together with the dependency ratio of the accessible rural population.
Data Sources #
Road Surface Data: HeiGIT road surface datasets (published on HDX), combined where both are available:
Mapillary-based road surface classification (downloads.ohsome.org/hdx/mapillary_road_surface); roads predicted as paved (
pred_label == 0) are used.Planet imagery-based road surface classification (hot.storage.heigit.org/heigit-hdx-public/planet_road_data); roads classified as paved (
DL_road_class_2024 == "paved") are used.
GHS-SMOD Raster: Global Human Settlement Layer Settlement Model, R2023A, epoch 2030, 1 km (same file as in Rural Population), used to identify rural cells (classes 11–13).
WorldPop Population Rasters: WorldPop Age-Sex structures R2025A, constrained, 2030 (same data as in Demographics), used to count population per demographic group within accessible rural areas.
Rural Population output (see Rural Population): provides the rural population per group used as denominator.
Administrative Boundaries (default level ADM2, see Administrative Boundaries): used to report results per administrative unit.
Indicators #
Indicator |
Description |
Units |
|---|---|---|
|
Rural population living within 2 km of a paved road |
people |
|
Rural Accessibility Index = |
% |
|
Dependency ratio of the accessible rural population (dependents aged 0–14 and 65+ per 100 people aged 15–64) |
% |
Groups with both rural_access_ and RAI_ values: total_pop, female_pop, children_u5, female_u5, elderly, pop_u15, female_u15, wra_pop. For dependents and working only the rural_access_ counts are provided; they are used for the dependency ratio.
Processing Steps #
Download road surface data (Mapillary- and Planet-based) for the country and keep paved roads only. If only one source is available, it is used alone.
Buffer paved roads by 2 km in a projected coordinate system (UTM zone estimated from the country centroid) and merge the buffers into one road service area.
Prepare GHS-SMOD: reclassify into rural / urban / excluded (as in Rural Population) and clip to the country boundary.
Vectorize rural cells (SMOD classes 11–13) into rural area polygons.
Intersect rural areas with the road service area to obtain accessible rural areas.
Intersect accessible rural areas with the administrative units.
Sum WorldPop population for each demographic group within the accessible rural area of each unit.
Load rural population totals from the Rural Population output as denominator.
Compute RAI:
rural_access_{group} / {group}_rural × 100, rounded to one decimal; set to 0 where a unit has no rural population.Compute dependency ratio:
rural_access_dependents / rural_access_working × 100, rounded to one decimal; left empty where there is no accessible working-age population.Write CSV with one row per administrative unit. If no paved road data is available for a country, or no accessible rural area is found, the file contains only the administrative unit codes.
Outputs #
File:
{country_code}_{admin_level}_rai.csv(e.g.AFG_ADM2_rai.csv)Columns:
{admin_level}_PCODErural_access_children_u5,rural_access_dependents,rural_access_workingrural_access_elderly,rural_access_female_pop,rural_access_female_u15rural_access_female_u5,rural_access_pop_u15,rural_access_total_poprural_access_wra_pop,rural_access_dependency_ratioRAI_total_pop,RAI_female_pop,RAI_children_u5,RAI_female_u5RAI_elderly,RAI_pop_u15,RAI_female_u15,RAI_wra_pop
Units: population counts (whole people); RAI and dependency ratio in % (one decimal)
Source code: compute_rai.py · rai.py
7. Vulnerability #
Represents the sensitivity of a population to external shocks based on its demographic composition and on how much of it lives in rural areas.
This layer does not compute new indicators. It combines, per administrative unit, the outputs of the Demographics and Rural Population layers into one table.
Data Sources #
Demographics CSV (
{country_code}_{admin_level}_demographics.csv): population by age and sex from WorldPop (see Demographics).Rural Population CSV (
{country_code}_{admin_level}_rural_population.csv): the same population groups counted only in rural areas, based on the GHSL Settlement Model (SMOD) (see Rural Population).Both datasets refer to the same administrative level (by default ADM2).
Processing Steps #
Input CSVs:
One Demographics CSV and one Rural Population CSV are read for each administrative level.
The administrative identifier column (
ADM0_PCODE,ADM1_PCODEorADM2_PCODE) is taken from the Demographics CSV.
Merge Operation:
The two tables are joined on the
*_PCODEcolumn using a left join on the Demographics table, so every administrative unit with demographic data is kept, even if rural population values are missing.Duplicate identifier columns created by the join are merged into a single
ADM_PCODEcolumn.
Output Generation:
The merged table is saved as
{country_code}_{admin_level}_vulnerability.csv.One file is produced per administrative level.
Outputs #
File:
{country_code}_{admin_level}_vulnerability.csvColumns:
{admin_level}_PCODE– administrative unit codeDemographics (see Demographics):
total_pop,female_pop,children_u5,female_u5,elderly,pop_u15,female_u15,wra_pop– population countsdependency_ratio– dependents (0–14 and 65+) per 100 working-age persons (15–64)
Rural population (see Rural Population):
total_pop_rural,female_pop_rural,children_u5_rural,female_u5_rural,elderly_rural,pop_u15_rural,female_u15_rural,wra_pop_rural– population counts in rural areasdependency_ratio_rural– dependency ratio of the rural populationrural_pop_perc– share of the total population living in rural areas (%)
ADM_PCODE– administrative unit code (same as{admin_level}_PCODE, kept for compatibility)
Format: tabular CSV without geometry; join it to the boundary layer via
{admin_level}_PCODE.Units: population counts (whole persons); ratios per 100 working-age persons and percentages (2 decimals).
Source code: vulnerability.py
8. Flood Exposure #
Estimates the exposure of population, cropland and critical facilities to riverine flooding using the JRC GloFAS flood hazard maps (flood depth for several return periods), WorldPop demographic layers and ESA WorldCover cropland. A location counts as flooded when the modelled flood depth exceeds a threshold (default 30 cm). Exposure metrics are aggregated per administrative unit.
This layer provides indicators for the number of people affected per demographic group, the flooded cropland area, and the number and percentage of critical facilities (education, hospitals, primary healthcare) affected by flood events of different return periods (RPs).
Data Sources #
GloFAS Flood Hazard Maps (
https://jeodpp.jrc.ec.europa.eu/ftp/jrc-opendata/CEMS-GLOFAS/flood_hazard/)
Flood depth rasters (in metres, ~100 m resolution) from the JRC Copernicus Emergency Management Service, one set per return period. The pipeline supports return periods of 10, 50, 100 and 500 years.WorldPop Population Layers (see Demographics)
Age- and sex-disaggregated population rasters, aggregated to a 1 km grid: female population, children under 5, female children under 5, elderly, population under 15, female population under 15, women of reproductive age, plus the dependent and working-age components of the dependency ratio.ESA WorldCover (
https://esa-worldcover.org)
10 m land cover map; the Cropland class is used to derive the share of cropland in each 1 km grid cell. Default release: 2021 (2020 is also available).Facilities Data (see Facilities)
OSM-derived locations of education, hospital and primary healthcare facilities from the ohsome API (default) or the Overpass API.Administrative Boundaries (see Administrative Boundaries)
Used to aggregate flood exposure per admin level (default ADM2; if no boundary exists for the requested level, the next lower level is used).
Indicators #
Indicator |
Description |
Units |
|---|---|---|
|
Cropland area flooded with depth > threshold |
km² |
|
Number of females affected by flood depth > threshold |
people |
|
Number of children under 5 affected |
people |
|
Number of female children under 5 affected |
people |
|
Number of elderly (65+) affected |
people |
|
Number of people under 15 affected |
people |
|
Number of females under 15 affected |
people |
|
Number of women of reproductive age (15–49) affected |
people |
|
Dependency ratio of the affected population: people aged 0–14 and 65+ per 100 people aged 15–64 |
ratio × 100 |
|
Percentage of educational facilities flooded |
% |
|
Number of educational facilities flooded |
count |
|
Percentage of hospitals flooded |
% |
|
Number of hospitals flooded |
count |
|
Percentage of primary healthcare facilities flooded |
% |
|
Number of primary healthcare facilities flooded |
count |
{rp}is the return period in years (10, 50, 100, 500) and{thresh}is the flood depth threshold in cm (default30cm). Total population is not reported for floods.
Flood Threshold #
Parameter |
Default |
Description |
|---|---|---|
|
0.3 m |
A location counts as flooded when the flood depth is greater than this value. Its value in cm appears in the column names (e.g. |
|
10, 50, 100, 500 |
Return periods processed |
|
2021 |
ESA WorldCover release used for cropland (2020 or 2021) |
|
|
Source of facility data ( |
|
ADM2 |
Administrative level(s) to aggregate to |
These defaults are part of the pipeline’s run configuration and can be changed for a run in the Dagster UI.
Processing Steps #
Input Geometry
Loads the administrative boundaries of the country at the requested admin level (falling back to a lower level if needed).
Flood Hazard Download and Clipping (per RP)
Lists the GloFAS flood depth tiles available for the return period and downloads those intersecting the country’s bounding box.
Clips the tiles to the country boundary and merges them into a single flood depth raster per RP.
Population and Cropland Preparation
Ensures the WorldPop demographic rasters (1 km grid) exist for the country.
Builds a cropland-fraction raster on the same 1 km grid from ESA WorldCover (share of each cell classified as cropland).
Facility Data Preparation
Downloads or loads facility geometries from the configured API (
ohsome-apioroverpass); non-point geometries are reduced to their centroids.
Flood Exposure Calculation per RP
Flood mask: The flood depth raster is resampled (bilinear) onto the 1 km population grid; cells with a resampled depth greater than the threshold form the flood mask.
Flooded population: Each demographic raster is multiplied by the flood mask and summed per admin unit (zonal statistics). The dependency ratio is computed from the flooded dependent (0–14, 65+) and working-age (15–64) populations; it is 0 where no working-age population is flooded.
Flooded cropland: The cropland fraction is multiplied by the flood mask and the approximate cell area, and summed per admin unit (km²).
Flooded facilities: The flood depth is sampled at each facility location on the original-resolution flood raster; a facility counts as flooded if the depth exceeds the threshold. Count and percentage of flooded facilities are computed per admin unit and category.
Aggregation and CSV Output
Merges the results for all RPs into a single table with one row per admin unit.
Fills missing values with 0. Population counts, facility counts, percentages and the dependency ratio are rounded to whole numbers; cropland area keeps two decimals.
Saves the CSV as
{country_code}_{admin_level}_flood_exposure.csv.
Outputs #
File:
{country_code}_{admin_level}_flood_exposure.csv(e.g.AUT_ADM2_flood_exposure.csv)Rows: one per administrative unit
Columns:
{admin_level}_PCODE(e.g.ADM2_PCODE)For each return period (
RP10,RP50,RP100,RP500), in this order:RP{rp}_crops_{thresh}_km2; the seven flooded population indicators;RP{rp}_dependency_ratio_{thresh}; and_pct/_countforeducation,hospitalsandprimary_healthcareWith default settings: 1 + 4 × 15 = 61 columns
Units: people, km², %, count
Source code: fetch_floods_jrc.py · fetch_worldcover.py · exposure.py
9. Cyclone Exposure #
Estimates the historical exposure of population, cropland and critical facilities to tropical cyclones using IBTrACS storm track data (since 1980). For every track segment where a storm had hurricane/typhoon strength (Saffir-Simpson category 1–5), the area reached by at least tropical-storm-force winds (34 knots, ≈63 km/h) is mapped and labelled with the storm’s category at that time. The categories are grouped into three exposure classes (Cat 1, Cat 2–3, Cat 4–5). For each administrative unit, the exposed population per demographic group, the exposed cropland area, and the count and percentage of exposed facilities are computed per class.
Data Sources #
IBTrACS Storm Tracks (
https://www.ncei.noaa.gov/data/international-best-track-archive-for-climate-stewardship-ibtracs/): International Best Track Archive for Climate Stewardship, version v04r01, all storms since 1980, downloaded from NOAA NCEI as track line segments. Used attributes: Saffir-Simpson category (USA_SSHS) and the radius of 34-knot winds in four quadrants (USA_R34_NE,USA_R34_SE,USA_R34_SW,USA_R34_NW).WorldPop Population Rasters: Demographic rasters on a 1 km grid used to compute exposed populations (see Demographics).
ESA WorldCover (
https://esa-worldcover.org): 10 m land cover; the Cropland class is used to derive the cropland share per 1 km grid cell. Default release: 2021 (2020 is also available).Facilities Data: OSM-derived facility locations (education, hospitals, primary healthcare) from the ohsome API (default) or the Overpass API (see Facilities).
Administrative Boundaries: Used to aggregate exposure per admin level (default ADM2; if no boundary exists for the requested level, the next lower level is used; see Administrative Boundaries).
Indicators #
Indicator |
Description |
Units |
|---|---|---|
|
Exposed population for a demographic group in exposure class |
people |
|
Dependency ratio of the exposed population in class |
ratio × 100 |
|
Number of facilities in exposure class |
count |
|
Percentage of the unit’s facilities of that category in exposure class |
% |
|
Cropland area in exposure class |
km² |
Where {cls} is the cyclone exposure class (1 = Cat 1, 2 = Cat 2–3, 3 = Cat 4–5), {indicator} is a demographic group (total_pop, female_pop, children_u5, female_u5, elderly, pop_u15, female_u15, wra_pop), and {facility} is a category (education, hospitals, primary_healthcare). kt34 refers to the 34-knot wind radius used to define the exposed area.
Cyclone Categories #
Exposure Class |
Saffir-Simpson Category |
Storm Maximum Sustained Wind (km/h) |
|---|---|---|
1 |
Category 1 |
119–153 |
2 |
Categories 2–3 |
154–208 |
3 |
Categories 4–5 |
≥ 209 |
The wind speeds describe the storm’s intensity on that track segment, not the wind speed at every location in the exposed area. The exposed area itself is the zone with winds of at least 34 knots. Where footprints of several storms overlap, the highest class is kept, so each location (and each person or facility) is counted in exactly one class: the strongest storm recorded there since 1980.
Processing Steps #
Download and extract IBTrACS storm track data (v04r01, since 1980) from NOAA NCEI.
Filter track segments with a Saffir-Simpson category of 1 or higher that intersect the country’s bounding box. Storms passing outside this bounding box are not included, even if their wind field reaches the country.
Buffer track segments by the 34-knot wind radius: the mean of the four quadrant radii, converted from nautical miles to metres. Segments without 34-knot radius data are dropped.
Clip buffers to the country boundary.
Rasterize the buffers onto the 1 km WorldPop grid, keeping the highest category per cell, and classify the cells into the three exposure classes (1, 2, 3).
Compute population exposure: For each demographic group and class, multiply the population raster by the class mask and sum per admin unit (zonal statistics).
Compute dependency ratio:
kt34_dependency_ratio_cat{cls} = dependents (0–14, 65+) / working-age (15–64) × 100per class; 0 where no working-age population is exposed.Compute facility exposure: Sample the exposure class raster at each facility location (centroid), then count the exposed facilities per admin unit and class and compute their share of all facilities of that category in the unit.
Compute cropland exposure: Multiply the cropland fraction by each class mask and the approximate cell area, and sum per admin unit (km²).
Save CSV with all exposure columns. Missing values are filled with 0. All values except the dependency ratio (2 decimals) are rounded to whole numbers.
If no qualifying cyclone track reaches the country, no cyclone exposure file is produced.
Outputs #
File:
{country_code}_{admin_level}_cyclone_exposure.csv(e.g.MMR_ADM2_cyclone_exposure.csv)Rows: one per administrative unit
Columns:
{admin_level}_PCODE(e.g.ADM2_PCODE)ADM_PCODE(same values; level-independent alias)Population exposed per demographic group and class:
kt34_total_pop_cat1,kt34_total_pop_cat2,kt34_total_pop_cat3,kt34_female_pop_cat1, …kt34_wra_pop_cat3(8 groups × 3 classes)Dependency ratio per class:
kt34_dependency_ratio_cat1,kt34_dependency_ratio_cat2,kt34_dependency_ratio_cat3Facility counts and percentages per category and class:
kt34_education_count_cat1,kt34_education_perc_cat1, …kt34_primary_healthcare_perc_cat3Cropland exposed per class:
kt34_crops_km2_cat1,kt34_crops_km2_cat2,kt34_crops_km2_cat3With complete inputs: 50 columns. Facility or cropland columns are omitted if the corresponding input data is unavailable for a country.
Units: people, count, %, km²
Source code: fetch_cyclones_ncei.py · fetch_worldcover.py · exposure.py
10. Evacuability #
Estimates the travel time (in minutes) from areas at risk from floods or tropical cyclones to the nearest area that is not affected by the hazard (“safe zone”). It uses least-cost path analysis on a motorized friction surface. The result shows how quickly people in hazard-prone areas could reach unaffected ground by motorized transport, summarised per administrative unit.
Data Sources #
Flood Hazard Rasters: JRC CEMS-GloFAS flood hazard depth maps (metres, ~3 arc-second resolution) for each return period (RP), clipped to the country. These are the same rasters used in Flood Exposure.
Cyclone Exposure Raster: The raster produced by the Cyclone Exposure step from IBTrACS tracks. It marks areas within the 34-knot wind radius of Category 1–5 storm points (classes 1 = Cat 1, 2 = Cat 2–3, 3 = Cat 4–5; 0 = not affected). It only exists for countries with relevant cyclone tracks.
Friction Surface: The global 2020 motorized friction surface (Cloud-Optimized GeoTIFF, ~1 km resolution), read from HeiGIT’s public storage (
2020_motorized_friction_surface_cog.tif). It gives the travel time needed to cross each pixel.Administrative Boundaries: used to summarise travel times per admin unit (see Administrative Boundaries).
Indicators #
Indicator |
Description |
Units |
|---|---|---|
|
Mean travel time from flooded pixels (return period |
minutes |
|
Maximum travel time from flooded pixels to the nearest safe zone |
minutes |
|
Median travel time from flooded pixels to the nearest safe zone |
minutes |
|
Mean travel time from cyclone-affected pixels to the nearest safe zone |
minutes |
|
Maximum travel time from cyclone-affected pixels to the nearest safe zone |
minutes |
|
Median travel time from cyclone-affected pixels to the nearest safe zone |
minutes |
Processing Steps #
Load the hazard raster for each configured return period (default: 10, 50, 100, 500 years) and, if available, the cyclone exposure raster. Return periods without a flood raster are skipped.
Reduce resolution for large countries: if a hazard raster has more than 10 million pixels, the analysis runs on a coarser grid. The cell size is chosen so the grid stays within that limit, and is at least 500 m.
Fetch the friction surface for the raster’s extent and resample it onto the analysis grid.
Classify pixels:
Flood: at risk if flood depth is greater than the flood threshold (default 0.3 m). Safe if depth is at or below the threshold, or if there is no flood data (including areas outside the country boundary).
Cyclone: at risk if the pixel lies within any 34-knot wind buffer (class ≥ 1). Safe otherwise.
Compute travel time from every pixel to the nearest safe zone, using a least-cost (minimum cumulative cost) algorithm over the friction surface with 8-neighbour movement. Safe-zone pixels are the starting points. For performance, at most 20,000 safe pixels are randomly sampled as starting points, so travel times can be slightly overestimated where safe areas are large.
Cyclone only: if the raster was reduced in resolution, the travel-time grid is resampled back to the original resolution before summarising.
Summarise per admin unit: the mean, maximum and median travel time over the at-risk pixels in each unit, rounded to one decimal place.
Write one CSV per admin level containing the flood columns for each return period and, where cyclone data exists, the cyclone columns.
Outputs #
File:
{country_code}_{admin_level}_evacuability.csv(default admin level:ADM2; if no boundary exists for the requested level, the next lower available level is used)Columns:
{admin_level}_PCODEFlood evacuability per return period:
RP{rp}_evac_time_minutes_mean,RP{rp}_evac_time_minutes_max,RP{rp}_evac_time_minutes_medianCyclone evacuability (only if a cyclone exposure raster exists for the country):
kt34_evac_time_minutes_mean,kt34_evac_time_minutes_max,kt34_evac_time_minutes_median
Units: minutes (travel time)
Empty values: admin units with no at-risk pixels for a hazard or return period have empty cells in the corresponding columns.
Source code: calculate_evacuatability.py · evacuability.py
Outputs and Publishing #
All files are published for each country in three places.
Public storage #
All indicator CSVs are uploaded to HeiGIT’s public storage:
https://hot.storage.heigit.org/heigit-hdx-public/risk_assessment_inputs/{iso3}/{ISO3}_{ADM}_{indicator}.csv
For example: .../risk_assessment_inputs/afg/AFG_ADM2_coping.csv. Before upload, the region codes of every file are checked against the current boundaries of the country; files that were computed on an older boundary version are not published.
HDX datasets #
For each country, the indicator files are listed on HDX as the dataset “{Country} - Risk Assessment Indicators” of the Heidelberg Institute for Geoinformation Technology, part of the data series Heidelberg Institute for Geoinformation Technology - Risk Assessment Indicators.
Files: Access, Facilities, Coping Capacity, Demographics, Rural Population, RAI, Vulnerability, Flood Exposure and Evacuability (required), and Cyclone Exposure (only for countries exposed to cyclones). The files link to the public storage described above.
Completeness: a page is only published once all required files of the country are available. If a required file becomes unavailable, the page is removed.
License: Creative Commons Attribution-ShareAlike (CC BY-SA).
Interactive dashboard #
The Disaster Risk Composer visualises the indicators and the resulting risk scores per administrative unit. It is embedded on each HDX page (https://disaster-risk-composer.heigit.org/#/?country={ISO3}&disaster=risk_flood).
It uses two additional files per country, stored next to the CSVs:
{ISO3}_ADM2_risk.parquet– all exposure, vulnerability and coping indicators of the country in one table, with the prefixesexp_flo_(flood exposure),exp_cyc_(cyclone exposure),vul_(vulnerability) andcop_(coping capacity), plus the composite risk scores per hazard. The calculation of the risk scores is described in the GAIA repository.{ISO3}_ADM2.pmtiles– the administrative boundaries as vector tiles (layerboundary), with the region code and name. For NUTS countries the file metadata contains the required license notice in the fieldattribution.
Source code: uploads.py · upload_to_hdx.py · visualization.py · risk.py