webAPI百度地图轻量驾车路线规划规划
- 一、驾车路线规划说明
- 1.接口说明
- API服务地址
- 请求参数
- 返回参数
- 二、python核心代码
- 1.轻量路线规划代码封装
- 2.批量读取起始点信息
- 三、直线距离计算
轻量级路线规划服务(又名DirectionLite API )是一套REST风格的Web服务API,以HTTP/HTTPS形式提供了路线规划服务。相较于Direction API,DirectionLite API更注重服务的高性能和接口的轻便简洁,满足基础的路线规划需求,并不具备Direciton API中的驾车多路线/未来出行和公交跨城规划等高级功能。DirectionLite API支持驾车、骑行、步行、公交路线规划,支持中国大陆地区。
一、驾车路线规划说明
官方文档:https://lbsyun.baidu.com/faq/api?title=webapi/guide/webservice-lwrouteplanapi/dirve#
1.接口说明
根据起终点坐标规划驾车出行路线和耗时,支持:
- 支持10个途经点
- 支持设置偏好:常规路线、不走高速、躲避拥堵
- 支持传入起点车头方向,辅助判断起点所在正逆向车道,辅助更准确算路
API服务地址
https://api.map.baidu.com/directionlite/v1/driving?origin=40.01116,116.339303&destination=39.936404,116.452562&ak=您的AK
//GET请求
请求参数
字段名称 | 字段含义 | 字段类型 | 必填 | 备注 |
---|---|---|---|---|
ak | 开发者密钥,AK申请 | string | 是 | |
origin | 起点 | double,double | 是 | 起点经纬度,格式为:纬度,经度;小数点后不超过6位,40.056878,116.30815 |
destination | 终点 | double,double | 是 | 终点经纬度,格式为:纬度,经度;小数点后不超过6位,40.056878,116.30815 |
返回参数
其中:
- distance 路段距离 单位:米 ;
- duration 路段耗时 单位:秒;
二、python核心代码
1.轻量路线规划代码封装
- ak,需要服务端AK
# 百度地图轻量路线规划距离测算
def get_urls(lat1, lng1, lat2, lng2):
url = "https://api.map.baidu.com/directionlite/v1/driving?origin=" + str(lat1) + "," + str(lng1) + "&destination=" + str(lat2) + "," + str(lng2) + ""
url = url + "&ak=7dQBLdpcG***"
r = requests.get(url)
res = json.loads(r.text)
# print(res['result']['routes'][0]['distance'])
# print(res['result']['routes'][0]['duration'])
# 判断是否正常解析
if res['status'] == 0:
content = str(lat1) + "," + str(res['result']['routes'][0]['distance']) + "," + str(res['result']['routes'][0]['duration']) + "\n"
else:
content = str(lat1) + ",0,0" + "\n"
# 写入文件
with open('data.csv', 'a') as d:
d.write(content)
return ""
2.批量读取起始点信息
将要计算的起始点经纬度保存为txt格式,读取后通过测算函数进行转化。
# 读取起始点信息;
with open(r'add.txt', 'r', encoding='utf-8') as f:
# 读取地址信息列表
address = f.read().split()
# 地址转换
i = 0
for item in address:
# print(item)
newAdd = item.split(',')
# print(newAdd)
# print(newAdd[0], newAdd[1], newAdd[2], newAdd[3])
# 调用百度转换API封装函数;
get_urls(newAdd[0], newAdd[1], newAdd[2], newAdd[3])
print("第{}个起始点已转换".format(i + 1))
if i % 99 == 0 and i > 0:
print("第", i + 1, "个数据,执行延迟策略.")
time.sleep(1)
i += 1
三、直线距离计算
from math import radians,sin,cos,asin,sqrt
def haversine_dis(lon1, lat1, lon2, lat2):
#将十进制转为弧度
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
#haversine公式
d_lon = lon2 - lon1
d_lat = lat2 - lat1
aa = sin(d_lat/2)**2 + cos(lat1)*cos(lat2)*sin(d_lon/2)**2
c = 2 * asin(sqrt(aa))
r = 6371 # 地球半径,千米
return c*r*1000
@漏刻有时