如果你只打印,reply
你会看到:
{u'Status': {u'code': 610, u'request': u'geocode'}}
您正在使用已弃用的 API 版本。移至 v3。看看这个页面顶部的通知。
我以前没有使用过这个 API,但以下提示我(取自这里):
新端点
v3 Geocoder 使用不同的 URL 端点:
http://maps.googleapis.com/maps/api/geocode/output?parameters其中输出可以指定为 json 或 xml。
从 v2 切换的开发人员可能正在使用旧主机名 — maps.google.com 或 maps-api-ssl.google.com(如果使用 SSL)。您应该迁移到新的主机名:maps.googleapis.com。此主机名可用于 HTTPS 和 HTTP。
尝试以下操作:
import urllib,urllib2
try:
import json
except ImportError:
import simplejson as json
params = {'address': '207 N. Defiance St, Archbold, OH', 'sensor' : 'false', 'oe': 'utf8'}
url = 'http://maps.googleapis.com/maps/api/geocode/json?' + urllib.urlencode(params)
rawreply = urllib2.urlopen(url).read()
reply = json.loads(rawreply)
if reply['status'] == 'OK':
#supports multiple results
for item in reply['results']:
print (item['geometry']['location'])
#always chooses first result
print (reply['results'][0]['geometry']['location'])
else:
print (reply)
上面我展示了两种访问结果的经度和纬度的方法。循环将for
支持返回多个结果的情况。第二个只是选择第一个结果。请注意,在任何一种情况下,我都会首先检查status
返回值以确保返回真实数据。
如果您想独立访问纬度和经度,您可以这样做:
# in the for loop
lat = item['geometry']['location']['lat']
lng = item['geometry']['location']['lng']
# in the second approach
lat = reply['results'][0]['geometry']['location']['lat']
lng = reply['results'][0]['geometry']['location']['lng']