使用python批量处理excel百度地址的经纬度

直接上代码

#这是最终版本
import pandas as pd
import json
import requests

#获取经纬度
def getlnglat(address): #从本地的xlsx文件中获取商圈名称,作为此函数的实参
    output = 'json'
    ak = '你的ak码(自行去百度地图平台申请)'  # 百度地图密钥ak,“控制台”-“应用管理”-“我的应用”-“创建应用”-“命名、*”提交后会生成AK
    url = 'http://api.map.baidu.com/geocoding/v3/?address={0}&output={1}&ak={2}'.format(address,output,ak)
    print(url)
    html = requests.get(url=url)
    html = html.text
    temp = json.loads(html, strict=False)

    lat = temp['result']['location']['lat']
    lng = temp['result']['location']['lng']

    return lat, lng                                     #纬度 latitude,经度 longitude

def re_html(data):  #生成HTML适配的格式
    data_html = pd.DataFrame(columns=['content'])        #建立一个列名为content的dataframe对象

    for indexs in data.index:  #重新整理成html里适配的格式
        data_html.loc[indexs, 'content'] = '{' + \
                                           '"lat":' + str(data.loc[indexs, '纬度']) + ',' + \
                                           '"lng":' + str(data.loc[indexs, '经度']) + ',' + \
                                           '"address":' + '"' + str(data.loc[indexs, '名称']) + '"' + \
                                           '}' + ','
    data_html.to_csv(r'C:\Users\lupo\OneDrive\桌面\school\school_result.xls', encoding="gbk")     #相对路径,生成了该csv文件

if __name__ == '__main__':
    data = pd.read_excel(r'C:\Users\lupo\OneDrive\桌面\school\pschool_b.xls')
    for index in data.index:                             #index为data的序号,从0开始
        get_location = getlnglat(data.loc[index, '名称'])  #通过序号进行索引,获得MC列下对应的地址名称
        lat = get_location[0]
        lng = get_location[1]
        data.loc[index, '纬度'] = lat
        data.loc[index, '经度'] = lng
        print(data)
    re_html(data)

我的原始数据格式(pschool_b.xls):

处理后的数据格式(school_result.xls): 

     下一步就可以愉快地基于结果使用Arcgis10.2在地图上根据经纬度标点了。

      ps:最大的体会的经常报错result,原来是其中的一个地名百度地图不确定是哪个经纬度,所以报错。类似于原始数据的第14行,如果我不加上西中街小学后面的地址(北京市东城区东直门外大街10号楼),那么这个程序就会报错(因为百度地图不确认西中街小学在哪里),这个时候就需要基于个别地名加具体的地址了,再跑程序。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值