1、AK申请
首先在Baidu地图开发者平台http://lbsyun.baidu.com/apiconsole/key创建一个自己的应用。本次我们主要运用的服务是“地理编码”,即将结构化地址数据转换为对应坐标点(经纬度),默认转化出的坐标格式是BD-09。
2、访问接口格式
http://api.map.baidu.com/geocoding/v3/?address=北京市海淀区上地十街10号&output=json&ak=您的ak&callback=showLocation //GET请求
3、模编程块介绍
3.1 访问自己拼成的url接口,获得返回json格式的数据
注意:这边url不可用str类型拼接,不然生成的url是无效的,无法访问
1 def getGPS(addr): 2 data1 = { 3 "address":addr 4 } 5 data2 = { 6 'output':'json', 7 'ak':ak 8 } 9 query_string1 = urllib.parse.urlencode(data1) 10 query_string2 = urllib.parse.urlencode(data2) 11 getUrl = url + '?' + query_string1 + '&' + query_string2 12 result = (json.loads(requests.get(getUrl).text)["result"])["location"] # {'lng': 112.5624746369245, 'lat': 37.89936726508969} 13 14 lng = result["lng"] 15 lat = result["lat"] 16 return(lng ,lat)
3.2 读写excel数据
这边用到openpyxl和xlrd库,分别用来写和读操作
我的表格格式,最后两列为生成的坐标经纬度
1 def ReadWriteExcel(): 2 workbook = openpyxl.load_workbook(file) 3 worksheet = workbook.worksheets[1] 4 for i in range(1,len(cols1)): 5 location = sheet1.row_values(i)[1:5] 6 str_location = "山西省"+location[2]+location[3]+location[1] 7 lng,lat = getGPS(str_location) 8 9 worksheet.cell(i+1, 9, lng) 10 worksheet.cell(i+1, 10, lat) 11 12 workbook.save(filename="distance.xlsx")
4、上完整代码
1 # encoding:utf-8 2 import openpyxl 3 import requests 4 import urllib.parse 5 import json 6 import xlrd 7 8 file = 'distance.xlsx' 9 10 url = 'http://api.map.baidu.com/geocoding/v3/' 11 12 ak = "XXXXXXXX" 13 14 wb = xlrd.open_workbook(filename=file) # 打开文件 15 sheet1 = wb.sheet_by_index(1) # 通过索引获取表格 16 cols1 = sheet1.col_values(1) # 获取列内容 len(cols1) 17 18 19 def getGPS(addr): 20 data1 = { 21 "address":addr 22 } 23 data2 = { 24 'output':'json', 25 'ak':ak 26 } 27 query_string1 = urllib.parse.urlencode(data1) 28 query_string2 = urllib.parse.urlencode(data2) 29 getUrl = url + '?' + query_string1 + '&' + query_string2 30 result = (json.loads(requests.get(getUrl).text)["result"])["location"] # {'lng': XX.XXXXXXXXXXX, 'lat': XX.XXXXXXXXXXXXXX} 31 32 lng = result["lng"] 33 lat = result["lat"] 34 return(lng ,lat) 35 36 def ReadWriteExcel(): 37 workbook = openpyxl.load_workbook(file) 38 worksheet = workbook.worksheets[1] 39 for i in range(1,len(cols1)): 40 location = sheet1.row_values(i)[1:5] 41 str_location = "XX省"+location[2]+location[3]+location[1] 42 lng,lat = getGPS(str_location) 43 44 worksheet.cell(i+1, 9, lng) 45 worksheet.cell(i+1, 10, lat) 46 47 workbook.save(filename="distance.xlsx") 48 49 50 ReadWriteExcel()
(其中需要根据不同的表格格式进行修改)