Skip to content
Advertisement

Efficiently using the OpenElevation API using Python

I have a large set of latitude/longitude coordinates and would like to get the elevation for each. I want to use the OpenElevation API. According to their API Docs, I can get elevation data through the URL: https://api.open-elevation.com/api/v1/lookup?locations=10,10|20,20|41.161758,-8.583933. As you can see from the example URL, it is possible to get many elevations in a single request (provided you are using POST). However, when I try to implement the example they have used:

elevation = requests.post('https://api.open-elevation.com/api/v1/lookup', params={"locations": "10,10"}).content
print(elevation)

This is the result: b'{"error": "Invalid JSON."}'

The URL being submitted is: https://api.open-elevation.com/api/v1/lookup?locations=10%2C10 which is definitely in incorrect format.

Advertisement

Answer

After taking a quick look at the documentation. The POST endpoint requires the parameters be sent in the request body in JSON format with the appropriate headers

Here is a working example:

import requests
import json

response = requests.post(
            url="https://api.open-elevation.com/api/v1/lookup",
            headers={
                "Accept": "application/json",
                "Content-Type": "application/json; charset=utf-8",
            },
            data=json.dumps({
                "locations": [
                    {
                        "longitude": 10,
                        "latitude": 10
                    },
                    {
                        "longitude": 20,
                        "latitude": 20
                    }
                ]
            })
        )

print('Response HTTP Status Code: {status_code}'.format(status_code=response.status_code))
print('Response HTTP Response Body: {content}'.format(content=response.content))

Response:

Response HTTP Status Code: 200
Response HTTP Response Body: b'{"results": [{"latitude": 10, "longitude": 10, "elevation": 515}, {"latitude": 20, "longitude": 20, "elevation": 545}]}'
User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement