ITPub博客

首页 > 数据库 > 数据库开发技术 > 百度API的调用

百度API的调用

原创 数据库开发技术 作者:derekwh 时间:2021-10-12 12:58:50 0 删除 编辑
百度地图是平时经常用到的工具,有很多功能都可以api直接调用。本文介绍常用的经纬度转换、测距离等实用性的工具。

注:本文的ak码一周后会删除。

创建ak码

调用百度API首先要在百度控制台中,创建应用,生成ak码。

调用方法

1.调用经纬度转换成地址 python调用代码。

#单个经纬度到地址
import pandas as pd
import json
from urllib.request import urlopen, quote
import requests
AK =  'w0tqnxXPboagGGdrWZr258ch5awnlPa6'#***换成自己的ak码,本AK码一周后删除
lng=  122.9893 #经度
lat=  41.1162#纬度
url_drive='https://api.map.baidu.com/reverse_geocoding/v3/?ak={}&output=json&coordtype=wgs84ll&location={},{}'.format(AK,lat,lng)
result_drive=json.loads(urlopen(url_drive).read())
result_drive

其查到的结果是:

详细地址:

平时经常会批量调用,一个个调用太慢了。可以编写批量经纬度转地址。只需要导入数据增加一个for循环即可。
import pandas as pd
import json
from urllib.request import urlopen, quote
import requests
data = pd.read_excel('经纬度转地址.xlsx')#相对路径
for i in data.index:  
    lng=data.loc[i,'经度'] 
    lat=data.loc[i,'纬度'] 
    AK = data.iat[0,0]#***换成自己的ak码
    url_drive='https://api.map.baidu.com/reverse_geocoding/v3/?ak={}&output=json&coordtype=wgs84ll&location={},{}'.format(AK,lat,lng)
    result_drive=json.loads(urlopen(url_drive).read())
    if result_drive=="":
        data.loc[i,'地址']=""
    elif result_drive['status'] == 0:
        data.loc[i,'地址']=result_drive['result']['formatted_address']
        data.loc[i,'省份']=result_drive['result']['addressComponent']['province']
        data.loc[i,'城市']=result_drive['result']['addressComponent']['city']
    else:
         data.loc[i,'地址']=""
输出的data结果如下:

2.地址转经纬度 原理如上面一样,这里只上代码:

import pandas as pd
import json
from urllib.request import urlopen, quote
import requests
data = pd.read_excel('地址转经纬度.xlsx')#相对路径
def get_lng_lat(address):
    url = 'http://api.map.baidu.com/geocoding/v3/?address='#百度开发文档查询链接地址
    ak = data.iat[0,0]#输入自己的ak码,在导入文件中
    url_i = url + quote(address)  + '&output=json&ak=' + ak# 由于本文地址变量为中文,为防止乱码,先用quote进行编码
    req = urlopen(url_i)
    res = req.read().decode()
    temp = json.loads(res)#读取内容
    if temp['status']==0 :  # 限定了信心值大于20
        lng = temp['result']['location']['lng']    # lng longitude 经度值
        lat = temp['result']['location']['lat'] # lat latitude  纬度值
        c=temp['result']['comprehension']#解析误差,方便后面核对 ,为0的时候,可能地址未定位清楚,建议检查  小于20的定位。
    else:
        lng = 0
        lat = 0#未定位到的,取0
        c=0
    return lng,lat,c 
for i in data.index:
    lng,lat,c = get_lng_lat(data.loc[i,'地址'])
    data.loc[i,'经度'] = lng
    data.loc[i,'纬度'] = lat
    data.loc[i,'c'] = c
data
对应准确度较低的(百度开发文档介绍,c在50以上准确度较低),需要自行核对一下。

3.输入两地经纬度算距离

import pandas as pd
import json
from urllib.request import urlopen
data=pd.read_excel('输入数据.xlsx',sheet_name=0)
datalist = []
for i in range(len(data)):
    out_lat = data.at[i,'起始地纬度']#起始地纬度
    out_lng = data.at[i,'起始地经度']#起始地经度
    des_lat = data.at[i,'目的地纬度']#目的地纬度
    des_lng = data.at[i,'目的地经度']#目的地经度
    AK = data["AK码"][0]#***换成自己的ak码
    url_drive='http://api.map.baidu.com/directionlite/v1/driving?origin={},{}&destination={},{}&ak={}'.format(out_lat,out_lng,des_lat,des_lng,AK)
    result_drive=json.loads(urlopen(url_drive).read())
    if result_drive['status']==0:
        distance_drive=round(result_drive['result'][ 'routes'][0]['distance']/1000,2)
        datalist.append(distance_drive)
    else:
        datalist.append(" ")                
data['百度导航距离:km']=datalist
df=data.loc[:,['起始地纬度','起始地经度','目的地纬度', '目的地经度','百度导航距离:km']]
df

输出结果如下:

调用原理

调用其实是爬取百度api开发文档中的网站信息,可以结合百度开发文档介绍,改变调用参数。另外还要注意调用额度限制。

本文介绍了百度API的基础使用,并介绍了Python调用百度API的基础代码,后续我会研究其他API的使用分享给大家。


原文作者:Python学习杂记;如有侵权,请联系管理员删除。

下一篇: Python制作gif动图
请登录后发表评论 登录
全部评论
央企算法工程师,微信公众号: python数智工坊

注册时间:2021-03-14

  • 博文量
    305
  • 访问量
    162348