批量调用百度地图API获取地址经纬度坐标
由于后面有更新,代码部分建议移步参考:https://www.cnblogs.com/icydengyw/p/13961837.html
1 申请密匙
注册百度地图API:http://lbsyun.baidu.com/index.php?title=webapi
点击左侧 “获取密匙” ,经过填写个人信息、邮箱注册等,成功之后在开放平台上点击“创建应用”,填写相关信息,在这里特别说明的是,在IP白名单框里,如果不清楚自己的IP地址,最好设置为:*。提交后,在你创建应用的访问应用(AK)那一栏就是你的密钥。
2 构造经纬度获取函数
使用百度Web服务API下的Geocoding API接口来获取你所需要地址的经纬度坐标
接口文档见:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
导入所需的库
from urllib.request import urlopen,quote import requests,csv import pandas as pd #导入库
根据服务文档中的请求格式写出获取经纬度的函数:
def getlnglat(adress): url = 'http://api.map.baidu.com/geocoder/v2/?address=' output = 'json' ak = '密匙编号' add = quote(adress)#使用quote进行编码 为了防止中文乱码 url2 = url + add + '&output=' + output + '&ak=' + ak req = urlopen(url2) res = req.read().decode() temp = json.loads(res) return temp
3 根据地址获取经纬度
用python读取csv文件的数据,并将location列单独读出来,批量获取经度、纬度坐标
#打开csv df = pd.read_csv('sites.csv',encoding = 'GBK') df['lng'] = 'collng'#创建新列存放经度 df['lat'] = 'collat'#创建新列存放纬度 dim = df.shape [row,col] = dim#获取行列 for i in df.values: b = i[2] #第三列的地址 print(b) i[3] = getlnglat(b)['result']['location']['lng']#获取经度并写入 i[4] = getlnglat(b)['result']['location']['lat']#获取纬度并写入 print(i) df df.to_excel('sites2.xlsx')
原始sites.csv如下
输出结果
注意
http://lbsyun.baidu.com/index.php?title=coordinate
参考:
如果您想调用服务器端的坐标转换方法,请参考坐标转换API
如果您想在JS的前端网页中使用坐标转换功能,请参考JavaScript API坐标转换示例
如果您想在Android终端系统上使用坐标转换功能,请参考Android地图SDK坐标转换开发指南
如果您想在iOS的终端系统上使用坐标转换功能,请参考iOS地图SDK坐标转换开发指南