【问题标题】:Can I get the altitude with geopy in Python? (with Longitude/Latitude)我可以在 Python 中使用 geopy 获得海拔高度吗? (带经度/纬度)
【发布时间】:2013-10-22 08:50:16
【问题描述】:

有可能吗?

我试过了:

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

但 height_metres 始终为 0。

【问题讨论】:

    标签: python latitude-longitude geopy


    【解决方案1】:

    请注意,使用地理编码器时,您将需要一个 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 的一个不错的替代品,抽查表明它运行良好。

    【讨论】:

    • 如果我间歇性地查询纬度和经度,代码可以正常工作。但是,一旦我尝试连续使用它来填充系列,我就会得到JSONDecodeError: ('Expecting value: line 1 column 1 (char 0)', 'occurred at index 0')。这可能不是你的错,只是想指出这一点。
    • 这可行,但偶尔会出现@Bn.F76 指出的错误,有时它也有点慢。我猜这可能是服务器问题
    • 我与 open-elevation 的开发人员没有任何关系,但查看他们的文档建议您一次请求多个位置,这可能会解决上述问题。 GET api 有一个限制,但他们建议改用 POST api。 github.com/Jorl17/open-elevation/blob/master/docs/api.md
    【解决方案2】:

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

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

    【讨论】:

    • 这需要 API 密钥
    【解决方案3】:

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

    lat, lon, altitude = p 起作用的原因是因为Point 具有高度属性。根据source,唯一改变构造函数高度的时间是在altitude = float(altitude or 0)行中,它没有得到高度。

    【讨论】:

    • 感谢您的评论! =) 但是python没有其他方法吗?有很多网站可以粘贴纬度/经度并返回高度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    • 2012-10-07
    • 2016-01-11
    • 1970-01-01
    • 2018-03-28
    相关资源
    最近更新 更多