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()
知识兔(其中需要根据不同的表格格式进行修改)