Open Topo Data

App · 3 actions

Look up the height above sea level of any place on Earth, sea floor included, from public elevation datasets such as SRTM, ASTER, Mapzen and the national datasets for the USA, Europe and New Zealand. Check up to 100 places at once, or sample the elevation along a route to get its climb and descent. No account or API key required.

Actions

ActionWhat it does
Get elevationGet the height above sea level, in metres, of up to 100 places at once from a public elevation dataset: worldwide terrain and sea floor, or a sharper regional dataset for the USA, Europe or New Zealand.
Get elevation profileSample the elevation at evenly spaced points along a route, from its start through any turns to its end, and get the distance travelled at each point, the highest and lowest points and the total climb and descent.
List datasetsList the elevation datasets the public Open Topo Data API serves, with each one's resolution and the area it covers, to pick the sharpest one for a place.

Get elevation

Get the height above sea level, in metres, of up to 100 places at once from a public elevation dataset: worldwide terrain and sea floor, or a sharper regional dataset for the USA, Europe or New Zealand. A place the dataset does not cover comes back without an elevation rather than failing the step. No API key required.

Inputs

LocationslocationstextRequired
The places, each written as latitude,longitude. Separate several with | or put one on each line (up to 100). A list of coordinates from an earlier step works too.
Datasetdatasettext
The elevation dataset to read. Mapzen covers the whole world, sea floor included; the regional ones (NED for the USA, EU-DEM for Europe, NZ DEM for New Zealand) are sharper where they apply. Defaults to Mapzen.One of: mapzen (Mapzen (global, ~30 m)), aster30m (ASTER (global, 30 m)), srtm30m (SRTM (30 m)), srtm90m (SRTM (90 m)), ned10m (NED (USA, 10 m)), eudem25m (EU-DEM (Europe, 25 m)), nzdem8m (NZ DEM (New Zealand, 8 m)), bkg200m (BKG (Germany, 200 m)), etopo1 (ETOPO1 (global, ~1.8 km)), gebco2020 (GEBCO 2020 (global, ~450 m)), emod2018 (EMODnet 2018 (European seas, ~100 m)). Default: mapzen.
Interpolationinterpolationtext
How to estimate the height between the dataset's grid points. Bilinear suits most uses, cubic is smoother, nearest takes the closest grid point as it is. Defaults to bilinear.One of: bilinear (Bilinear (default)), cubic, nearest. Default: bilinear.

Outputs

countnumber
How many points came back.
datasettext
The dataset that was asked for, e.g. 'mapzen'.
found_countnumber
How many of the points have an elevation.
highest_elevationnumber
The highest elevation among the points, in metres.
interpolationtext
The interpolation used: 'bilinear', 'cubic' or 'nearest'.
lowest_elevationnumber
The lowest elevation among the points, in metres.
resultslist
One entry per point, in the order the points were given.
summarytext
One line describing the result, e.g. '2,844 m above sea level (mapzen)'.
Example output
{
  "count": 2,
  "dataset": "mapzen",
  "found_count": 2,
  "highest_elevation": 2844.0,
  "interpolation": "bilinear",
  "lowest_elevation": 1590.0,
  "results": [
    {
      "dataset": "mapzen",
      "elevation": 2844.0,
      "has_data": true,
      "latitude": 46.5586,
      "longitude": 7.8355
    },
    {
      "dataset": "mapzen",
      "elevation": 1590.0,
      "has_data": true,
      "latitude": 39.7471,
      "longitude": -104.9963
    }
  ],
  "summary": "2 of 2 points have an elevation, from 1,590 m to 2,844 m"
}

Get elevation profile

Sample the elevation at evenly spaced points along a route, from its start through any turns to its end, and get the distance travelled at each point, the highest and lowest points and the total climb and descent. Useful for hiking, cycling and running routes. No API key required.

Inputs

RoutepathtextRequired
Two or more points along the route, each written as latitude,longitude and separated by | or new lines: the start, any turns, then the end.
Number of samplessamplesnumber
How many evenly spaced points to read along the route, 2 to 100. Defaults to 20.From 2 to 100. Default: 20.
Datasetdatasettext
The elevation dataset to read. Mapzen covers the whole world, sea floor included; the regional ones (NED for the USA, EU-DEM for Europe, NZ DEM for New Zealand) are sharper where they apply. Defaults to Mapzen.One of: mapzen (Mapzen (global, ~30 m)), aster30m (ASTER (global, 30 m)), srtm30m (SRTM (30 m)), srtm90m (SRTM (90 m)), ned10m (NED (USA, 10 m)), eudem25m (EU-DEM (Europe, 25 m)), nzdem8m (NZ DEM (New Zealand, 8 m)), bkg200m (BKG (Germany, 200 m)), etopo1 (ETOPO1 (global, ~1.8 km)), gebco2020 (GEBCO 2020 (global, ~450 m)), emod2018 (EMODnet 2018 (European seas, ~100 m)). Default: mapzen.
Interpolationinterpolationtext
How to estimate the height between the dataset's grid points. Bilinear suits most uses, cubic is smoother, nearest takes the closest grid point as it is. Defaults to bilinear.One of: bilinear (Bilinear (default)), cubic, nearest. Default: bilinear.

Outputs

countnumber
How many points came back.
datasettext
The dataset that was asked for, e.g. 'mapzen'.
distance_kmnumber
The length of the path, in kilometres.
end_elevationnumber
The elevation at the end of the path, in metres.
highest_elevationnumber
The highest elevation along the path, in metres.
interpolationtext
The interpolation used: 'bilinear', 'cubic' or 'nearest'.
lowest_elevationnumber
The lowest elevation along the path, in metres.
pointslist
The evenly spaced samples, from the start of the path to its end.
start_elevationnumber
The elevation at the start of the path, in metres.
summarytext
One line describing the result, e.g. '2,844 m above sea level (mapzen)'.
total_ascentnumber
The sum of every climb between samples, in metres.
total_descentnumber
The sum of every drop between samples, in metres.
Example output
{
  "count": 5,
  "dataset": "srtm90m",
  "distance_km": 11.643,
  "end_elevation": 2617.0,
  "highest_elevation": 2861.0,
  "interpolation": "bilinear",
  "lowest_elevation": 827.0,
  "points": [
    {
      "dataset": "srtm90m",
      "distance_km": 0.0,
      "elevation": 2861.0,
      "has_data": true,
      "latitude": 46.5586,
      "longitude": 7.8355
    },
    {
      "dataset": "srtm90m",
      "distance_km": 2.911,
      "elevation": 1915.0,
      "has_data": true,
      "latitude": 46.563343,
      "longitude": 7.87294
    },
    {
      "dataset": "srtm90m",
      "distance_km": 5.821,
      "elevation": 827.0,
      "has_data": true,
      "latitude": 46.568075,
      "longitude": 7.910387
    },
    {
      "dataset": "srtm90m",
      "distance_km": 8.732,
      "elevation": 1818.0,
      "has_data": true,
      "latitude": 46.572793,
      "longitude": 7.94784
    },
    {
      "dataset": "srtm90m",
      "distance_km": 11.643,
      "elevation": 2617.0,
      "has_data": true,
      "latitude": 46.5775,
      "longitude": 7.9853
    }
  ],
  "start_elevation": 2861.0,
  "summary": "5 points over 11.643 km, from 827 m to 2,861 m; 1,790 m of climbing and 2,034 m of descent",
  "total_ascent": 1790.0,
  "total_descent": 2034.0
}

List datasets

List the elevation datasets the public Open Topo Data API serves, with each one's resolution and the area it covers, to pick the sharpest one for a place. No API key required.

Inputs

None.

Outputs

countnumber
How many datasets the public API serves.
datasetslist
Every dataset the public API serves.
Example output
{
  "count": 2,
  "datasets": [
    {
      "child_datasets": [],
      "coverage": "Global",
      "label": "ASTER (global, 30 m)",
      "name": "aster30m",
      "resolution": "~30 m"
    },
    {
      "child_datasets": [],
      "coverage": "Latitudes 60\u00b0S to 60\u00b0N",
      "label": "SRTM (90 m)",
      "name": "srtm90m",
      "resolution": "~90 m"
    }
  ]
}

On this page