EU-DEM

EU-DEM is an elevation dataset covering Europe at a 25 metre resolution.

The dataset was created by merging elevation data from the SRTM and ASTER global datasets, as well as from Soviet topo maps at high latitudes. The datum used is EVRS2000.

Coverage

The dataset covers European Environment Agency member states, plus some countries to the east. Coverage extends to small parts of Northern Africa. Unlike SRTM, EU-DEM includes the Scandinavian regions north of 60°.

EU-DEM elevation
Render of ETOPO1 elevation.

Accuracy

The stated vertical accuracy is ± 7m RMSE. Differences to SRTM and ASTER typically fall within this 7m range even with the datasets using slightly different vertical datums. Elevations for Lake Geneva, Switzerland are 370m, 374m, and 372m for SRTM, ASTER, and EU-DEM respectively.

Coastline

EU-DEM uses NODATA values for elevations over seas and oceans, where both ASTER and SRTM assign these areas an elevation of 0m. This means that Open Topo Data isn't able to interpolate elevations for locations very close to the coast and will return a value of NaN in places where SRTM and ASTER might return a 0m or 1m elevation.

The advantage of the NODATA oceans is that you cane use EU-DEM without clipping to a coastline shapefile.

Adding EU-DEM to Open Topo Data

Make a new folder for the dataset:

mkdir ./data/eudem

Download the dataset from Copernicus. There are 27 files. Unzip them and move all the .TIF files into the data folder (you don't need the .aux.xml, .ovr, or .TFw files).

Your data folder should now contain only 27 TIF files:

ls ./data/eudem

# eu_dem_v11_E00N20.TIF
# eu_dem_v11_E10N00.TIF
# eu_dem_v11_E10N10.TIF
# ...

Next, Open Topo Data needs the filenames to match the SRTM format: the filename should be the coordinates of the lower-left corner, in NS-WE order. For EU-DEM this means two changes to the filenames:

  • swapping the order of the northing and easting,
  • and adding 5 trailing zeroes to each coordinate that Copernicus removed for simplicity.

So eu_dem_v11_E00N20.TIF becomes N2000000E0000000.tif. Here's a Python script to do the transformation, but it might be just as easy to do by hand:

from glob import glob
import os
import re

old_pattern = './data/eudem/eu_dem_v11_E*N*.TIF'
old_paths = list(glob(old_pattern))
print('Found {} files'.format(len(old_paths)))

for old_path in old_paths:
    folder = os.path.dirname(old_path)
    old_filename = os.path.basename(old_path)

    # Extract north and east coords, pad with zeroes.
    res = re.search(r'(E\d\d)(N\d\d)', old_filename)
    easting, northing = res.groups()
    northing = northing + '00000'
    easting = easting + '00000'

    # Rename in place.
    new_filename = '{}{}.tif'.format(northing, easting)
    new_path = os.path.join(folder, new_filename)
    os.rename(old_path, new_path)

You should have the following 27 files:

N0000000E1000000.tif
N1000000E1000000.tif
N1000000E2000000.tif
N1000000E3000000.tif
N1000000E4000000.tif
N1000000E5000000.tif
N1000000E6000000.tif
N2000000E0000000.tif
N2000000E1000000.tif
N2000000E2000000.tif
N2000000E3000000.tif
N2000000E4000000.tif
N2000000E5000000.tif
N2000000E6000000.tif
N2000000E7000000.tif
N3000000E2000000.tif
N3000000E3000000.tif
N3000000E4000000.tif
N3000000E5000000.tif
N4000000E2000000.tif
N4000000E3000000.tif
N4000000E4000000.tif
N4000000E5000000.tif
N5000000E2000000.tif
N5000000E3000000.tif
N5000000E4000000.tif
N5000000E5000000.tif

Create a config.yaml file:

datasets:
- name: eudem25m
  path: data/eudem/
  filename_epsg: 3035
  filename_tile_size: 1000000

Rebuild to enable the new dataset at localhost:5000/v1/eudem25m?locations=51.575,-3.220.

make build && make run

Public API

The Open Topo Data public API lets you query EU-DEM for free:

curl https://api.opentopodata.org/v1/eudem25m?locations=57.688709,11.976404
{
  "results": [
    {
      "elevation": 54.576168060302734, 
      "location": {
        "lat": 57.688709, 
        "lng": 11.976404
      }
    }
  ], 
  "status": "OK"
}

Open Topo Data hosts version 1.1 of the dataset.