当前很多学校的校园内部已经采用电瓶车等新能源汽车来作为公共的交通工具为教师和学生提供交通便利. 但是在某些时段, 比如临收班前或者高峰期, 学生或者教师需要及时知道校园巴士(BUS)的剩余车次以及等待时间. 很显然, 很多学校并不能如城市中公交车上的实时监控系统那样使用车载GPS/COMPASS监控系统来满足这一需求. 因为对于学校内部公共交通这种应用场景, 这样的实施方案部署成本高, 运营的费用也高, 而且使用起来并不灵活和方便.
本文采用校园巴士的司机自身所携带的智能手机作为采集终端, 通过手机APP采集司机的经纬度位置信息, 以此作为该台校园巴士的位置信息, 利用移动互联网将该位置信息传递给后台. 后台则借助于地图服务器, 根据不同司机手机所传递过来的位置信息以Web的方式呈现给用户. 学生或者教师只需要扫描一个二维码就可以链接到共享的服务平台上, 进而可以方便地得到校园巴士的实时运行轨迹和在轨运行车次. 本系统直接使用司机的智能手机作为校园巴士的位置采集终端, 省却了购买专门的获取巴士位置数据的智能终端设备的费用, 同时可以利用学校的Wi-Fi网络节省移动通信流量, 具有成本低、部署快、使用方便、维护简单等优点.
2 系统架构本系统主要分为3个部分, 分别是采集端、服务器、服务端, 如图1所示.
采集端主要是指校园巴士司机的智能手机, 采集端的实现流程如图2所示. 用户在登录界面输入账号密码, 验证通过后先加载用户所在位置的地图, 接着启用手机定位功能, 在经纬度信息后, 把地理位置信息传输到云端服务器, 服务器会处理信息并将位置信息存入数据库, 采集端则根据位置信息在电子地图上把电瓶车实时位置标注出来, 之后每隔5 s获取一次位置信息并执行更新传输和标注操作.
当采集端以指定域名向服务器访问接口, 首先得进行域名解析, 向域名服务器DNS询问域名所对应的IP地址如果找到了就发送信号, 若状态码为200则请求成功. 域名所在的服务器会根据请求的端口号将请求送到监听该端口的服务器程序. 如果有对应程序, 则将该位置坐标存储在数据库中.
当用户打开服务端界面时, 服务器就将用户的请求以Web方式呈现, 把所有电瓶车的当前所在位置完整地显示在电子地图上, 如图3所示.
3 位置信息的获取与地图的显示 3.1 位置信息的获取
校园巴士的位置信息获取依赖于巴士司机所携带的智能手机, 通过HTML5可以方便地获取该手机的经纬度等位置信息[1].
在调用手机位置信息之前需要进行一些参数设置, 如图4所示.
enableHighAccuracy是很关键的属性, 表示是否使用高精度定位, 若选择false, 系统将无法调用GPS定位, 而改用IP定位或者基站定位, 其地理位置误差可达200 m-500 m, 严重影响使用, 所以应该使用true, 控制位置误差在10 m以内.
showCircle属性为false时, 表明不显示定位结果的范围圆.
showMarker属性为false时, 因为本系统将使用自己设置的标记, 所以不显示原本的定位结果标记.
showButton属性为false时, 为不在地图上一个点击后可以显示触发定位的图标, 本系统不采用触发方式, 而使用定时自动触发定位.
Timeout属性为设置定位超时, 本系统设置为5 s, 当5 s还不能获得当前位置时, 将会返回定位失败的状态.
zoomToAccuracy属性为设定系统定位成功后调整地图视野范围使定位位置及精度范围在视野内可见[2].
在设置好定位的相关参数后即可通过getCurrentPosition定位函数接口实现定位技术, 如图5所示.
Geolocation permission denied 提示用户关闭了浏览器或者APP的定位权限或者没打开手机的定位服务, 或者当前页面为非安全页面, iOS10或者Chrome等会禁止非安全页面的定位请求. 如果网页所处的域名还不支持HTTPS应该尽快升级, 安全页面指的是支持HTTPS的Web站点, 而且是通过https协议打开的页面.
在完成这个函数后将会根据定位获取的状态值进行下一步操作, 若定位失败就会转为城市定位, 把地图中心定在手机所在城市的中心, 并且把Marker也定在此. 如果定位成功就会把地图中心点和Marker定在精确的经纬度坐标上[3].
3.2 地图的显示后台的地图服务采用的是高德地图作为服务引擎, 利用高德开放者平台提供的API预先定义的函数接口接入, 首先在网页中引用高德地图JavaScript API入口脚本[4]:
<script type=“text/javascript” src=‘https://webapi. amap.com/maps?v=1.3&plugin=AMap.Geolocation, Amap.ToolBar, Amap.Geocoder, Amap.PlaceSearch, Amap.Autocomplete, Amap.Driving&key=*****’></ script>
再创建一个Marker, 当定位信息出来后可以把Marker放置在电瓶车当前所在的位置, offset属性为Marker放置的偏移量, Pixel (0, 0)时marker左上角对准position的位置, Pixel(–10, –32)的时候, 锚点对准position, 如图7所示.
4 系统的实施与联调 4.1 系统实施
本系统使用的是阿里云虚拟服务器[5,6], 该服务器搭建方便且资费便宜, 完全适合该系统的开发测试工作. 搭建服务器的过程如下:
(1)在阿里云上购买一台虚拟云主机(Linux操作系统), 如图8所示.
(2)购买域名并进行云解析, 如图9所示.
(3)将整个项目代码通过FTP工具上传到云主机空间中(注意: 项目要上传到htdocs目录下).
(4)最后在云数据库上创建一个表名为position的表, 如图10所示.
采集端要将数据传输到该数据库中, 需要对连接数据库参数的进行实现设置, 如数据库的连接地址、用户名和密码, 然后调用PHP的mysql_connect()方法连接到远程数据库, 接着使用mysql_select_db()方法对指定数据库名字进行数据库操作, 如图11所示.
(5)当采集端获取到坐标信息后, 会将该信息以GET请求的方式将相关参数传送到服务器相应的接口[7], 如:
http://域名/changeposition.php?id=1&posx= 113.52973&posy=22.34587
服务器端会在获取数据库后把请求中的校园巴士的id、posx和posy等参数提取出, 再对登录信息进行比对, 之前登陆成功后已经把用户名即id存在session中, 现在只需要比对请求中的id是否是session中存的值或者这个浏览器有没有在服务器中储存一个session, 只要其中一个条件判断不通过, 就要求浏览器页面跳转到采集端的登录页面要求用户进行登录动作后才能操作请求后台修改参数, 如图12所示.
4.2 系统联调
完成云端服务器的系统搭建后就可以开始手机采集端的实验了. 首先要在手机上安装APP并进入登陆界面, 如图13所示.
完成登录后即可进入电子地图并开始定位(注意: 手机必须打开定位功能, 最好选择使用GPS、WLAN和移动网络的定位模式).
如图14为地图将采集端所采集的位置信息在地图上显示的结果, 图14(a)图为采集端定位结果, 图14(b)为打开服务端用户看到的效果, 圆圈标注出的对象为左图在服务端显示的结果).
图15是云数据库的数据, 有数据同步写入云数据库, 说明数据传输是正常的.
完成以上环境搭建后, 拿着一部安装好软件的手机, 坐上一辆移动的车后进行数据采集. 测试结果如图16所示. 随着校园巴士车的移动, 显示在地图上的车辆标识也是跟随着移动的, 且移动中车辆标识始终保持在道路上.
5 系统优化由于本系统在使用的过程中在没有Wi-Fi热点的时候, 需要消耗手机流量, 这样会产生较高的运行费用. 考虑到电瓶车的行驶速度, 这个系统设定了自动刷新的时间是在5秒, 从实际情况来看, 若一个学生打开了APP, 观察6~7分钟的话, 耗费流量将达到1M, 这样的数据耗费显然不是一个理想的设计模型. 因此本系统通过AJAX(Asynchronous Javascript And XML)技术[8,9]优化了加载校园巴士坐标的显示方法, 如图17所示.
通过优化前与优化后的数据加载比对(数据是以20辆电瓶车作为参考), 表1是优化前的数据加载及耗费时长, 表2优化后的数据加载及耗费时长.
通过优化后, 学生在校园打开APP就不用担心流量消耗太大而导致该系统使用人数的减少, 这样的优化不仅从数据上节省了许多, 而且在视觉效果上也提高了用户体验.
6 结束语
本文介绍了一种利用校园巴士司机所携带的智能手机获取的位置信息作为该司机所运行的巴士车的位置信息, 利用高德地图作为地图服务器, 并采用阿里云空间来部署数据库服务和Web服务. 本系统直接使用Web APP的显示端, 因此无论是安卓手机还是苹果手机都可以得到统一的显示界面, 无需因为手机操作系统的不同而开发两套APP程序[10].
由于考虑到开发成本和运营成本, 本系统所采用的平台只适用于小规模的应用, 比如校园BUS最好不要超过100台, 同时访问的终端不要超过5000个, 因此本系统只适用于校园巴士实时位置共享的这种小众应用场景.
[1] |
代敏. 基于Android平台下手机定位程序的设计及实现. 计算机与数字工程, 2012, 40(4): 143-145. |
[2] |
朱国艺, 周玉珍. HTML5中地理位置定位技术的应用与探究. 电子技术与软件工程, 2017(3): 26-27. |
[3] |
彭红. 基于云计算的LBS应用研究. 软件工程, 2016, 19(10): 27-29, 26. DOI:10.3969/j.issn.1008-0775.2016.10.007 |
[4] |
邢伟寅. 基于高德地图的高校校园信息查询系统的设计与实现. 信息与电脑, 2015(18): 76-77. DOI:10.3969/j.issn.1003-9767.2015.18.035 |
[5] |
沈荣明, 杨照生. 基于阿里云的" 我家菜单”系统研究. 电子技术与软件工程, 2015(22): 71, 91. |
[6] |
石高涛, 王伯远, 吴斌. 基于WiFi与移动智能终端的室内定位方法综述. 计算机工程, 2015, 41(9): 39-44, 50. |
[7] |
齐红心. PHP开发过程中页面参数传递方法分析. 软件导刊, 2016, 15(1): 6-9. |
[8] |
孙光明, 王硕. 基于JSON的Ajax数据通信快速算法. 计算机应用与软件, 2015, 32(1): 263-266. |
[9] |
龚成莹, 邢敬宏, 胡银保. 基于JSON的Android移动终端与PHP及MySQL数据通信. 工业仪表与自动化装置, 2013(1): 63-65. |
[10] |
王鑫. Native App与Web App移动应用发展. 计算机系统应用, 2016, 25(9): 250-253. DOI:10.15888j.cnki.csa.005429 |