Могу ли я получить высоту с помощью geopy в Python? (с долготой / широтой)

возможно?

я пытался:

from geopy.point import Point
from geopy import geocoders
[...]
p = Point(Latitude, Longitude)
lat, lon, altitude = p
height_metres = altitude

но height_metres всегда равен 0.


person Sven Wiesel    schedule 22.10.2013    source источник


Ответы (3)


Обратите внимание, что с геокодером вам понадобится ключ API повышения прав Google, для которого теперь требуется проект с включенным биллингом (по состоянию на июль 2018 г.).

В качестве альтернативы вы можете использовать общедоступный API с открытыми высотами. Вот пример функции для возврата высоты (обратите внимание на Python 3.6, используемый для форматирования строк):

import requests
import pandas as pd

# script for returning elevation from lat, long, based on open elevation data
# which in turn is based on SRTM
def get_elevation(lat, long):
    query = ('https://api.open-elevation.com/api/v1/lookup'
             f'?locations={lat},{long}')
    r = requests.get(query).json()  # json object, various ways you can extract value
    # one approach is to use pandas json functionality:
    elevation = pd.io.json.json_normalize(r, 'results')['elevation'].values[0]
    return elevation

Обратите внимание, что API может измениться в будущем, и я не могу комментировать достоверность данных, но в настоящее время это хорошая альтернатива Google, и выборочные проверки показывают, что он работает нормально.

person Iain D    schedule 27.06.2018
comment
код работает нормально, если я периодически запрашиваю широту и долготу. Однако как только я пытаюсь использовать его постоянно для заполнения Серии, я получаю JSONDecodeError: ('Expecting value: line 1 column 1 (char 0)', 'occurred at index 0'). Вероятно, это не ваша вина, просто я хотел указать на это. - person Bn.F76; 07.05.2019
comment
Это работает, но со случайной ошибкой, на которую указывает @ Bn.F76, и иногда это немного медленно. Я думаю, это может быть проблема с сервером - person Vasco Cansado Carvalho; 11.12.2020
comment
Я не связан с разработчиками open-elevation, но, глядя на их документацию, я предлагаю вам запросить сразу несколько местоположений, что может решить проблему, указанную выше. Существует ограничение для GET api, но вместо этого они предлагают использовать POST apie. github.com/Jorl17/open-elevation/blob/master/ docs / api.md - person Iain D; 11.12.2020

Это возможно с геокодером, а не с геопией:

# pip install geocoder
>>> import geocoder
>>> g = geocoder.elevation('<address or [lat,lng]>')
>>> print (g.meters)
person Konstantin Varik    schedule 16.07.2014
comment
Для этого требуется ключ API - person Vasco Cansado Carvalho; 11.12.2020

Я бы съел свои носки, если бы геопия знала высоту каждой точки на земном шаре. Это невозможно (аффайк) без какого-нибудь причудливого поиска в GoogleEarth / другой базе данных, чтобы определить высоту.

Причина, по которой lat, lon, altitude = p работает, заключается в том, что Point имеет атрибут высоты. Согласно источнику, единственный раз, когда высота в конструкторе изменяется, это строка altitude = float(altitude or 0), которая не получает высоту.

person Snakes and Coffee    schedule 22.10.2013
comment
Спасибо за ваш комментарий! =) а другого метода для питона нет? Есть много веб-сайтов, где вы можете вставить широту / долготу и вернуть высоту. - person Sven Wiesel; 22.10.2013