目錄:
- 申請ak
- 批量獲取地理位置
- 優缺點對比
目的:通過給定的地理位置名稱(如:北京市海淀區上地十街十號),獲取經緯度信息。
1、申請ak
以百度Geocoding API為例: http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
- 申請ak: http://lbsyun.baidu.com/apiconsole/key/create,選擇所需要的API應用,
- 提交之后就會有訪問應用的AK,這就是你訪問的ak:
2、批量獲取地理坐標
對於以下文本文件里的城市:
這里是對以上文本文件里的城市進行查詢地理位置的代碼:
1 # coding : utf-8 2 3 """ 4 This program use api to get lon/lat data. 5 """ 6 7 import sys 8 import requests 9 10 def get_degree(): 11 12 local_path = 'D:/home/research/lung_cancer/data/pm25/process/' 13 14 # 把文本文件里的城市全部放入list里面 15 csv_path = local_path + 'city_2014.csv' 16 loc_list= [] 17 line_list = [] 18 with open(csv_path, 'r') as handle: 19 for line in handle.readlines()[1:]: 20 loc = line.split(',')[1] 21 loc_list.append(loc) 22 line_list.append(line.strip()) 23 24 num = 0 25 26 # 將坐標信息寫入的新文本文件 27 new_path = local_path + 'city_2014_google.csv' 28 f_handle = open(new_path, 'w') 29 30 for i in range(len(loc_list)): 31 loc = loc_list[i] 32 try: 33 # Three type apis:baidu,qq,google. 34 # 百度API 35 # request = ('http://api.map.baidu.com/geocoder/v2/?address=' + loc 36 # + '&output=json&ak=你的ak') 37 # 騰訊API 38 # request = ('http://apis.map.qq.com/ws/geocoder/v1/?address=' + loc 39 # + '&key=你的key') 40 # 谷歌API 41 request = ('https://maps.googleapis.com/maps/api/geocode/json?address=' 42 + loc + '&key=你的key') 43 response = requests.get(request) 44 response.raise_for_status() 45 num += 1 46 print('HTTP request successed!--{}'.format(num)) 47 except Exception as e: 48 print('HTTP request failed!-{}'.format(str(e))) 49 50 print(response.text) 51 52 # eval將json字符串轉變為字典 53 lat = eval(response.text)['results'][0]['geometry']['location']['lat'] 54 lng = eval(response.text)['results'][0]['geometry']['location']['lng'] 55 # 將坐標信息寫入硬盤 56 f_handle.write(line_list[i] + ',' + str(round(lat,2)) + ',' 57 + str(round(lng,2)) + '\n')
查詢時會返回這樣的信息,可以是json或者xml,這里我選擇的是json:
這里是結果,第3、4個分別是緯度和經度:
3、優缺點對比
限制指的是限速和限量。
百度api:限制小,但是不准確; http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
騰訊api:雖准確,但限制太大;
谷歌api:限制中等,且准確;(最終用) https://developers.google.com/maps/documentation/javascript/geocoding