1.获取秘钥
调用百度地图API实现得申请百度账号或者登陆百度账号,然后申请自己的ak秘钥。链接如下:
2.调用API将经纬度信息解析成json信息
3.可以自行通过json格式选择自己想要的数据,比如国家、省份、市区等。
4.批量转换信息
先要批量读取经纬度信息,我是将经纬度信息存在excel表中,然后再通过调用openpyxl中的函数读取经纬度信息。
读取完经纬度信息之后,再for循环遍历每个经纬度,然后再通过调用xlwt中的写入excel的方法存放具体的位置信息。
5.注意事项
调用百度地图API获取经纬度信息是有每天的请求额度限制。
最开始我不想自己编程搞的,但是借用他站的批量解析经纬度的速度实在太慢,于是我打算自己调用api写程序批量导入写出信息。
我是打算一次性跑两千多的数据,但是跑了几次,最多的时候跑到一千多组,就给我说额度不够了。。。很无奈。。。但是这次还是挺有收获的。。。
1 #encoding=utf8 2 import json 3 import urllib.request 4 import openpyxl 5 import xlwt 6 #基于百度地图API下的经纬度信息来解析地理位置信息 7 def getlocation(lat,lng): 8 url = 'http://api.map.baidu.com/geocoder/v2/?location=' + lat + ',' + lng + '&output=json&pois=1&ak=自己的ak秘钥' 9 req = urllib.request.urlopen(url) # json格式的返回数据10 res = req.read().decode("utf-8") # 将其他编码的字符串解码成unicode11 return json.loads(res)12 13 def jsonFormat(lat,lng):14 str = getlocation(lat,lng)15 dictjson={}#声明一个字典16 #get()获取json里面的数据17 jsonResult = str.get('result')18 address = jsonResult.get('addressComponent')19 #国家20 country = address.get('country')21 #国家编号(0:中国)22 country_code = address.get('country_code')23 #省24 province = address.get('province')25 #城市26 city = address.get('city')27 #城市等级28 city_level = address.get('city_level')29 #县级30 district = address.get('district')31 #把获取到的值,添加到字典里(添加)32 # dictjson['country']=country33 # dictjson['country_code'] = country_code34 dictjson['province'] = province35 dictjson['city'] = city36 # dictjson['city_level'] = city_level37 # dictjson['district']=district38 return dictjson39 40 def read_xls():41 wb = openpyxl.load_workbook('TestLocation.xlsx')42 sheets = wb.sheetnames43 # print(sheets, type(sheets))44 # print(wb.sheetnames)45 sheet1 = wb.get_sheet_by_name('Sheet1')46 # for sheet in wb:47 # print(sheet.title)48 ws = wb.active # 当前活跃的表单49 col_range = ws['B:C']50 row_range = ws[2:2034]51 # for col in col_range: # 打印BC两列单元格中的值内容52 # for cell in col:53 # print(cell.value)54 # for row in row_range: # 打印 2-2034行中所有单元格中的值55 # for cell in row:56 # print(cell.value)57 k = 158 # 创建Workbook59 book = xlwt.Workbook(encoding='utf-8') # 创建Workbook,相当于创建Excel=60 sheet2 = book.add_sheet(u'Sheet1', cell_overwrite_ok=True)61 for i,j in ws.iter_rows(min_row=2, max_row=2034, min_col=2,max_col=3): # 打印1-2行,1-2列中的内容62 # for cell in row:63 # print(cell.value)64 # print(cell.value)65 print(i.value,j.value) # 经纬度66 print(jsonFormat(str(j.value),str(i.value))) # 通过经纬度调用函数获取位置67 # print(jsonFormat(str(j.value),str(i.value))['province'],jsonFormat(str(j.value),str(i.value))['city'])68 # 将位置写入excel表中69 sheet2.write(k,3,k)70 sheet2.write(k,0,jsonFormat(str(j.value),str(i.value))['province'])71 sheet2.write(k,1,jsonFormat(str(j.value),str(i.value))['city'])72 book.save('Test_Write.xls')73 k = k + 174 print(k)75 book.save('Test_Write.xls')76 77 if __name__ == '__main__':78 # print(getlocation(lat, lng))79 # print("------------------")80 # print(jsonFormat(lat,lng))81 read_xls()
测试数据和运行结果如下:(以20组数据为例)
初始的经纬度信息:
批量解析经纬度之后的位置信息: