возможно?
я пытался:
from geopy.point import Point
from geopy import geocoders
[...]
p = Point(Latitude, Longitude)
lat, lon, altitude = p
height_metres = altitude
но height_metres всегда равен 0.
возможно?
я пытался:
from geopy.point import Point
from geopy import geocoders
[...]
p = Point(Latitude, Longitude)
lat, lon, altitude = p
height_metres = altitude
но height_metres всегда равен 0.
Обратите внимание, что с геокодером вам понадобится ключ 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, и выборочные проверки показывают, что он работает нормально.
JSONDecodeError: ('Expecting value: line 1 column 1 (char 0)', 'occurred at index 0')
. Вероятно, это не ваша вина, просто я хотел указать на это.
- person Bn.F76; 07.05.2019
Это возможно с геокодером, а не с геопией:
# pip install geocoder
>>> import geocoder
>>> g = geocoder.elevation('<address or [lat,lng]>')
>>> print (g.meters)
Я бы съел свои носки, если бы геопия знала высоту каждой точки на земном шаре. Это невозможно (аффайк) без какого-нибудь причудливого поиска в GoogleEarth / другой базе данных, чтобы определить высоту.
Причина, по которой lat, lon, altitude = p
работает, заключается в том, что Point
имеет атрибут высоты. Согласно источнику, единственный раз, когда высота в конструкторе изменяется, это строка altitude = float(altitude or 0)
, которая не получает высоту.