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

Sve*_*sel 4 python latitude-longitude geopy

有可能的?

我试过:

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

但是height_metres总是0.

Iai*_*n D 7

请注意,使用地址解析器,您将需要一个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
Run Code Online (Sandbox Code Playgroud)

请注意,API将来可能会更改,我无法评论数据的准确性,但是目前它是Google的不错选择,抽查表明它可以正常工作。


小智 6

地理编码器可能没有geopy:

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

  • 这需要 API 密钥 (3认同)

Sna*_*fee 3

如果 geopy 知道地球上每个点的高度,我会吃我的袜子。如果不进行一些奇特的 GoogleEarth/其他数据库搜索来找出海拔高度,这是不可能的(据我所知)。

之所以lat, lon, altitude = p有效是因为它Point具有海拔属性。根据消息来源,构造函数中海拔高度发生变化的唯一时间是在行中altitude = float(altitude or 0),该行没有获取海拔高度。