我可以在 Python 中使用 geopy 获得高度吗?(带经度/纬度)



这可能吗?

我试过了:

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

但height_metres始终为 0。

请注意,使用地理编码器时,您将需要一个 Google 高程 API 密钥,该密钥现在需要一个启用了计费的项目(截至 2018 年 7 月)。

或者,您可以使用开放式高程公共 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 的一个不错的替代品,抽查表明它工作正常。

可以使用地理编码器而不是使用geopy:

# pip install geocoder
>>> import geocoder
>>> g = geocoder.elevation('<address or [lat,lng]>')
>>> print (g.meters)

如果geopy知道地球上每个点的高度,我会吃我的袜子。 如果不做一些花哨的GoogleEarth/其他数据库搜索来确定高度,这是不可能的(afaik)。

lat, lon, altitude = p之所以有效,是因为Point具有高度属性。 根据消息来源,构造函数高度中唯一被改变的时间是在行altitude = float(altitude or 0)中,它没有得到高度。

最新更新