Overview
Global digital surface model (DSM) of the Earth’s surface including buildings, infrastructure and vegetation, derived from the TanDEM-X radar mission and edited and infilled by Airbus Defence and Space for the European Space Agency (ESA) under the Copernicus programme. Two public instances: GLO-30 at 1 arc-second (~30 m) and GLO-90 at 3 arc-seconds (~90 m), both as orthometric heights in metres over the EGM2008 geoid. The standard global elevation base for terrain derivatives, hydrological conditioning and elevation covariates. Sinergise (Sentinel Hub) republishes each instance on AWS Open Data as one cloud-optimized GeoTIFF per 1x1 degree tile with a static SpatioTemporal Asset Catalog (STAC). The Hub publishes a GDAL tile index (GTI) per instance that opens all tiles as one global raster, and a STAC GeoParquet snapshot of the Earth Search items for each instance that lists the tiles with their footprints and grid metadata. No data is copied.
Important note
GLO-30 is missing 25 tiles over Armenia and Azerbaijan: Copernicus released them only in 2023_1, after the 2021_1 copy on AWS. Use GLO-90 there. Above 50 degrees latitude the GTI resamples the wider-pixel tiles to the equatorial grid on read with nearest neighbour, so columns repeat. The GTI needs GDAL 3.8 or newer and references the tiles over HTTPS with /vsicurl, so open it with GDAL-based tools and read a window at a time rather than the full dataset.
Intended uses
- terrain inputs such as slope, aspect and flow direction for crop suitability and hydrological modelling
- elevation covariate for downscaling climate and interpolating station data
- exposure baselines for flood and landslide hazard, and visibility and routing analysis
Not recommended for
Why: it is a surface model, so heights include canopy and buildings.
Use instead: a bare-earth product derived from it, such as FABDEM, or local LiDAR terrain models.
Why: a single static model from 2011 to 2015 radar acquisitions, released with edits rather than new data.
Why: absolute vertical accuracy is specified as under 4 m at 90% confidence.
Access & use
Files, endpoints, and worked examples for each distribution.
Data
26,450 GLO-30 tiles named Copernicus_DSM_COG_10_<N|S>yy_00_<E|W>xxx_00_DEM, one folder per tile holding the elevation COG and an AUXFILES folder with editing, filling, water-body and height-error masks. Open the GTI as one global raster, or the GeoParquet to list and select elevation tiles; the masks are not indexed.
Format: Cloud-Optimized GeoTIFF — best for single-file downloads, visualisation, and traditional GIS tools
File indexes
GDAL Tile Index (GTI)https://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-30.gti.gpkg
VSICURl/HTTPS based Gdal Tile index
Usage examples
import rioxarray
# The tile index opens as one mosaic (GDAL 3.9+)
da = rioxarray.open_rasterio("GTI:/vsicurl/https://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-30.gti.gpkg", masked=True)library(terra)
# The tile index opens as one mosaic (GDAL 3.9+)
r <- rast("GTI:/vsicurl/https://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-30.gti.gpkg")# The tile index opens as one mosaic (GDAL 3.9+)
gdalinfo "GTI:/vsicurl/https://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-30.gti.gpkg"STAC-GeoParquethttps://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-30.parquet
STAC GeoParquet of the Earth Search items. hrefs are HTTPS
Usage examples
import rioxarray
import rustac
url = "https://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-30.parquet"
# As STAC items: search reads only the rows that match (area, time, ids…)
items = rustac.search_sync(url, bbox=[28, -12, 52, 18])
# ...or every item, as a FeatureCollection: rustac.read_sync(url)
# As one mosaic through GDAL's tile index driver (GDAL 3.10+). If items have
# several assets, pick one: open_rasterio(..., LOCATION_FIELD="assets.<key>.href")
da = rioxarray.open_rasterio(f"GTI:/vsicurl/{url}", masked=True)library(duckdb)
library(terra)
url <- "https://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-30.parquet"
# As STAC: one row per item, with its assets and properties
con <- dbConnect(duckdb())
items <- dbGetQuery(con, sprintf("SELECT id, datetime, assets FROM read_parquet('%s')", url))
# As one mosaic through GDAL's tile index driver (GDAL 3.10+). If items have
# several assets, pick one: rast(..., opts = "LOCATION_FIELD=assets.<key>.href")
r <- rast(paste0("GTI:/vsicurl/", url))# As STAC items (pip install rustac): search reads only the rows that match
rustac search "https://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-30.parquet" --bbox=28,-12,52,18 items.json
# ...or every item: rustac translate "https://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-30.parquet" items.json
# As one mosaic through GDAL's tile index driver (GDAL 3.10+). If items have
# several assets, add: -oo LOCATION_FIELD=assets.<key>.href
gdalinfo "GTI:/vsicurl/https://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-30.parquet"Other access methods
26,475 GLO-90 tiles named Copernicus_DSM_COG_30_<N|S>yy_00_<E|W>xxx_00_DEM, same layout as GLO-30. Complete land coverage, including the tiles withheld from GLO-30.
Format: Cloud-Optimized GeoTIFF — best for single-file downloads, visualisation, and traditional GIS tools
File indexes
GDAL Tile Index (GTI)https://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-90.gti.gpkg
VSICURl/HTTPS based Gdal Tile index
Usage examples
import rioxarray
# The tile index opens as one mosaic (GDAL 3.9+)
da = rioxarray.open_rasterio("GTI:/vsicurl/https://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-90.gti.gpkg", masked=True)library(terra)
# The tile index opens as one mosaic (GDAL 3.9+)
r <- rast("GTI:/vsicurl/https://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-90.gti.gpkg")# The tile index opens as one mosaic (GDAL 3.9+)
gdalinfo "GTI:/vsicurl/https://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-90.gti.gpkg"STAC-GeoParquethttps://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-90.parquet
STAC GeoParquet of the Earth Search items. hrefs are HTTPS
Usage examples
import rioxarray
import rustac
url = "https://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-90.parquet"
# As STAC items: search reads only the rows that match (area, time, ids…)
items = rustac.search_sync(url, bbox=[28, -12, 52, 18])
# ...or every item, as a FeatureCollection: rustac.read_sync(url)
# As one mosaic through GDAL's tile index driver (GDAL 3.10+). If items have
# several assets, pick one: open_rasterio(..., LOCATION_FIELD="assets.<key>.href")
da = rioxarray.open_rasterio(f"GTI:/vsicurl/{url}", masked=True)library(duckdb)
library(terra)
url <- "https://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-90.parquet"
# As STAC: one row per item, with its assets and properties
con <- dbConnect(duckdb())
items <- dbGetQuery(con, sprintf("SELECT id, datetime, assets FROM read_parquet('%s')", url))
# As one mosaic through GDAL's tile index driver (GDAL 3.10+). If items have
# several assets, pick one: rast(..., opts = "LOCATION_FIELD=assets.<key>.href")
r <- rast(paste0("GTI:/vsicurl/", url))# As STAC items (pip install rustac): search reads only the rows that match
rustac search "https://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-90.parquet" --bbox=28,-12,52,18 items.json
# ...or every item: rustac translate "https://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-90.parquet" items.json
# As one mosaic through GDAL's tile index driver (GDAL 3.10+). If items have
# several assets, add: -oo LOCATION_FIELD=assets.<key>.href
gdalinfo "GTI:/vsicurl/https://digital-atlas.s3.amazonaws.com/cdh/data/copernicus-dem-2021/glo-90.parquet"Other access methods
Data dictionary
What each file holds. A layout describes how the data is stored in a file: its variables, the dimensions they vary over, and any keys.
File layouts
In every file
Variables
| Variable | Type | Unit | Description |
|---|---|---|---|
| elevation | float32 | m | Surface height above the EGM2008 geoid, including canopy and buildings. No nodata value; the ocean has no tiles and reads as 0, so sea cannot be told from 0 m land. |
Only in glo-30
Dimensions
1 arc-second (~30 m at the equator). Latitude spacing is constant; longitude spacing is 1.5x, 2x, 3x, 5x and 10x wider above 50, 60, 70, 80 and 85 degrees.
Grid spacing: 0.000277778 degree
Only in glo-90
Dimensions
3 arc-seconds (~90 m at the equator), same latitude-dependent longitude spacing as GLO-30.
Grid spacing: 0.000833333 degree
Technical metadata
The full spatial, temporal, and modeling detail behind the summaries elsewhere on this page.
Spatial
- CRS
- EPSG:4326
- Extent (W S E N)
- [-180, -90, 180, 90]
- Coverage
- World
- Grid spacing
- 1 arc-second (~31 m at the equator)
- Grid spacing
- 3 arc-seconds (~93 m at the equator)
Temporal
- Start
- 2011
- End
- 2015
Provenance
Ordered processing steps, from source to publication.
- source
WorldDEM radar surface model from the TanDEM-X mission (2011 to 2015), edited, infilled and resampled by Airbus Defence and Space to the Copernicus DEM GLO-30 and GLO-90 DGED products, 2021_1 release.
- cloud-optimize
Each 1x1 degree tile converted to a cloud-optimized GeoTIFF by Sinergise: the row and column shared with neighbouring tiles dropped, giving 3600 (GLO-30) or 1200 (GLO-90) rows per tile, DEFLATE compression with floating-point predictor and average-resampled overviews. Published on AWS Open Data with a static STAC catalog per instance.
- index2026-10-15
Items for each instance read from the Element 84 Earth Search STAC API, which carries projection, grid and raster metadata the static AWS catalog lacks, with asset hrefs rewritten from s3:// to HTTPS so readers need no credentials. Snapshotted to STAC GeoParquet, one file per instance, and a GTI tile index written over the elevation tiles at the equatorial resolution. No data is copied.
How to cite
Please cite the dataset and any associated peer-reviewed publications.
European Space Agency (ESA) (2021) Copernicus DEM - Global and European Digital Elevation Model (COP-DEM). Version 2021_1. European Space Agency. https://doi.org/10.5270/ESA-c5d3d65. Accessed through the CGIAR Climate Action Data Hub, https://cgiar-climate-data-hub.github.io/catalog/copernicus-dem_2021_1/.
BibTeX
@misc{copernicus_dem_2021,
title = {Copernicus DEM - Global and European Digital Elevation Model (COP-DEM)},
author = {{European Space Agency (ESA)}},
year = {2021},
version = {2021_1},
publisher = {European Space Agency},
doi = {10.5270/ESA-c5d3d65},
note = {Accessed through the CGIAR Climate Action Data Hub, https://cgiar-climate-data-hub.github.io/catalog/copernicus-dem_2021_1/}
}Attribution
Reproduce this credit line wherever you reuse the data.
© DLR e.V. 2010-2014 and © Airbus Defence and Space GmbH 2014-2018 provided under COPERNICUS by the European Union and ESA; all rights reserved.
Contacts
Who produced this dataset, and who to reach about it.