博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python调用百度地图API实现批量经纬度转换为实际省市地点(api调用,json解析,excel读取与写入)...
阅读量:5237 次
发布时间:2019-06-14

本文共 3352 字,大约阅读时间需要 11 分钟。

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组数据为例)

初始的经纬度信息:

批量解析经纬度之后的位置信息:

 

转载于:https://www.cnblogs.com/shixinzei/p/11029279.html

你可能感兴趣的文章
前端各种mate积累
查看>>
jQuery 1.7 发布了
查看>>
Python(软件目录结构规范)
查看>>
Windows多线程入门のCreateThread与_beginthreadex本质区别(转)
查看>>
Nginx配置文件(nginx.conf)配置详解1
查看>>
linux php编译安装
查看>>
name phone email正则表达式
查看>>
721. Accounts Merge
查看>>
「Unity」委托 将方法作为参数传递
查看>>
重置GNOME-TERMINAL
查看>>
redis哨兵集群、docker入门
查看>>
hihoCoder 1233 : Boxes(盒子)
查看>>
oracle中anyData数据类型的使用实例
查看>>
C++对vector里面的元素排序及取任意重叠区间
查看>>
软件测试——性能测试总结
查看>>
12.4站立会议
查看>>
Java Concurrentmodificationexception异常原因和解决方法
查看>>
客户端访问浏览器的流程
查看>>
codeforces水题100道 第二十二题 Codeforces Beta Round #89 (Div. 2) A. String Task (strings)
查看>>
c++||template
查看>>