摘要:随着智能手机的飞速发展,手机应用程序已经影响到人们生活中的每个角落。公共自行车模式的应用也不断出现,为了填补榆林本地市场公共自行车出行方式的空缺,让市民的出行更加方便快捷,开发设计出一款基于安卓的便民自行车管理系统。研究并实现了基于安卓的便民自行车管理系统。系统主要设计实现的功能如下:根据地图查看附近车辆,通过客户端手机摄像头进行扫码开锁,在骑行结束后系统会计算骑行公里数计算费用并扣除相应金额,用户钱包充值服务,单车信息管理,历史订单查看、用户管理员信息修改、更换头像。
关键词:便民自行车管理系统; 安卓; 实现;
Abstract:With the rapid development of smartphones, mobile applications have affected every corner of people's lives. An Android-based convenience bicycle management system is developed for the convenience of people's trip.This paper studies and implements a convenient bicycle management system based on Android. The main functions of the system are as follows: checking the nearby vehicles according to the map, scanning code and unlocking through the mobile phone camera, calculating and deducting the cost of riding, recharging users' wallet, bicycle information management, historical order review, users' information modification and replacement of images.
Keyword:convenient bicycle management system; Android; achieve;
1引言
随着机动车的迅猛发展,环境不断恶化。为了解决交通拥堵以及环境污染这两个世界问题,政府便开始提倡绿色生活,环保出行。《基于安卓的便民自行车管理系统》便是在绿色生活,环保出行的大环境背景下诞生的。用户可以在安卓手机上安装本文介绍的《基于安卓的便民自行车管理系统》方便快捷的使用便民自行车,通过软件可以查看附近车辆位置,用软件内的扫码功能可以实现解锁车辆。并开始计时收费,并且实现骑行路线规划与导航,行程结束后可以支付并反馈骑行体验。
2 便民自行车管理系统的实现
2.1 注册登录的实现
在服务器启动后,进入便民自行车管理系统客户端,新用户需要注册登录账号。用户通过在APP内注册页面输入的信息会返回到服务端进行数据库匹配和增加操作。管理员也可以使用APP进行注册,只需要在注册框下方点击管理员权限。
用户注册时会进行是否注册过的逻辑判断,注册的账号通过逻辑判断后,在用户输入密码的时候进行加密处理,管理员注册时需要进行权限选择。
2.2 地图定位的实现
百度地图提供的免费定位服务 分为高精度定位模式 低功耗定位模式 仅设备定位模式 三种模式,高精度定位模式:在高精度定位模式下,会同时使用移动网络定位和GPS定位,优先返回最高精度的定位结果[1,2]; 低功耗定位模式:这种定位模式下,不会使用GPS,只会使用网络定位(Wi-Fi和基站定位) 仅用设备定位模式:这种定位模式下,不需要连接网络,只使用GPS进行定位,这种模式下不支持室内环境的定位[3].具体操作配置如下:
(1)在百度SDK官网下载com.baidu.location.service包。
(2)将com.baidu.location.service包直接拷贝到工程中。
(3)进行简单配置即可获取定位结果,也可以根据demo内容自行封装。
2.3骑行距离计算功能的实现
骑行距离计算是通过定位获取经度、纬度、距离和一个角度。具体计算步骤如下:
图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(dR=haversin(φ1-φ1)+cos(φ1)cos(φ2)haversin(△λ))
其中
haversin(θ)=sin2(θ/2)=(1-cos(θ))/2
R为地球半径,可取平均值 6371km;
φ1, φ2表示两点的纬度;
Δλ 表示两点经度的差值。
2.4扫码开锁功能的实现
图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监测是否有用户的开锁信息,如果有,则长连接结束,跳转到骑行页面,将车辆信息返回给用户。
2.5充值功能的实现
新用户注册登录后会出现钱包充值的页面,根据用户所选的面值充值到用户个人的钱包中,在用户骑行结束后系统会自动扣除用户的钱包余额。余额会在用户的个人界面中展示方便用户查看。
充值模块通过构建前端ChargeActivity.Java页面中有充值金额和手动输入框。新用户可以通过在手机端选择面值,然后将充值的金额储存在数据库用户表中。充值后手机端会提示充值成功。
2.6单车信息管理的实现
图4 手机端单车管理流程图
管理员注册后登录系统在手机端Fragment/Device.Java页面的右上角点击添加单车的按钮,编辑单车的编号和单价。添加单车后,可以在页面内进行修改和删除单车信息。管理员添加的单车信息发送到服务端在deviceAddSubmit类中进行编号是否重复的逻辑判断,判断后将单车信息添加到Device表中。
3总结
本系统采用流行的Android移动端开发和比较流行的SpringMVC框架,运用MySQL数据库来完成系统的设计与开发。系统全面覆盖分析了用户的需求,最终达到了预期的效果。用户和管理都可以使用便民自行车管理系统的客户端进行操作,实现了城市中公共自行车方便、便捷的使用。
本系统通过安卓手机客户端和互联网+让用户可以方便快捷的进行公共自行车的使用,用户在系统中可以看到附近的车辆以及通过手机扫码开锁。然后管理员可以方便快捷的添加、管理、维修车辆以及进行系统维护等操作。
参考文献
[1]董璐。基于系统动力学的城市公共交通优先发展政策效果研究[D].武汉:武汉理工大学,2017.
[2]吴治新。文本定位算法及其在智能读书软件中的应用[D].西安:西安电子科技大学,2015.
[3]于智,曲伟峰,马春艳。安装Android Studio开发环境常见问题解决方法[J].科技风,2018(18):56-57.
[4]李松林,陈华清,任鑫。Eclipse宝典[M].北京:电子工业出版社,2007.
[5]臧达霏。基于Android的体域网系统设计与实现[D].长春:吉林大学,2014.
[6]朱丽华,孙江涛,周梦茹。基于Spring MVC架构的舞蹈视频教学系统的设计与实现[J].现代电子技术,2019,16(1):67-68.
[7]黄雪颖,牛丹,李涛,等。基于Android的立体车库停车系统的设计与实现[J].机械设计与制造工程,2018,32(2):34-35.
[8]周茜,陈钰,曹庆花,等。基于Struts+JPA+Spring架构的电子商务系统的设计与实现[J].软件导刊,2011(1):78-79.