python获取百度地图路径规划

自制语音助手想做一个查询交通路线的功能,于是就想到了百度地图。在百度地图的服务器端应用中,提供了“轻量级路线规划”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中调用这几个函数,并最终实现语音助手规划出行路径的功能了。相关代码我会在我的公众号“天飓”发布,感兴趣的朋友欢迎关注“天飓”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天飓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值