想必大家刚刚从春节假日回到学习工作中,而每年春节期间的春运又必然是一个热门话题。笔者今年年前也是打算自驾出行的,接近九百公里的长途。临近出行前,一遍一遍的用手机刷地图,看看不同时段的拥堵情况,时间预估,以便能尽量挑选一个最佳的出行时间。费时费力也费心,所以想想不如写个小软件来自动查询并计算,由此预估一个相对靠谱的出行时间点。
大致思路是每分钟查询一次导航规划路线所预估的花费时间作为纵坐标,与当时的时刻作为横坐标形成一个趋势波形图。由此预测出峰谷点。当然,也可以设计出更详细更靠谱的算法,从而得出更准确的预测。
主要方法跟此前的文字转语音工具(发送关键词"TTS"获取早期文章)是类似的。也即是调用百度地图API,在线获取我们所需要的数据,记录并统计分析。
百度API:首先的有百度账号,进入【百度地图开放平台】(http://lbsyun.baidu.com/)。进入【开发文档】--【服务接口】--【Web服务API】,点击打开页面。点击左侧【路线规划】--【路线规划 v2.0】。重点阅读【服务文档】,其中的驾车路线规划:
http://api.map.baidu.com/direction/v2/driving?origin=40.01116,116.339303&destination=39.936404,116.452562&ak=您的ak
这是一个最基础的请求格式,根据自身需要以及【服务文档】所介绍的参数配置,可以有更个性化的定制。
有几点注意事项:
1. API调用是有配额限制的,根据用户认证等级不同有不同的限制,如下图所示:普通用户仅2000次,认证用户则有3万次,对于我们这种小应用已经足够。备注:百度地图API目前均不收费,无论是个人使用还是商业应用,均免费使用。虽然有限额,但是如果有实际真实需求,日使用量即使超百万级别,也是可以申请免费扩容的。
2. 前面提到的接口格式里面,有一个重要的参数就是我们的起始地点的地图坐标。经过这次学习,也知道了一个常识――地图数据应国家保密要求,是经过加密了的,不允许直接提供GPS经纬度坐标系。具体坐标系的含义如下所述,其中使用百度地图,我们通常使用的就是百度自家的坐标系了BD09.
坐标系说明
WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。
GCJ02:是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。
BD09:为百度坐标系,在GCJ02坐标系基础上再次加密。其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标
路线规划服务API v2.0的输入参数支持以上三种坐标系,开发者无需进行任何坐标转换,通过请求参数"coord_type"指明所使用的坐标系即可。输出参数支持国测局坐标(gcj02)和 百度坐标(bd09ll)两种坐标,通过请求参数"ret_coordtype"进行设置。
GCJ02:是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。
BD09:为百度坐标系,在GCJ02坐标系基础上再次加密。其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标
路线规划服务API v2.0的输入参数支持以上三种坐标系,开发者无需进行任何坐标转换,通过请求参数"coord_type"指明所使用的坐标系即可。输出参数支持国测局坐标(gcj02)和 百度坐标(bd09ll)两种坐标,通过请求参数"ret_coordtype"进行设置。
3. 获取坐标。【百度地图开放平台】--【开发文档】--【工具支持】--【坐标拾取器】,运用这个工具即可获取物理地址的坐标参数。如北京市东城区人民政府的坐标就是【116.422806,39.934797】,但是一定要注意的是:使用的时候需要将坐标反转过来,否则会报错,如刚才的坐标写成【39.934797,116.422806】才有效,原因不明。
至于LabVIEW代码就比较简单了,如下图所示。使用HTTP_GET向服务器发送请求,然后解析返回字符串即可。为了保证持续不间断运行,注意在HTTP_GET后面的错误给清除掉,以免由于服务器或网络不稳定原因导致程序停止运行。
介绍到此结束。下面分享一组数据。
第一组:是收集的部分数据,包含总里程,单位是公里;时间,单位是小时;高速收费金额,单位是元;收费里程,单位是米。
第二组:绘制的简易波形趋势图,纵坐标是耗费时间,单位为小时,横坐标为时刻,每分钟一个点,具体起始时刻要看记录。
第三组:嗯,这是笔者上下班路线的早/晚高峰的数据 :-)
第四组:春运整体拥堵趋势图
PS1: 如果有同学喜欢高德地图导航的,也可以把文中的API换成高德的。笔者高德也注册有账号,体验了一下,大致差不多,甚至格式都是一样的,但是高德的额度没有明确免费,目前的个人免费额度也是3万/天。
PS2:哦,最后近900公里的里程,花费了15个小时,包含服务区休息时间以及路上拥堵时间,还算是在预期内 :-)
Reference
- 转载至微信公众号:LabVIEW-Jobs
This post is from Wechat account: LabVIEW-Jobs
2. 有疑问可以联系support@itestgroup.com
Any questions, please query at support@itestgroup.com more information click here