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

问题描述 投票:0回答:4

有可能吗?

我尝试过:

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

但 height_meters 始终为 0。

python latitude-longitude geopy
4个回答
18
投票

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


9
投票

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

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

3
投票

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

lat, lon, altitude = p
之所以起作用是因为
Point
具有海拔属性。根据 source,构造函数中海拔高度唯一改变的时间是在
altitude = float(altitude or 0)
行中,该行没有获取海拔高度。


0
投票

可以使用打开地形数据。它为不同的数据集提供免费的公共 API。尝试 e。 G。 https://api.opentopodata.org/v1/aster30m?locations=53.66,13.84。在Python中这是

import requests

lat, lon = (53.66, 13.84)
url = f"https://api.opentopodata.org/v1/aster30m?locations={lat},{lon}"
r = requests.get(url)

data = r.json()
print(data)

给出(为了可读性而格式化):

{
  "results": [
    {
      "dataset": "aster30m",
      "elevation": 9,
      "location": {
        "lat": 53.66,
        "lng": 13.84
      }
    }
  ],
  "status": "OK"
}

直接获取海拔:

elevation = data['results'][0]['elevation']
print(elevation)

打印

9

当使用

eudem25m
数据集而不是
aster30m
时,您会得到
4.061931610107422

对于 Python 示例,Pandas 中有很多坐标

DataFrame
,请参阅我的答案这里

© www.soinside.com 2019 - 2024. All rights reserved.