微信是近年来迅速普及的新媒体通信社交平台,截至2015年第一季度,微信已经覆盖中国90% 以上的智能手机,月活跃用户达到5.49亿[1]。微信除具备基本聊天功能外,还能为用户提供二维码扫描、微信支付、语音记事等多项服务,极大地方便了用户的日常生活。微信二维码由腾讯公司开发,用于配合微信使用,实现添加好友和微信支付功能,含有特定的内容格式。能够被微信正确识别的二维码目前作为微信的互联网入口得到了迅速的普及和推广,主要应用在微信添加好友、微信支付、二维码票务、二维码签到、二维码下单购物等方面,具有广阔的发展和应用前景[2]。
基于微信二维码的定位和地图服务是一种新兴技术,利用微信和微信二维码的普及性,在二维码中存储特定链接或定位点编号,用户扫描二维码后,服务器作出响应,将对应的地图链接或数据发送到用户终端上[3]。该方式为在线地图服务,对服务器系统的存储能力和响应速度有一定要求,且用户获取定位和地图信息的速度很大程度上受限于移动网络或当前WiFi环境的信息传递能力[4]。
本文针对当前微信二维码定位、导航和地图服务需要网络在线的问题,提出了基于微信二维码的地图编码方法。该方法直接将局部地图通过特征抽取和QR编码转换成微信二维码,以通用的微信二维码方式离线存储地图数据,实现在无网络环境下的二维码地图服务。试验结果表明,本文方法技术可行,地图编码效率能够满足大型楼宇、地下空间及交通枢纽等离线二维码地图应用服务,在室内地图的典型应用如室内定位、室内外一体化导航和O2O电子商务等方面[5]具有很好的应用前景。
一、 方法原理与技术框架与现有的二维码定位技术中将地图的链接或编号存入二维码中不同,本文提出的基于微信二维码的地图服务方法的基本原理为:将地图压缩编码技术与微信二维码相结合,直接将地图数据压缩编码存入二维码中,生成利用二维码存储和表达的地图。二维码地图中含有原地图的大小、名称,以及各要素几何和属性信息等完备内容,通过扫描解码和地图显示技术能够由二维码地图包含的数据绘制出原地图,地图的精度损失仅在单位像素内。通过开发能够扫描该二维码生成显示原地图的移动端应用,在离线状态下通过扫描二维码实现地图浏览应用。二维码地图可以放置于墙面、广告牌、指示牌等任意离线物理载体上,以路标或指示的方式出现,从而实现与网络无关的随时随地的地图服务。本文基于微信二维码编码的离线地图服务的技术框架如图 1所示。
如图 1所示,基于微信二维码编码的离线地图服务包括地图编码、离线二维码地图生成和二维码地图移动端应用3部分。地图编码先通过特征抽取提取出地图中的典型要素,并对要素数据进行压缩编码,得到压缩后的字符串形式的地图编码数据,使得压缩后的地图数据满足二维码的容量要求;进一步通过QR编码将地图压缩编码数据转换成微信二维码,该二维码可以多种形式在物理载体上存在,智能终端可方便地通过微信二维码扫描将其转化成移动端地图,该过程无需通过网络访问或流量传输。
二、 特征抽取和QR编码 1. 特征抽取特征抽取是制作二维码地图的关键步骤,在保证地图精度的前提下需要将地图数据压缩成小于一定长度的字符串数据,以确保二维码能正确地生成和被解码,其具体流程如图 2所示。
如图 2所示,地图特征抽取包括要素提取、要素编码和整合编码3个步骤,各步骤详细处理如下:
1) 要素提取:根据室内导航地图服务需求,从地图中提取的要素包括点状要素POI和注记,面状要素如多边形、矩形、边界含有曲线的区域。其中,对于较为复杂的边界含有曲线的区域,参考SVG矢量图形标准中path对象格式[6],通过命令和点坐标组合的方式进行描述记录。如M288,260.5V308H42V-29.5C0,0-15-6-16.5-18H288z记录了一块边界含有曲线的区域,其中M表示move to,V表示vertical line to,H表示horizontal line to,C表示curve to,z表示close path。
2) 要素编码:对提取的地图要素进行压缩,并按一定的规则排列,生成满足二维码容量的字符串序列,包括几何要素压缩处理和属性信息编码处理[7]。
a. 几何要素处理:对于获得的要素几何信息,即各类要素的坐标信息和矩形区域的长宽信息,使用int型代替double型进行记录,尽管精度上有所损失,但相对于整个地图幅面,一个单位内的偏移不会对地图的精度和可读性产生影响,并且通过舍去小数点后的数据,可以显著减少数据量。
对于多边形区域,由于多边形上相邻点坐标值较接近,因而除第一点坐标外,后续点坐标都可记录为与其前一点坐标的差值,经此处理可显著减少数据量。此外,对同一类型的一组多边形,将其按第一点x坐标值排序,每一多边形第一点x坐标记录为与其前一多边形第一点x坐标差值,也可在一定程度减少数据量。针对同一类型矩形区域在空间分布上一般较为均匀、长宽较为接近的特点,将同一类型矩形的坐标和长宽分别计算平均值,矩形编码中记录相对于平均值的差值。
b. 属性信息编码处理:由于要素的属性信息会有很多重复的记录,对于属性相同的要素,采用按属性归类的方式进行编码。其中,注记中重复率最高的一般是字号信息,因此将注记按字号归类进行编码。如针对注记在一幅地图上的分布一般较为均匀的特点,计算出所有注记坐标的平均值,注记的编码中记录相对于平均值的坐标。此外,针对注记内容有较多重复的特点,采用添加索引的方式,注记内容中只记录单个字符,在后续二维码数据中添加单个字符和注记内容的对应关系。将横排和竖排注记分别记为一行,可省去注记中的是否竖排标识。
3) 整合编码:在不同类型要素编码间添加代表要素类型的标识符,在编码开头加入该地图的相关信息,最终形成二维码内存储的字符串数据。
图 3给出了示例地图数据经特征抽取后的地图编码数据过程。
2. QR编码得到压缩的地图数据后,还需通过QR编码的关键步骤将地图数据转换成二维码。QR编码是目前应用最为广泛的一种二维码编码方式,也是微信二维码所采用的编码方式。QR编码的基本流程如图 4所示[8]。
1) 数据分析:分析编码数据的字符类型,在示例地图中为字符、数字和汉字,依此选择UTF-8码进行编码;然后选定纠错等级;根据数据的总长度,选择QR码符号版本为40,以使数据串长度不超过二维码容量。
2) 数据编码:将数据字符转换为位流,对该位流进行划分,每8位作为一个码字;不足8位处加入填充字符以填满数据码字;然后在数据码字后加入终止符标记数据流的结束。
3) 纠错编码:将数据码字分块,在每一块内生成相应的纠错码字,添加到数据码字后面。
4) 构造最终信息:在矩阵每一块中加入数据码字和纠错码字,必要时加入填充数据。
5) 在矩阵中布置模块:将位置探测图形、分割符和定位图形等放入矩阵。
6) 掩膜:为增加该QR码阅读的可靠性,将掩模图形作用于二维码的编码区域,从结果中选择深浅两色比率较优、并且不希望出现的图形数量较少的掩膜图形。
7) 加入二维码的格式与版本信息。
三、 试验及分析为验证本文方法的有效性和压缩效率,分别选取武汉市群光广场一楼、北京首都机场T1公共区和杭州火车站地图 3个典型室内地图进行试验,数据格式为PNG图片,如图 5所示。
1) 地图压缩编码效率试验:对试验数据进行矢量化、提取和压缩后,得到压缩后的文本格式数据,也即二维码中存储的数据。对比原PNG图片大小和经压缩编码后的数据,得到试验数据压缩率,并与通用压缩格式rar的压缩效率进行比较,结果见表 1。
试验数据 | 试验数据大小/字节 | 本文算法 | rar压缩 | ||
压缩后大小/字节 | 压缩比 | 压缩后大小/字节 | 压缩比 | ||
武汉群光广场一楼 | 66791 | 2066 | 32.3 | 66673 | 1.0002 |
北京首都机场T1公共区 | 14529 | 691 | 21.0 | 13528 | 1.0740 |
杭州火车站 | 64319 | 1240 | 51.9 | 64158 | 1.0025 |
由表 1数据可知,利用本文压缩流程对室内地图进行压缩编码比直接利用rar压缩在压缩率上有明显的优势,压缩后的数据大小一般能限制在几千字节以内,满足存入微信二维码中的条件。
2) 微信二维码地图服务试验:通过QR编码将上述压缩后的数据转换为二维码,由3幅试验地图得到的二维码如图 6所示。
利用移动端应用[9-10]扫描三幅二维码生成显示的地图如图 7所示。
对比图 5、图 7可知,由微信二维码解码生成的移动端地图很好地还原了原地图的整体轮廓和局部细节,其中地图的颜色不同是由于颜色方案的差异,不影响地图的识读。
进一步对移动端二维码地图应用扫描显示效率统计,见表 2,其中移动端应用终端为SONY LT29i手机。
由表 2可知,随着二维码中存储的地图数据大小的增加,应用耗时也显著增加,但响应时间始终保持在5s内,解码显示效率较高,满足六秒法则[11-12],能够满足较好的用户体验。
四、 结束语针对当前基于微信二维码的地图服务技术对网络的依赖性的缺陷,本文提出了一种将地图数据经过特征抽取和QR编码直接转换成二维码的思路,阐述了基于微信二维码的地图压缩编码方法的基本原理和整体流程,并结合具体试验验证了算法的可行性。在对3组典型的局部地图压缩效率的分析中发现本文提出的算法具有较好的压缩效率,在实际应用中能够满足大型楼宇、地下空间及交通枢纽等离线二维码地图应用服务,具有良好的应用前景。
[1] | 百度百科. 微信[EB/OL]. 2015-09-16[2015-10-04]. http://baike.baidu.com/subview/5117297/15145056.htm. |
[2] | 张馨元. 基于移动微信平台的二维码产品防伪认证系统[J]. 网络安全技术与应用, 2014(11):321-324. |
[3] | 任豪毅. 基于二维码的智能手机室内定位方法[D]. 杭州:浙江大学, 2013. http://cdmd.cnki.com.cn/Article/CDMD-10335-1013178060.htm |
[4] | 林泽斐. 基于微信公众平台的图书馆二维码定位系统构建[J]. 图书情报工作 , 2014 (16) : 138–142. |
[5] | 许华燕, 李志辉, 王金月. 室内地图应用现状及展望[J]. 测绘通报 , 2014 (9) : 119–121. |
[6] | W3C. SVG教程[EB/OL]. 2015-10-04[2015-10-04]. http://www.w3school.com.cn/svg/index.asp. |
[7] | 胡艳. 矢量地图数据无损压缩算法的研究[D]. 郑州:信息工程大学, 2007. |
[8] | 曾子剑. 基于QR二维码编解码技术的研究与实现[D]. 成都:电子科技大学, 2010. http://cdmd.cnki.com.cn/article/cdmd-10614-2010233893.htm |
[9] | 周文生, 胡鹏, 贾永红. Web环境下SVG地图浏览器的设计与实现[J]. 测绘学院学报 , 2003 (2) : 135–138. |
[10] | 王刚, 韩振镖. 面向Android智能移动终端的GIS设计与实现[J]. 测绘通报 , 2013 (8) : 77–80. |
[11] | 窦天芳, 张成昱, 张蓓, 等. 移动互联网与传统互联网的服务融合——以清华大学图书馆WAP网站建设为例[J]. 图书情报工作 , 2011, 55 (9) : 67–84. |
[12] | 赵国锋, 赖雯静, 徐川, 等. 移动互联网的业务访问特性[J]. 计算机学报 , 2013, 36 (7) : 1388–1398. |