Python 通过google api从返回的json中提取Lat/Long(地理编码)
我有一个定义,它看起来像下面的块。我想我也遇到了同样的问题。我认为api已经更新,因此lat/long坐标的提取位置可能略有不同。通过在中输入一个示例地址作为参数,我成功地发出了请求,但在我的def()中无法实现。我希望我的定义使用for循环从地址返回lat/long。我不熟悉解析json:/感谢您的帮助 另外,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
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列表的,当然可以。很抱歉造成混淆。我将稍后发布。