董 婷
(榆林学院 信息工程学院,陕西 榆林 719000)
随着机动车的迅猛发展,环境不断恶化。为了解决交通拥堵以及环境污染这两个世界问题,政府便开始提倡绿色生活,环保出行。《基于安卓的便民自行车管理系统》便是在绿色生活,环保出行的大环境背景下诞生的。用户可以在安卓手机上安装本文介绍的《基于安卓的便民自行车管理系统》方便快捷的使用便民自行车,通过软件可以查看附近车辆位置,用软件内的扫码功能可以实现解锁车辆。并开始计时收费,并且实现骑行路线规划与导航,行程结束后可以支付并反馈骑行体验。
在服务器启动后,进入便民自行车管理系统客户端,新用户需要注册登录账号。用户通过在APP内注册页面输入的信息会返回到服务端进行数据库匹配和增加操作。管理员也可以使用APP进行注册,只需要在注册框下方点击管理员权限。
用户注册时会进行是否注册过的逻辑判断,注册的账号通过逻辑判断后,在用户输入密码的时候进行加密处理,管理员注册时需要进行权限选择。
百度地图提供的免费定位服务 分为高精度定位模式 低功耗定位模式 仅设备定位模式 三种模式,高精度定位模式:在高精度定位模式下,会同时使用移动网络定位和GPS定位,优先返回最高精度的定位结果[1-2]; 低功耗定位模式:这种定位模式下,不会使用GPS,只会使用网络定位(Wi-Fi和基站定位) 仅用设备定位模式:这种定位模式下,不需要连接网络,只使用GPS进行定位,这种模式下不支持室内环境的定位[3]。具体操作配置如下:
(1)在百度SDK官网下载com.baidu.location.service包。
(2)将com.baidu.location.service包直接拷贝到工程中。
(3)进行简单配置即可获取定位结果,也可以根据demo内容自行封装。
骑行距离计算是通过定位获取经度、纬度、距离和一个角度。具体计算步骤如下:
图1 计算距离二维坐标图
(1)(Math.PI / 180) * latitude1作用是将角度转换为弧度,经纬度坐标是角度值,计算时需要换为弧度。这里所有的计算都是用弧度[4]。
(2)函数以正北方(due north) 也就是指南针的方向为0度,顺时针方向增加。如下图,Distance距离如果是d的话,dx就是x轴方向的长度,即longitude经度方向的长度;dy就是y轴方向的长度,即latitude纬度方向的长度。
dx、dy的计算方式也可以是以正东(due east)方向为0度[5]。
dx=distance*cos(θ)
dy=distance*cos(θ)
其中区别是cos与sin互换。
(3)截面过球心,此时截面的面积最大,此圆叫球的大圆(Great Cycle),沿着经线进行截面,得到的都是大圆(Great Cycle)。球面被不经过球心的截面所截得的圆 叫做小圆[6]。纬度圈所在的圆是一个小圆。地球半径R,平均值R=6371.0km,可以参看《根据2个经纬度点,计算这2个经纬度点之间的距离(通过经度纬度得到距离)》。其中值得一提的是,维基百科推荐使用Haversine公式,理由是Great-circle distance公式用到了大量余弦函数, 而两点间距离很短时(比如地球表面上相距几百米的两点),余弦函数会得出0.999...的结果, 会导致较大的舍入误差[7]。而Haversine公式采用了正弦函数,即使距离很小,也能保持足够的有效数字。 以前采用三角函数表计算时的确会有这个问题,但经过实际验证,采用计算机来计算时,两个公式的区别不大[8]。 稳妥起见,这里还是采用Haversine公式。
其中
haversin(θ)=sin2(θ/2)=(1-cos(θ))/2
R为地球半径,可取平均值 6371km;
φ1, φ2表示两点的纬度;
Δλ 表示两点经度的差值。
图2 二维码区域解析图
首先,介绍二维码的一部分知识:二维码一共有 40 个尺寸。官方叫版本 Version。Version 1 是 21 x 21 的矩阵,Version 2 是 25 x 25 的矩阵,Version 3 是 29 的尺寸,每增加一个 version,就会增加 4 的尺寸,公式是:(V-1)*4 + 21(V是版本号) 最高 Version 40,(40-1)*4+21 = 177,所以最高是 177 x 177 的正方形。
由于在本系统中没有智能锁设备的设计,在本系统中采用联图网制作生成模拟车辆的二维码,在便民公共自行车管理系统中扫码可以获取单车的信息,二维码是每个单车唯一的身份认证,每辆车都是唯一编号,扫二维码和手动输入单车编号效果一样。然后通过地图获取到开锁的定位,然后连续发起定位请求,请求的时间间隔为3000ms。实现扫码开锁的具体步骤如下:
(1)开启camera,在后台独立线程中完成扫描任务;
(2)在扫描界面绘制了一个正方形的扫描区(viewfinder)提示用户将二维码置于扫描区以准确扫描;
(3)然后将扫描的结果发送到服务器端;
(4)扫描成功后会将扫描结果展示在界面上。
图3 扫码开锁原理图
Server生成二维码的内容是手机段访问服务器的登陆网址,再加上生成的uuid,这个uuid是用来确定是具体某个用户的请求。Server是通过一个长连接维持用户请求和服务器之间的通信,直到用户通过手机端将请求信息发送给Server,然后长连接每隔一段时间通过uuid监测是否有用户的开锁信息,如果有,则长连接结束,跳转到骑行页面,将车辆信息返回给用户。
新用户注册登录后会出现钱包充值的页面,根据用户所选的面值充值到用户个人的钱包中,在用户骑行结束后系统会自动扣除用户的钱包余额。余额会在用户的个人界面中展示方便用户查看。
充值模块通过构建前端ChargeActivity.Java页面中有充值金额和手动输入框。新用户可以通过在手机端选择面值,然后将充值的金额储存在数据库用户表中。充值后手机端会提示充值成功。
图4 手机端单车管理流程图
管理员注册后登录系统在手机端Fragment/Device.Java页面的右上角点击添加单车的按钮,编辑单车的编号和单价。添加单车后,可以在页面内进行修改和删除单车信息。管理员添加的单车信息发送到服务端在deviceAddSubmit类中进行编号是否重复的逻辑判断,判断后将单车信息添加到Device表中。
本系统采用流行的Android移动端开发和比较流行的SpringMVC框架,运用MySQL数据库来完成系统的设计与开发。系统全面覆盖分析了用户的需求,最终达到了预期的效果。用户和管理都可以使用便民自行车管理系统的客户端进行操作,实现了城市中公共自行车方便、便捷的使用。
本系统通过安卓手机客户端和互联网+让用户可以方便快捷的进行公共自行车的使用,用户在系统中可以看到附近的车辆以及通过手机扫码开锁。然后管理员可以方便快捷的添加、管理、维修车辆以及进行系统维护等操作。