【问题标题】:Extracting Lat/Long from returned json via google api(Geocoding)通过 google api(地理编码)从返回的 json 中提取 Lat/Long
【发布时间】:2018-01-23 18:34:30
【问题描述】:

我有一个看起来像下面的块的定义。我想我遇到了同样的问题。我认为 api 已经更新,因此纬度/经度坐标的提取可能处于稍微不同的位置。我通过输入示例地址作为参数成功发出请求,但我无法在我的 def(http://docs.python-requests.org/en/master/user/quickstart/#make-a-request) 中使用它。我希望我的定义使用 for 循环从地址返回纬度/经度。我不熟悉解析json:/任何帮助表示赞赏!

另外,我的请求结果代码块中的geocode_result 是否需要为json_results?

 def geocode_address(loc):
        gmaps = googlemaps.Client(key= creds.GOOGLE_MAPS['api_key'])
        geocode_result = gmaps.geocode(loc)
        lat = json_results[0]["geometry"]["location"]["lat"]
        lon = json_results[0]["geometry"]["location"]["lng"]
        print (lat,lon)

【问题讨论】:

    标签: python json google-maps-api-3


    【解决方案1】:

    我看不出这与您的代码的作用有什么区别。希望对你有用。

    >>> import requests
    >>> payload = {'key':}
    >>> base_url = 'https://maps.googleapis.com/maps/api/geocode/json'
    >>> payload = {'address': '1845 E. Broadway Road Ste. 102, Tempe, AE, 85282'}
    >>> r = requests.get(base_url, params=payload)
    >>> r
    <Response [200]>
    >>> coords = r.json()['results'][0]['geometry']['location']
    >>> coords['lat']
    33.406601
    >>> coords['lng']
    -111.9075196
    

    编辑:

    从一个包含两列的数据框开始,一列是兽医医院的名称,一列是它们的地址。

    >>> import pandas as pd
    >>> df
                                0  \
    0           The Animal Clinic   
    1  Sherbourne Animal Hospital   
    2     Spadina Animal Hospital   
    3   Wellesley Animal Hospital   
    4      Cabbagetown Pet Clinic   
    
                                                       1  
    0            106 Mutual St  Toronto  Ontario M5B 2R7  
    1  320 Richmond Street East Unit 8  Toronto  Onta...  
    2       125 Spadina Avenue  Toronto  Ontario M5V 2K8  
    3         8 Wellesley St W  Toronto  Ontario M4Y 1E7  
    4         239 Gerrard St E  Toronto  Ontario M5A 2G1  
    

    使用.tolist() 以列表的形式获取地址,以便一次将一个地址传递给谷歌,以获取存储在同名列表中的纬度和经度。显示结果。

    >>> import requests
    >>> base_url = 'https://maps.googleapis.com/maps/api/geocode/json'
    >>> latitudes = []
    >>> longitudes = []
    >>> for address in df[1].tolist():
    ...     payload = {'address': address}
    ...     r = requests.get(base_url, params=payload)
    ...     coords = r.json()['results'][0]['geometry']['location']
    ...     latitudes.append(coords['lat'])
    ...     longitudes.append(coords['lng'])
    ...     
    >>> latitudes
    [43.6572571, 43.6535161, 43.6472168, 43.6650199, 43.6617416]
    >>> longitudes
    [-79.37609119999999, -79.3688681, -79.39527749999999, -79.3851912, -79.369494]
    

    现在将结果放入数据框中并显示完整的结果。

    >>> df['latitudes'] = latitudes
    >>> df['longitudes'] = longitudes
    >>> df
                                0  \
    0           The Animal Clinic   
    1  Sherbourne Animal Hospital   
    2     Spadina Animal Hospital   
    3   Wellesley Animal Hospital   
    4      Cabbagetown Pet Clinic   
    
                                                       1  lat  latitudes  \
    0            106 Mutual St  Toronto  Ontario M5B 2R7  -31  43.657257   
    1  320 Richmond Street East Unit 8  Toronto  Onta...  -42  43.653516   
    2       125 Spadina Avenue  Toronto  Ontario M5V 2K8  -20  43.647217   
    3         8 Wellesley St W  Toronto  Ontario M4Y 1E7   19  43.665020   
    4         239 Gerrard St E  Toronto  Ontario M5A 2G1   50  43.661742   
    
       longitudes  
    0  -79.376091  
    1  -79.368868  
    2  -79.395277  
    3  -79.385191  
    4  -79.369494  
    

    【讨论】:

    • 谢谢!你完全正确@Bill Bell。我看到了名称到输出的映射。您是否知道为什么我的基本 for 循环不会打印 (lat,lng),但如果我只执行 `location['lat'], location['lng'] 就会打印?我添加了我的字符串列表的图片,以及没有 for 循环的所需输出。
    • 你如何定义api_list?
    • api_list 是第二张照片。这是一个数据框列,我将其转换为要传递到循环中的列表。问题是有效负载是针对该单个地址进行硬编码的,因此我需要我的字典来保留单个键,但每个键值对都有唯一的地址(这将来自 api_list。我尝试过这样的事情:payload = {} keys = api_key api_list for i in keys: payload[i] = api_list[i]
    • 到目前为止,我已经能够使用您的屏幕截图。现在是坏消息。通常在这里我们要求以文本形式而不是屏幕截图的代码,以便我们可以更容易地尝试代码。请问您是否可以发布另一个您关注此问题的问题并将您的代码作为文本发布?我想我需要能够准确地了解您是如何获得api_list 的。
    • 当然。对困惑感到抱歉。我稍后会发布。
    猜你喜欢
    • 2010-10-25
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多