1 數據准備
經過嘗試,百度地圖API需要輸入城市中文名稱才能獲取對應經緯度坐標,因此先將英文的城市名稱轉為中文
一共347個城市
由於在測試過程中發現高德和百度地圖API分別有幾個城市的地址無法獲取經緯度,但是恰好能夠互補,因此使用兩種API聯合獲取347個國內城市的經緯度
需要注意的是該經緯度不是WGS84經緯度,有一定偏差,但是關系不大。
2 高德地圖API
1 先注冊成為開發者
查看地理編碼的輸入和返回參數:
https://lbs.amap.com/api/webservice/guide/api/georegeo
代碼如下:
import requests import json import pprint import pandas as pd import csv import pprint key='**********' #填入自己的key #構建函數 def getlnglat(address): url='https://restapi.amap.com/v3/geocode/geo' params = {'key':key, 'address':address} res = requests.get(url, params) json_data = json.loads(res.text) return json_data #打開cs inpath=r"H:\02Course\00DATA\表格\cityname.xlsx" outpath=r"H:\02Course\00DATA\表格\citylnglat_Gaode.xlsx" df = pd.read_excel(inpath,encoding = 'UTF-8') df['lng'] = 'collng'#創建新列存放經度 df['lat'] = 'collat'#創建新列存放緯度 for i in df.values: b = i[2] #第一列的地址 .strip("'") ind=i[0] print(b) json_data=getlnglat(b) i[7] = json_data['geocodes'][0]['location']#獲取經緯度 df['lng'][ind]=float(i[7].split(",")[0])#經度 df['lat'][ind]=float(i[7].split(",")[1])#緯度 pprint.pprint(json_data) df.to_excel(outpath)
輸出結果為:
3 百度地圖API
參考另一篇文章:https://www.cnblogs.com/icydengyw/p/11795998.html
代碼如下:
import requests,csv import pandas as pd import json import requests import json import pprint ak = '*******'#ak需要去百度地圖申請 def getlnglat(address): url = 'http://api.map.baidu.com/geocoder/v2/?address={}&output=json&ak={}'.format(address,ak) res = requests.get(url) json_data = json.loads(res.text) return json_data inpath=r'H:\02Course\00DATA\表格\cityname.xlsx' outpath=r'H:\02Course\00DATA\表格\citylinlat_Baidu.xlsx' df = pd.read_excel(inpath,encoding = 'UTF-8') df['lng'] = 'collng'#創建新列存放經度 df['lat'] = 'collat'#創建新列存放緯度 for i in df.values: b = i[2] #第一列的地址 print(b) ind=i[0] json_data=getlnglat(b) i[7] = json_data['result']['location']['lng']#獲取經度並寫入 i[8] = json_data['result']['location']['lat']#獲取緯度並寫入 df['lng'][ind]=float(i[7]) df['lat'][ind]=float(i[8]) print(i) df df.to_excel(outpath)
運行結果: