停车场二维码导航

【问题描述】
用户在指定的停车场里停车时,能够对自己停放车辆的位置进行拍照记录,然后再取车时可以利用本软件进行拍照定位。本软件的定位全部依赖于停车场中到处部署的二维码,用户可以随时用手机拍照并获得自己的位置。本软件还能够自动提示用户停车的计费情况等信息。
【基本要求】
一个完整的系统应具有以下功能:
(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 导航结果

    推荐阅读