Python基于Baidu地图API,将中文地址转化为BD-09坐标

1、AK申请

首先在Baidu地图开发者平台http://lbsyun.baidu.com/apiconsole/key创建一个自己的应用。本次我们主要运用的服务是“地理编码”,即将结构化地址数据转换为对应坐标点(经纬度),默认转化出的坐标格式是BD-09。

Python基于Baidu地图API,将中文地址转化为BD-09坐标_第1张图片

 

 

 

Python基于Baidu地图API,将中文地址转化为BD-09坐标_第2张图片

 

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()

(其中需要根据不同的表格格式进行修改)

 

你可能感兴趣的:(Python基于Baidu地图API,将中文地址转化为BD-09坐标)