# Open Topo Data

> 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.

App · 3 actions. Web page: https://docs.lodol.com/docs/integrations/open-topo-data

## Actions

### 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**

- Locations (`locations`, text, required): 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.
- Dataset (`dataset`, text): 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`.
- Interpolation (`interpolation`, text): 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**

- `count` (number): How many points came back.
- `dataset` (text): The dataset that was asked for, e.g. 'mapzen'.
- `found_count` (number): How many of the points have an elevation.
- `highest_elevation` (number): The highest elevation among the points, in metres.
- `interpolation` (text): The interpolation used: 'bilinear', 'cubic' or 'nearest'.
- `lowest_elevation` (number): The lowest elevation among the points, in metres.
- `results` (list): One entry per point, in the order the points were given.
- `summary` (text): One line describing the result, e.g. '2,844 m above sea level (mapzen)'.

**Example output**

```json
{
  "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**

- Route (`path`, text, required): 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 samples (`samples`, number): How many evenly spaced points to read along the route, 2 to 100. Defaults to 20. From 2 to 100. Default: `20`.
- Dataset (`dataset`, text): 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`.
- Interpolation (`interpolation`, text): 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**

- `count` (number): How many points came back.
- `dataset` (text): The dataset that was asked for, e.g. 'mapzen'.
- `distance_km` (number): The length of the path, in kilometres.
- `end_elevation` (number): The elevation at the end of the path, in metres.
- `highest_elevation` (number): The highest elevation along the path, in metres.
- `interpolation` (text): The interpolation used: 'bilinear', 'cubic' or 'nearest'.
- `lowest_elevation` (number): The lowest elevation along the path, in metres.
- `points` (list): The evenly spaced samples, from the start of the path to its end.
- `start_elevation` (number): The elevation at the start of the path, in metres.
- `summary` (text): One line describing the result, e.g. '2,844 m above sea level (mapzen)'.
- `total_ascent` (number): The sum of every climb between samples, in metres.
- `total_descent` (number): The sum of every drop between samples, in metres.

**Example output**

```json
{
  "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**

- `count` (number): How many datasets the public API serves.
- `datasets` (list): Every dataset the public API serves.

**Example output**

```json
{
  "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"
    }
  ]
}
```
