python2 环境下利用google geocoding api获取城市经纬度信息。
1.[代码][Python]代码
import urllib, urllib2
import json
class GeoCoding(object):
def __init__(self, key = ' '):
self.url_para = {'address': '',
'sensor': 'false',
'language': 'zh-CN'}
self.url = 'http://maps.googleapis.com/maps/api/geocode/json'
self.geo_info_list = []
def get_latlng_by_name(self, geo_name):
self.url_para['address'] = geo_name.encode('utf-8')
arguments = urllib.urlencode(self.url_para)
url_get_geo = self.url + '?' + arguments
handler = urllib2.urlopen(url_get_geo)
resp_data = handler.read()
handler.close()
st = self.parse_ret_json(resp_data)
return self.geo_info_list
def parse_ret_json(self, ret_str):
parse_st = False
ret_json = json.loads(ret_str)
if ret_json['status'] == 'OK':
#get lat lng and addr
for geo_info in ret_json['results']:
#print(geo_info)
geo_dict = {'lat': geo_info['geometry']['location']['lat'],
'lng': geo_info['geometry']['location']['lng'],
'addr': geo_info['formatted_address'],
'city':'',
'state_province':'',
'country':'',
'types': geo_info['types']}
#get city state_provine country
for addr_comp in geo_info['address_components']:
if 'country' in addr_comp['types']:
geo_dict['country'] = addr_comp['long_name']
elif 'administrative_area_level_1' in addr_comp['types']:
geo_dict['state_province'] = addr_comp['long_name']
elif 'sublocality' in addr_comp['types'] or \
'locality' in addr_comp['types'] or \
'administrative_area_level_2' in addr_comp['types'] or \
'administrative_area_level_3' in addr_comp['types']:
geo_dict['city'] = addr_comp['long_name']
self.geo_info_list.append(geo_dict)
parse_st = True
print(self.geo_info_list)
else:
parse_st = False
print(ret_json['status'])
return parse_st