郭倩 韩博 吴飞龙 朱晓芒
摘要:数字校园在快速发展的过程中,移动办公成为一种趋势。针对当前高校移动端业务与基于位置服务(LBS)相结合的需求,提出一套基于云计算的在Android平台上利用百度定位API实现精准混合定位的校园定位技术方案。以校园即时消息通信Android客户端为例展开实例验证,结果表明该方案合理可行。研究成果为校内移动应用与LBS服务的集成提供了技术支持,增强了校园移动应用的服务能力,可以为相关研究和实践提供技术指导。
关键词:LBS;Android;混合定位;百度定位API;云计算
中图分类号:TP302.1;TP311.5 文献标志码:A 文章编号:1673-8454(2020)06-0089-05
一、引言
近年来,智能移动终端逐渐在工作、生活和学习中普及,移动定位技术也得到了快速发展,基于位置的服务LBS(Location-based Service)带来了更多的高效和便利[1]。LBS是利用各种定位技术获得移动终端设备的当前的位置,再利用手机网络或者Wi-Fi获取服务。LBS在最初主要应用于实施救援,即紧急情况下迅速对求助者的位置予以定位,如欧洲的E112 系统、美国的E911 系统。目前,LBS在军事、物流、交通、生活、医疗等领域都得到了广泛的应用,例如,查找智能移动终端附近一定范围内的影院、商场、餐馆、银行、加油站等。
Android是基于Linux操作系统的自由及开源的移动终端操作系统, 与具备强大数据处理能力的智能移动终端相结合,在工作、生产和生活中渐渐占据了广阔的市场。2018年,Android OS高达85.9%的市场占有率就已经远远超越iOS,成为最主流的移动端OS。
数字校园的快速发展引领着高校信息化建设日益壮大,越来越多的业务从线下迁移到线上,从PC端延伸到移动终端,如移动校园、移动迎新、教务考勤、校园订餐等。众多校园移动化应用亟需与LBS结合,从而为师生提供更加智能、安全和便捷的服务。虽然目前市场上针对Android移动终端开发的提供LBS服务的手机应用层出不穷,但是非定制化的广谱性软件无法按照高校的业务模式为师生提供定制化的服务。基于此,本文针对LBS技术展开研究,提出在Android平台上利用百度定位API[1]实现校园定位功能这一技术方案,以校园移动即时通信系统Android客户端为实例,验证方案的可行性、合理性和高效性。
二、Android移动终端定位技术
GPS接收机、基站通信模块、Wi-Fi模块、惯性器件等是智能移动终端实现定位功能的硬件基础[2],Android系统为访问这些硬件提供了原生API,Google、百度、高德等厂商在推出地图应用的同时,也开放了与其地图应用相关的API,让Android开发者可以更加轻松地获取终端的位置信息。本节首先简要介绍Android移动终端的定位技术,随后就如何选择实现校园定位功能的API进行分析。
不同的定位技术有其最佳适应环境,带来的精确度也各不相同,下面介绍几种常用的Android移动终端定位技术。
1.GPS定位
全球定位系统(Global Positioning System,GPS)是卫星导航系统,目前应用最为广泛。智能终端上的GPS接收机通过连续接收卫星发射信号来实时计算三维位置和速度信[2]。
Android提供了LocationManager类来完成访问GPS设备的操作。在权限允许的情况下,应用程序可以访问GPS设备进行定位。使用GPS设备进行定位,需要为应用请求位置相关权限。
借助于LocationManager类可以请求使用系统位置服务。
设定定位标准(即Criteria),通过该标准获取位置提供者(Location类)。
随后注册当GPS设备位置更新时响应频率方法,设置监听频率、通知條件[3]。
myLocationListener即LocationListener接口,接口内定义onLocationChanged()方法,当位置变化时执行。
通过onLocationChanged方法中Location提供的getLatitude()和getLongitude()方法,智能终端即可获取所在位置的经纬度信息。部分手机支持设置“自动下载星历”,默认通过网络辅助GPS设备来执行定位,即AGPS[4]。
借助GPS设备进行定位,尽管定位精确度较高,但冷启动GPS时间太长,借助于AGPS解决了定位速度的问题,但是并非所有的Android手机都支持AGPS,所以单靠GPS、AGPS无法满足定位的需求。
2.基于蜂窝网络的定位——CELL-ID
小区定位法(CELL-ID)是一种基于蜂窝网络的低成本、易实现的定位方法[5]。该方法借助于移动系统HLR(Home Location Register)中用户所处小区的位置信息来进行定位,覆盖面很广,对终端设备的支持度极高。
一段基站信息的代码中,主要信息包括移动网络号(MNC)、移动国家代码(MCC)、小区识别码(CID)和位置号码(LAC)。minigps提供了全球基站数据库,借助minigps提供的url接口,将基站信息经过封装HTTP POST到服务器会返回设备的位置信息[6]。
获取到基站的基本信息后,将这些基站信息封装成指定的JSON字符串,封装格式示例如下:
将此字符串以POST方式发送到minigps提供的服务器地址,即可从服务器端获取到一串JSON格式的位置信息,解析出经纬度和位置信息。
受限于基站的密度,CELL-ID的定位精度通常较低。
3.Wi-Fi定位
使用Wi-Fi进行定位的基本原理和CELL-ID定位相似。Google曾提供免费的Geolocation API帮助用户定位用戶所在附近的无线网络热点的位置,主要原理是借助手机无线网络侦测当前手机附近所有无线网络热点的MAC地址[7],通过第三方开放数据库里面的MAC地址的坐标获取到当前用户所处环境的近似位置信息。由于Wi-Fi热点的布设密度通常远大于蜂窝基站,因此定位精度优于CELL-ID方法。
Android系统提供了获取当前Wi-Fi信息的API。在Wi-Fi连接正常的情况下,借助于WifiManager[8],可以获取到当前Wi-Fi的基本信息。遗憾的是,Google的Geolocation API已经停止提供该项服务。Wi-Fi定位因为没能找到合适的第三方无线网络热点的MAC地址数据库,没能测试成功。
4.混合定位
在不同的环境中,不同定位技术获取位置的精度是不同的,因此企图依赖于某一种技术解决定位的想法并不可行。正确的做法是针对用户所处网络、环境和使用设备的不同,结合各定位技术的特点,选择最优的一个或多个定位技术。混合定位于是应运而生。在市郊,可以使用GPS接收机提供位置信息实现高精度定位,并且通过网络补充信息来缩短定位时间,进一步提高定位精度;在市内,通过GPS、CELL-ID和Wi-Fi混合定位[9]的方式对较复杂的环境比如高楼密集区域或室内环境的智能终端进行精确的定位。表1总结了几种不同定位技术的优缺点。
通过表1可以看出混合定位的适用面最广泛,无论在繁华的城市,还是偏僻的农村、人烟稀少的郊区,都具备较高的定位精度。和单一的使用某种定位技术相比较,混合定位技术尽管实现起来较为复杂,但是具有更高的性价比。
三、定位API及其选择
当前定位技术日益趋向于API化,省去了开发人员在研究定位技术上耗时。利用开放的定位API,仅需要将应用程序的必要信息封装起来通过指定的网络协议传输到第三方提供的服务器,就可以实时获取服务器反馈给用户设备所处位置信息的响应。目前主流的定位API有以下三种。
1.Google API
为帮助全世界开发人员轻松打造位置感知应用,Google提供了位置API,采用智能化管理的基本定位技术,根据用户的需求提供最佳地点。开发人员在使用该API的过程中,可以根据需要设置“精度”“功耗”等参数,还可以快速访问到最新、最近的位置,同时降低电源消耗;还可以检查用户当前活动,并根据这些活动有效地使用电源。
2.高德API
高德公司为Android平台提供与LBS服务相关的接口,定位SDK采用多种定位技术协作的方式(包括GPS、Wi-Fi、基站等),会根据设备当前所处的实际情况,选择最佳的定位方案。
3.百度API
几年前,百度公司推出地图API,并且免费提供给用户使用。几年来逐步提供面向网页地图应用的JavaScript开源库、JavaScript API和Flash API,以及面向手机地图应用提供的定位SDK。除此之外,还包括静态图API和车联GPS/AGPS定位实现。
Google是最早涉足定位技术领域的,其定位准确度不容质疑。但是,继2011年关闭了Google Gears接口,2012年又关闭了Wi-Fi信息数据库的访问接口,人们再无法免费享受到Google的定位API的服务。百度和高德的定位API在定位准确度、定位时间上没有太大差距,因此笔者对两者的性能进行了测试。
实验时,在某品牌某型号手机上对高德定位API进行测试。在GPRS和Wi-Fi网络同时关闭(GPS设备可用)时,高德API无法获取经纬度信息。百度定位API未发现该问题。
为了方便LBS开发者,百度LBS开放平台提供LBS云服务,服务端的数据计算和存储能力已开放,通过现有API和SDK服务,提供海量位置数据的存储和检索服务。
从性能、可控性方面考虑,最终选择百度的定位API作为在Android平台上校园定位技术的解决方案。
四、实例验证
本节首先介绍百度API的使用方法,随后以校园移动即时通信系统Android客户端为实例,验证利用百度定位API实现校园定位的可行性、合理性和服务效率。
1.百度API的使用方法
百度定位需要注册并申请API Key,开发人员可以根据实际需求,选择合适的定位优先级。Android 移动终端可在LBS 云端计算和检索符合要求的位置信息,并且把适合的位置信息保存。具体实现过程如下:
通过定位SDK的核心LocationClient类设置API Key,即setAK()方法。
设置LocationClient参数,方便根据具体的问题选择不同的定位方案。在项目中,通过BaiduLocationParamsConfig类提供的静态setLocationOption()方法,设置LocationClient的配置信息,如位置信息更新频率、定位方式优先级(一般选网络有限)、定位服务的版本等。
LocationClient提供了start()方法来开启定位。随后注册位置的监听(即BDLocationListener),即可获取到最新的位置信息。BDLocationListener接口中提供了onReceiveLocation()方法,参数BDLocation即为位置信息。BDLocation中提供了对位置信息包括经、纬度、详细地址信息等的get、set方法。
locationListener变量实现了BDLocationListener,负责在新的位置信息达到后进行处理,把最新的位置信息存于BDLocation中。
LocationClient的getLastKnownLocation()方法,用来获取最近一次成功的位置信息,用于在定位成功后獲取位置信息。
2.即时通信客户端验证
下面在西安交通大学即时消息通信Android客户端上,验证应用百度定位API实现校园定位的正确性、可行性。
首先Android 移动终端定时通过百度LBS 云端计算和检索所有用户的位置信息(经、纬度信息)和定位时间戳,并将位置信息保存在数据库中。用户位置信息表如表2所示。
在软件的“摇一摇”模块中,设计了“附近好友”的功能,用户摇晃手机,客户端执行定位功能,通过对设备定位,将获取到的经度和纬度信息封装进IQ包,以XML流形式发送到服务器端。服务器端会根据解析到的经度和纬度信息,采用百度LBS的云存储数据周边检索功能,以一点为中心(中心点通过经纬度参数指定),搜索中心点附近指定距离范围内的POI点。与数据库中已存储的所有用户的位置信息进行比较,搜索出一系列附近好友。“摇一摇”查找附近好友功流程图如图1。
服务器端客户端搜索到的用户位置信息为Ls(lso,lsa)(其中,lso表示请求用户的经度信息,lsa表示请求用户的纬度信息),如果从百度LBS云存储中检索到的周边某些用户的位置信息为Lp(lpo,lpa)(其中,lpo表示用户的经度信息,lpa表示用户的纬度信息),如果满足lpo和lpa分别在lso和lsa的200米以内(200米约为0.02度左右)[10],将该用户的JID信息添加到结果列表。在这些附近用户列表中随即选取一个用户,将该用户的基本信息封装起来,作为响应的IQ包,在IQHandler类中作为客户端请求的响应[11],返回给客户端,功能UI界面如图2。
经过测试,通过百度定位API在校园即时通信Android客户端实现的查找附近好友功能,响应时间不超过0.5秒。使用Monkey对该功能进行10000次的压力测试,系统未接收到任何崩溃或失控的异常,结果如图3所示,“Events injected:10000”后所提示。
上述实例研究说明, 本文提出的基于云计算的百度定位API的校园定位解决方案在Android平台上具有良好的可行性。在无线网络环境验证中,获取地理位置信息的秒级反应速度符合移动端软件界面的交互需求, 运行效率符合实际需求。
五、结束语
随着数字校园的不断发展,业务系统移动化已经成为一种趋势。针对当前移动终端系统与LBS服务相隔绝的问题,本文提出一套基于云计算的Android平台的校园定位功能实现技术方案,以实现校内移动业务与LBS的集成应用,为师生提供更为智能灵活和便捷的服务。本文以校园即时消息通信Android客户端展开实例验证,实验结果证明该技术方案是合理的、可行的和正确的。此方案还可以与移动迎新、教务考勤、校园订餐、校车调度等多种移动业务结合。在移动迎新中通过获取新生位置和校园地图,为学生指引各步骤需要办理的具体地点和路线;教务考勤可通过精确获取学生位置信息,从地理维度提升考勤精确度;校园订餐可直接提取订餐人员位置和校园地图,获取送餐地点和路线;校车调度可通过定位技术实时获取校车位置,判断校车到达某一站点的时间,为师生提供合理的乘车方案。如何让基于云计算的LBS的校园定位技术与有相关需求的校园移动应用相结合,为移动用户提供更好的用户体验,将是我们下一步的研究方向。
参考文献:
[1]张瑞洁,田原,刘思叶,等.即时通信文本中地理信息提取——以微信为例[J].北京大学学报(自然科学版),2016,52(6):985-989.
[2]Akbar Siddieq,Ida Nurhaida.Mobile application of BTS tower search build upon location based service (LBS)[J].Library Hi Tech News,2019,36(3):1-6.
[3]付宇,王红.位置隐私保护的虚拟轨迹填充算法[J].计算机应用,2019,39(8):2318-2325.
[4]胡德敏,郑霞.基于连续查询的用户轨迹k-匿名隐私保护算法[J].计算机应用研究,2017,34(11):3421-3423+3427.
[5]QUALCOMM Incorporated. Patent Issued for Location Based Service (LBS) System, Method And Apparatus For Triggering Of Mobile Station LBS Applications (USPTO 10,237,697)[J].Computers, Networks & Communications,2019.
[6]刘海,李兴华,雒彬,等.基于区块链的分布式K匿名位置隐私保护方案[J].计算机学报,2019,42(5):942-960.
[7]Xiaowen Gong,Xu Chen,Kai Xing,et al. From Social Group Utility Maximization to Personalized Location Privacy in Mobile Networks[J].IEEE/ACM Transactions on Networking (TON),2017,25(3):1703-1716.
[8]张经纬.基于时空相关的移动对象位置匿名方法研究[D].哈尔滨:哈尔滨工程大学,2014.
[9]周傲英,杨彬,金澈清,等.基于位置的服务:架构与进展[J].计算机学报,2011,34(7):1155-1171.
[10]柯昌博,吴嘉余,曹彦.面向云计算应用层演化的隐私保护方法研究[J/OL].计算机工程与应用:1-9.http://kns.cnki.net/kcms/detail/11.2127.TP.20190705.1637.030.html.
[11]李亚红,赵冬玲.半结构化数据的形式化描述及数据抽取方法研究[J].计算机应用与软件,2013,30(4):145-148.(编辑:鲁利瑞)