Python 通过google api从返回的json中提取Lat/Long(地理编码)

Python 通过google api从返回的json中提取Lat/Long(地理编码),python,json,google-maps-api-3,Python,Json,Google Maps Api 3,我有一个定义,它看起来像下面的块。我想我也遇到了同样的问题。我认为api已经更新,因此lat/long坐标的提取位置可能略有不同。通过在中输入一个示例地址作为参数,我成功地发出了请求,但在我的def()中无法实现。我希望我的定义使用for循环从地址返回lat/long。我不熟悉解析json:/感谢您的帮助 另外,geocode\u结果是否需要是来自我的请求结果代码块的json\u结果 def geocode_address(loc): gmaps = googlemaps.Cl

我有一个定义,它看起来像下面的块。我想我也遇到了同样的问题。我认为api已经更新,因此lat/long坐标的提取位置可能略有不同。通过在中输入一个示例地址作为参数,我成功地发出了请求,但在我的def()中无法实现。我希望我的定义使用for循环从地址返回lat/long。我不熟悉解析json:/感谢您的帮助

另外,
geocode\u结果
是否需要是来自我的请求结果代码块的
json\u结果

 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)


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

>>> 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
使用
.tolist()
以列表的形式获取地址,这样就可以一次一个地将地址传递给google,以获取存储在同名列表中的纬度和经度。显示结果

>>> 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  

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

>>> 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
使用
.tolist()
以列表的形式获取地址,这样就可以一次一个地将地址传递给google,以获取存储在同名列表中的纬度和经度。显示结果

>>> 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  

谢谢比尔·贝尔,你完全正确。我看到了名称到输出的映射。你知道为什么我的基本for循环不会打印(lat,lng),但如果我只打印'location['lat'],location['lng'],它会打印吗?我已经添加了字符串列表的图片,以及没有for循环的所需输出。如何定义
api\u list
?api\u list是第二张图片。这是一个dataframes列,我将其转换为要传递到循环中的列表。问题是,有效负载是为单个地址硬编码的,因此我需要我的字典来保留单个密钥,但每个键值对都有唯一的地址(这将来自api_列表。我尝试了类似这样的操作:
payload={}keys=api_key api_list for I in key:payload[I]=api_list[I]
到目前为止,我已经能够使用您的屏幕截图。现在是坏消息。通常在这里,我们要求使用文本形式的代码,而不是屏幕截图,这样我们就可以更容易地尝试代码。您是否可以发布另一个问题,在其中关注此问题并将代码作为文本发布?我想我需要能够完全按照你得到的
api_列表的方式。当然。很抱歉造成混淆。我稍后会发布。谢谢!你完全正确@Bill Bell。我看到了名称到输出的映射。你知道为什么我的基本for循环不会打印(lat,lng),但如果我只打印'location['lat',location['lng',就会打印出来吗?我已经添加了字符串列表的图片,以及没有for循环的所需输出。如何定义
api_list
?api_list是第二张照片。它是一个数据帧列,我将其转换为要传递到循环中的列表。问题是,负载是针对单个地址硬编码的,所以我需要我的字典来保持单个键,但每个键值对都有唯一的地址(这将来自api_列表。我尝试了类似这样的操作:
payload={}keys=api_-key-api_-list for I in-key:payload[I]=api_-list[I]
到目前为止,我已经能够使用您的屏幕截图。现在是坏消息。通常在这里,我们要求使用文本形式的代码,而不是屏幕截图,这样我们就可以更容易地尝试代码。您是否可以发布另一个问题,在其中关注此问题并将代码作为文本发布?我想我需要能够要准确地了解您是如何获得api列表的,当然可以。很抱歉造成混淆。我将稍后发布。