【问题描述】
用户在指定的停车场里停车时,能够对自己停放车辆的位置进行拍照记录,然后再取车时可以利用本软件进行拍照定位。本软件的定位全部依赖于停车场中到处部署的二维码,用户可以随时用手机拍照并获得自己的位置。本软件还能够自动提示用户停车的计费情况等信息。
【基本要求】
一个完整的系统应具有以下功能:
(1)能够对停车场位置信息进行统一管理。对其停车位和停车地点利用二维码拍照来定位查看。即需首先对整个停车场进行建模和二维码生成与标识,对每个停车位都用唯一二维码标记;
(2)用户可以用本软件随时拍身边的二维码,可以在地图上标识出自己的地理位置;
(3)停车时用本软件拍照标记,在回来拿车时,可以根据标记好的位置,用软件来随时拍照定位及拿车路径的导引。
1.1. 设计思想 基于Phonegap实现,二维码扫描依赖phonegap插件phonegap-plugin-barcodescanner实现,停车场二维示意图在canvas画布上呈现。
首先对停车场建模,所设计的二维停车场模型形成A、B、C、D4个区域,每个区域16个停车位,即整个停车场共64个车位。每个车位有4位编号,编号用于导航算法使用。第一位为所在区字母,第二位0或1(0表示北方向1表示南方向),第三位0或1(0表示西方向,1表示东方向),最后一位数字1~4,表示距离该区中心位置第几个车位。例如A003,表示距离A区中心位置北偏东方向第三个车位。
将每个停车位编码号利用在线二维码生成平台生成二维码,每个二维码仅存储车位编号。扫描二维码时,获取到车位的编号,根据导航算法进行推算。“停车”扫描传入停车位置的编号,点“扫描二维码”扫描用户当前所在位置停车位的二维码,获取当前停车位的编号。
由编号推到像素坐标过程:保存扫描所识别的编号为字符串,截取编号第一位,判断所在区域,例如A003,就定位到A区像素坐标;判断第二位,0时停车位像素坐标Y=中心点Y值-第三位数值*停车位宽,1时Y=中心点Y值+第三位数值*停车位宽;判断第二位数字,0时停车位像素坐标X=中心点X值-路宽/2,1时X=中心点X值+路宽/2。
导航算法:代码中存有各个区域中心点(十字交叉口位置)的像素坐标,当用户停车时根据停车位编号,推导出车所在停车位的像素坐标,在此扫描二维码获取到当前位置的编号。1、判断两个位置是否在同一个区域,即编号第一位是否相等,不相等执行2,相等执行3;2、以当前位置像素坐标为起点画线,先画到所在区域中心点,先x后y,再由当前所在位置区域的中心位置画到车所在位置区域的中心点,最后由车所在区域中心点画线到车的像素坐标;3、由当前位置像素坐标为起点画线,先y后x,直接画到车的像素坐标。
计时收费:按停车按钮时调用开始计时函数,按导航时停止计时。
文章图片
图2.1 停车收费流程图
1.2. 调试报告 花费时间最多的地方在于二维码扫描的插件的配置,所使用Phonegap版本7.0,安卓版本7.0,尝试过很多方式导入插件,最后发现是打开方式不对,phonegap-plugin-barcodescanner插件由zxing开发而来,当前最稳定的版本是3.0,由于其使用arr文件格式,导入到eclipse中就会出现找不到引用包的情况,使用android-studio导入可以避免。
插件安装过程如2.2。新建phonegap程序,cordova create hello com.example.cordovahellopark,跳转到文件夹内 cd MyBarcode,添加android平台cordova platform add android,利用nodejs添加插件,输入phonegap plugin add phonegap-plugin-barcodescanner。
导入工程,打开android-studio,其中有很多坑,直接导入并不能运行,正确的导入方法是打开F:\hello\platforms\android的build.gradle文件。
文章图片
图2.2 安装二维码扫描插件
1.3. 代码
费用:
元 (1元/时)
1.4. 运行结果 测试用例A003、D113。
文章图片
文章图片
图2.3 A003二维码 图2.4 D113二维码
文章图片
文章图片
图2.5 app初识界面 图2.6 二维码识别
文章图片
文章图片
【停车场二维码导航】图2.7 停车后开始计时 图2.8 导航结果