自制语音助手想做一个查询交通路线的功能,于是就想到了百度地图。在百度地图的服务器端应用中,提供了“轻量级路线规划”API接口,正好可以满足需求。要用这个接口,需要注册百度地图账号并创建一个服务器端的应用。有关开通百度地图服务器端应用的操作,可以参考博文:python调用百度地图api,查询地方的经度纬度,将数据写入excel_python获取当前位置经纬度-CSDN博客
在百度地图开发文档中关于路径规划的示例如下所示。
在ak这里输入自己的api_key后执行,就能看到规划结果了。
请注意:看到红框中的内容了吗?这里需要输入起始地和目的地的经纬度坐标。但我们平时只会输入具体地址,这个经纬度坐标从哪儿获取?这就需要用到百度地图的另一个API接口——地理编码。
在百度地图开发文档中关于地理编码的示例如下所示。
很简单吧?不过有一点需要注意,这里的address必须要写XX市,如果不写则会返回空。
好了,现在知道了路线规划的接口,也知道了地理编码的接口,把它们组合起来,就能做一个自定义的路线规划程序了。如下是我的代码:
import requests
ak = ‘您的AK’
def local_geocode(address):
‘’‘获取地理编码’’’
global ak
result = ''
index0 = address.find('市')
#地址中是否写了XX市的判断
if index0 == -1:
address = "上海市"+address
#如果地址中不含XX市,默认加一个‘上海市’
url = "https://api.map.baidu.com/geocoding/v3"
params = {
"address": address,
"output": "json",
"ak": ak,
}
response = requests.get(url=url, params=params)
if response:
resp = response.json()
if resp['status'] == 0:
#status=0表示接口调用成功,否则就是各种报错了
result = (resp['result']['location']['lng'], resp['result']['location']['lat'])
return result
def route_plan(loc1, loc2, type='transit'):
‘’‘获取规划路线,默认公交路线规划’’’
global ak
origin_url = "https://api.map.baidu.com/directionlite/v1/"
url = origin_url + type
#拼接不同的type,调用不同的路线规划接口,分别是driving,transit,riding,walking
orign = str(loc1[1]) + ',' + str(loc1[0])
destination = str(loc2[1]) + ',' + str(loc2[0])
#地理编码获取的经纬度信息,放到路线规划中需要把位置换一换
params = {
"origin": orign,
"destination": destination,
"ak": ak,
}
response = requests.get(url=url, params=params)
if response:
resp = response.json()
print(resp)
if resp['status'] == 0:
#status=0表示接口调用成功,否则就是各种报错了
distance = resp['result']['routes'][0]['distance']
#起点到终点的距离,单位是米
duration = resp['result']['routes'][0]['duration']
#起点到终点的耗时,单位是秒
data = resp['result']['routes'][0]['steps']
#具体规划路径的key是steps
for step in data:
print(step)
addr1 = input('输入初始地址:')
loc1 = local_geocode(addr1)
addr2 = input('输入目的地:')
loc2 = local_geocode(addr2)
route_plan(loc1, loc2)
执行上面程序,可以得到如下的结果。
如果把transit改成其他三种方式,得到的response数据格式会有些不同,如下图,设计代码的时候需要注意。
好了,这就是完整的python获取百度地图路径规划的代码了。
接下来,我就可以在rasa的actions.py中调用这几个函数,并最终实现语音助手规划出行路径的功能了。相关代码我会在我的公众号“天飓”发布,感兴趣的朋友欢迎关注“天飓”。