Documentation v0.3.0
GHSL Built-up Zonal Statistics
Built-up surface, volume, non-residential use, and height derived from GHSL raster data.
Coverage and granularity#
Includes released parent cities and their ADM1 and ADM2 splits when the source raster metric is available.
9,849 of 9,849 parent cities · 1975–2025 · 160,392 rows across the package
- City: 9,849 of 9,849 boundary IDs
- ADM1: 387 of 387 boundary IDs
- ADM2: 3,130 of 3,130 boundary IDs
Row key: id, version, ghsl_year
Joining this data#
A Python example using GeoPandas and pandas. Replace the file paths with your local downloads. See boundary levels and join keys.
import geopandas as gpd
import pandas as pd
# Match the boundary file to the module's geographic level.
level = "PARENT"
boundaries = gpd.read_file("parent.gpkg")
observations = pd.read_parquet("ddl-ghsl-builtup.parquet")
observations = observations.loc[observations["boundary_level"].eq(level)]
joined = boundaries.merge(
observations, on="id", how="left", validate="one_to_many"
)
print(joined.head())Methodology#
Source raster values are summarized within each released UGC polygon with coverage-fraction weighting. Validity shares report how much of each zone contributes to each metric.
Schema#
| Name | Type | Units | Description |
|---|---|---|---|
id | string | — | Parent or child city identifier. |
version | string | — | Boundary version. |
boundary_level | string | — | PARENT, ADM1, or ADM2. |
ghsl_release | string | — | GHSL release used for every non-null metric in the row. |
ghsl_year | int64 | — | Configured GHSL raster epoch; see Notes for details. |
built_up_surface_sum_m2 | float64 | m² | Area-weighted sum of GHSL built-up surface pixels across the source boundary. May be null. |
built_up_surface_avg_m2 | float64 | m² | Area-weighted mean of GHSL built-up surface pixels across the source boundary. May be null. |
built_up_volume_sum_m3 | float64 | m³ | Area-weighted sum of GHSL built-up volume pixels across the source boundary. May be null. |
built_up_volume_avg_m3 | float64 | m³ | Area-weighted mean of GHSL built-up volume pixels across the source boundary. May be null. |
nonres_built_up_surface_sum_m2 | float64 | m² | Area-weighted sum of GHSL built-up surface pixels classified as non-residential across the source boundary. May be null. |
nonres_built_up_surface_avg_m2 | float64 | m² | Area-weighted mean of GHSL built-up surface pixels classified as non-residential across the source boundary. May be null. |
nonres_built_up_volume_sum_m3 | float64 | m³ | Area-weighted sum of GHSL built-up volume pixels classified as non-residential across the source boundary. May be null. |
nonres_built_up_volume_avg_m3 | float64 | m³ | Area-weighted mean of GHSL built-up volume pixels classified as non-residential across the source boundary. May be null. |
gross_built_up_height_avg_m | float64 | m | Area-weighted mean gross built-up height of GHSL built-up pixels across the source boundary May be null. |
net_built_up_height_avg_m | float64 | m | Area-weighted mean net built-up height of GHSL built-up pixels across the source boundary. May be null. |
built_up_surface_valid_coverage_share | float64 | — | Share of zone area covered by valid pixels for the corresponding metric. |
built_up_volume_valid_coverage_share | float64 | — | Share of zone area covered by valid pixels for the corresponding metric. |
nonres_built_up_surface_valid_coverage_share | float64 | — | Share of zone area covered by valid pixels for the corresponding metric. |
nonres_built_up_volume_valid_coverage_share | float64 | — | Share of zone area covered by valid pixels for the corresponding metric. |
gross_built_up_height_valid_coverage_share | float64 | — | Share of zone area covered by valid pixels for the corresponding metric. |
net_built_up_height_valid_coverage_share | float64 | — | Share of zone area covered by valid pixels for the corresponding metric. |
Notes#
ghsl_yearis 1975/1980/1985/1990/1995/2000/2005/2010/2015/2020/2025 for Built-up surface and volume data; gross and net height come from GHS-BUILT-H, which is from 2018.- Selecting on
ghsl_yearis therefore necessary to select the appropriate raster product. 2018 will not have any built-up surface or volume data while the other years will not have any height data. - Filter boundary_level before aggregation so parent and administrative zones are not double counted.
- The built-up surface and volume metrics for 2025 are projections from the 2020 data.
- The building volume measure is mechanically constructed by multiplying the built-up surface by the net built-up height in 2018. Therefore the ratio of built up volume to surface is the same across all years.
- Net building height is calculated as built-up volume over valid built-up surface area. Gross building height is calculated as built-up volume over the entire surface area.
- Keep every metric with its corresponding validity-coverage share; null metrics are unavailable, not zero. A share of 0 means the raster was absent or no valid pixel fell inside the zone.
Citation#
When using these data, cite Urban Growth Center and the original source below, where applicable.
Original source
Citation
European Commission, Joint Research Centre — Global Human Settlement Layer, GHS-BUILT-S, GHS-BUILT-V and GHS-BUILT-H R2023A. https://human-settlement.emergency.copernicus.eu/p2023Release.php
Urban Growth Center
Citation
Development Data Lab. (2026). Urban Growth Center. https://cities.devdatalab.org/