近年来,移动互联网技术飞速发展、Android 智能手机的日益普及,基于 Android 平台而开发的各种移动应用层出不穷。其中,被看作移动互联网领域的“杀手级应用”的 LBS 更是得到了前所未有的发展。LBS 发展至今,人们更加需要在像学校、医院这样的小环境区域中获得准确 LBS 服务[1].提供LBS 服务必须在确定用户位置的基础上,而这样的小环境区域往往包含室内和室外两种不同的环境。
在室外,GPS 提供了非常精准的位置信息; 但是卫星信号易受到建筑物的遮挡,在室内环境下 GPS 并不能提供高精度的定位,而 WiFi、ZigBee、蓝牙、红外、超声波、射频识别、超宽带等无线定位技术快速发展,成为对 GPS 的有力补充。
因此本文以校园这个特殊职能的小环境区域为研究对象,基于 Android 平台设计和实现了一个校园 LBS 系统: 以 ArcGIS 系列软件制作的校园地图为背景; 室外环境中通过接收 GPS 信号进行定位; 室内环境中在无需利用额外硬件设备的前提下,综合考虑无线信号覆盖范围、受室内环境影响程度、定位精度要求等等,采用基于 WiFi 信号强度的位置指纹定位算法进行定位。系统可为师生和来访者提供位置相关的信息服务。
1 系统设计
1. 1 系统需求分析
本系统所追求的理想结果是在室外环境中,地图服务功能能够让用户在终端设备上查看校园环境地图,通过放大缩小、上下移动等操作全面熟悉校园环境。实时定位用户位置、查询从当前位置前往目的地的最优路径并标记在校园环境地图上; 在室内环境中,根据用户的选择显示相应的室内环境地图。
定位时,将用户相对于室内环境的位置标记在室内环境地图上,并且能够获取该位置相应的服务信息,例如,空教室信息、课程信息等等。
1. 2 系统总体设计
根据系统的需求分析,整个系统在逻辑上分为客户端、服务器端与数据库三层架构。系统结构如图 1 所示。
( 1) 客户端: 安装于 Android 系统的智能手机上,完成核心功能与数据的前台显示,是与用户进行交互的重要层。系统核心功能主要包括地图服务、室外 GPS 定位、校园路径指引、室内 WiFi 定位、课程信息查询、空教室查询。
( 2) 服务器端: 运行于 PC 端,主要分为 GIS 服务器、Web 服务器和定位服务器。将 ArcGIS Desktop 软件创建的校园地图利用 ArcGIS Server 发布于 Web 服务器,并实现管理和更新。当 Web 服务器接收到客户端发来的地图操作请求时,通知 GIS 服务器根据要求调用数据库中的地图数据以及相应的地理处理工具来提供服务。定位服务器主要用于运行算法,当接收到客户端发来的无线信号时,调用室内定位算法确定终端设备的位置,并将该位置的相关数据发送至客户端。客户端与服务端之间利用无线网络进行数据传输,通过标准的 HTTP 协议进行通信。
GIS 服务器: ArcGIS Server 10. 2Web 服务器: IIS 6. 0( Internet Information Server6. 0)定位服务器: Apache Tomcat 7. 0. 47( 3) 数据库: 负责向服务层提供数据支持。客户端使用 SQLite 和文件方式存储少量本地数据; 定位服务器采用 Mysql 数据库存储室内定位中离线训练阶段的位置指纹库[2]、空闲教室信息和课程信息。GIS 服务器采用 Geodatabase 地理数据库存储校园地图的空间数据和属性数据。
2 校园地图系统设计
针对校园环境的地图系统的设计过程就是将校园地理信息矢量化为地图并完成发布和管理的过程,由 ArcGIS Desktop 软件来完成空间数据的采集、编辑、分析、更新等操作,ArcGIS Server 实现地图服务和网络分析服务发布,在 Android 平台上结合ArcGIS for Android 插件访问自行发布的地图,获取地图服务和网络分析服务。
2. 1 空间数据的采集
空间数据的采集是将纸质地图、遥感影像、外业观测数据、文本资料等不同来源的数据转换成计算机可以接收与处理的数字形式[3 -4].本地图中,主要包括以下几种数据: ( 1) 地图数据,采用了由学校提供的校园平面地图。( 2) 影像地图,在 GoogleEarth 上利用 GEtScreen 软件截取校园卫星影像数据。( 3) 实测数据,由于设备有限,本地图直接通过ArcGIS Online、Google Map 等现有的地图软件测量比较获取地图点坐标、道路路线长度等数据。
2. 2 地理配准
采集的校园平面地图和卫星影像数据是不含任何地理数据信息的,要使用它就要进行配准以及赋予它正确的地理数据。这里必须引入空间参考的概念。
空间参考包括 X、Y、Z 值坐标系以及 X、Y、Z 和 M 值的容差值和分辨率值,使用这些属性,可以确定一个地物在地球上的位置。常用的坐标系统主要包括地理坐标系和投影坐标系。本地图中选择地理坐标系GCS_WGS_1984,该坐标系就是移动平台 GPS 所采用的坐标系统,通过 GPS 获得的坐标信息都是按这个坐标系提供的经纬度。ArcGIS 中地理配准使用 Geo-referencing 工具条,一般要经过坐标系的选择、添加控制点、检查残差、校正及重采样等几个步骤。
为减少误差带来的影响,控制点应当尽量选取卫星影像上容易分辨且比较精细特征点或者图像边缘处的点。并且尽可能在区域当中均匀、满幅的选点。
影像特征变化较大的地区应该多选几个控制点。
2. 3 空间数据的编辑
完成地理配准之后,需要构建校园要素图,对校园内所需描述的要素以图层的形式表现出来,这是一个矢量化的过程。根据系统的设计要求,将校园地图的空间数据分为 5 个图层,涉及点要素、线要素和面要素 3 种图层类型,完成对不同属性地物的矢量化。具体如表 1 所示。【1】
ArcGIS 中空间数据的编辑使用 Editor 工具条,依次对各个图层的地物进行编辑。进行数据编辑时需要注意各个数据元素之间的拓扑规则。
2. 4 空间数据的分析
ArcGIS 中使用网络分析功能模拟解决现实世界的多种网络问题。根据网络问题的不同类型,可以采取不同的建模方式。对于定向网络,通常采用几何网络分析方式建模。对于非定向网络,通常采用网络数据集的方式建模。
交通网络属于非定向网络,适用由边、交汇点和转弯要素组成的网络数据集建模。步骤如下: 首先建立和编辑网络数据集; 然后在网络数据集中利用ArcToolbox 中的网络分析扩展模块进行点到点的路径分析,获得最短路径。
2. 5 地图服务与网络分析服务发布
在 ArcGIS Server 服务器上发布服务之前需先安装 IIS,它是允许在网络( 包括互联网和局域网)上发布信息的 Web 服务器。校园地图服务和网络分析服务发布成功之后,可在 ArcGIS Online 上实现在线访问,通过 IIS 供不同的移动终端调用。An-droid 平台使用 ArcGIS for Android 插件调用自行发布的地图,执行最短路径分析操作。
3 基于 WiFi 信号强度的位置指纹定位
复杂多变的室内环境中,无线信号传播衰减模型[5]难以准确的描述具有较强时变特性的 WiFi 信号强度与距离之间的关系。由于基于 WiFi 信号强度值的位置指纹定位算法具有较好的定位鲁棒性,因此本系统使用它来进行室内定位。
位置指纹定位是依据终端所处位置的位置指纹信息,查询位置指纹库,根据相应的匹配算法来估计终端所处的位置[6 -7].可获取的位置指纹有多种,因 RSSI 易于测量,因而受到了广泛关注。
位置指纹定位通常分为两个阶段: 离线建库阶段和在线定位阶段。离线建库阶段首先建立一张与目标环境地理图相对应的地理空间坐标图来,然后将目标区域划分为若干采集点。采集点的密集程度及数量可根据环境而定,一般情况下,采集点越密集,定位结果越精准。对每个采集点多次扫描每个 AP 的信号强度值,扫描结果进行“平滑”处理,去除一些跳变较大的值,其余值求平均,形成 RSSI 位置指纹库。本文采用高斯滤波方法对信号进行“平滑”处理,之所以采取高斯滤波方法,是由于 RSSI 值的分布与正态分布曲线相似。依据工程中的经验,我们选择概率大于0.6 的范围[8].经过高斯滤波处理之后的 RSSI 取【2】
根据文献[9]可知,AP 接入点个数为 4 个时室内环境位置指纹可满足定位精度的要求,因此将RSSI 位置指纹库的数据表设计[10]为 < ID、X、Y、MAC1、RSSI1、MAC2、RSSI2、MAC3、RSSI3、MAC4、RSSI4 > 形式,其中 ID 为各个采集点编号,X、Y 为采集点的横纵坐标,MAC1、MAC2、MAC3、MAC4 分别为 4 个 AP 接入点的物理地址,RSSI1、RSSI2、RS-SI3、RSSI4 分别为对应的信号强度平均值,也是用于定位的指纹特征。考虑到校园楼宇 AP 的布设情况,大多数楼宇都能满足一个楼层 4 个接入点或者更多的要求,这里不再另外布置 AP,而是选择平均信号强度值最大的 4 个现有 AP 进行建库。测量无线信号的设备使用华硕笔记本 A45V,测试软件是专门写的一个采集无线信号的小程序。
在线定位阶段,通过客户端扫描当前位置的实时信号强度值。为了提高数据准确性,将扫描次数定为 5 次,然后取平均值作为该 AP 的实时信号强度值。将处理好的实时 RSSI 值发送至定位服务器,由定位服务器调用最近邻算法与位置指纹库进行匹配,找出与当前位置距离最近的采集点,从而估算出终端所在位置。
4 校园 LBS 系统功能模块实现
4. 1 地图服务与校内地点查询
地图服务模块采用 ArcGIS for Android 开发包提供的地图核心控件MapView 来实现对地图的加载、浏览、缩放、平移等操作。ArcGIS for Android 中将 Map-View 作为地图容器,用来呈现地图服务的数据。要显示地图图层必须将其添加到MapView 地图容器中。
首先定义MapView 对象,然后将校园地图动态图层加载到 MapView 对象上,通过发布地图服务的 URL 地址对应到地图服务的 REST 接口上,实现地图服务的操作。以下是获得地图服务的关键代码。
public class CampusMapActivity extends Activity {private MapView mMapView;private ArcGISDynamicMapServiceLayer mapLayer;protected void onCreate( Bundle savedInstanceState) {super. onCreate( savedInstanceState) ;setContentView( R. layout. campusmap) ;mMapView = ( MapView) findViewById( R. id. map) ;mapLayer = new ArcGISDynamicMapServiceLayer( “http: / /192. 168. 58. 103: 6080 / arcgis / rest / services / Cam-pusNew / MapServer” ) ;/ / 添加校园地图图层到 MapViewmMapView. addLayer( mapLayer) ;}}
除实现地图服务的操作之外,界面中还定义了一个 EditText 和一个 Button.在 EditText 中输入地点,点击 Button 完成数据解析,获得对应地点 ID,并找到位置点,实现校内地点查询。图 2 为查找“研究生部”位置的效果图。
4. 2 GPS 定位
Android 平台中,GPS 定位功能被封装在一个LocationManager 对象中。要使用 GPS 定位服务,首先应当定义 LocationManager 对象 loc,开启定位服务。服务开启之后通过 requestLocationUpdates 方法注册定位服务监听器 LocationListener,当前定位状态或位置发生变化时会向监听器发出通知。自定义功能在监听器函数内实现。以下是在 Android 平台上调用 GPS 定位的关键代码。
LocationManager loc;Loc = ( LocationManager) GetPositionActivity. this. getSys-temService( Context. LOCATION_SERVICE) ;Loc. requestLocationUpdates( LocationManager.
GPS_PROVIDER,0,0,new LocationListener( ) {public void onStatusChanged( String provider,int status,Bundle extras) {…… / /GPS 状态变化时触发}
public void onProviderEnabled( String provider) {…… / /GPS 开启时触发}
public void onProviderDisabled( String provider) {…… / /GPS 禁用时触发}
public void onLocationChanged( Location location) {…… / /位置信息变化时触发}
} ) ;GPS 定位效果图如图 3 所示,点击“获取当前位置”按钮开始定位,以红色图标告知用户定位点,以Toast 方法给出当前位置经纬度。
4. 3 最短路径查询
ArcGIS for Android 执行路径分析可以通过RoutingTask 类的 solve 方法来进行,首先将对应到网络分析服务的 REST 接口上的 URL 地址传递给RoutingTask 对象,然后调用 RoutingTask 类的 solve方法,并给它传递 RoutingParameters 类型的参数,就可以进行最短路径的查找。以下是获取网络分析服务,执行最短路径查询的关键代码。
Try{RoutingParameters rp = new RoutingParameters( ) ;NAFeaturesAsFeature rfaf = new NAFeaturesAsFeature( ) ;StopGraphic point1 = new StopGraphic( startPoint) ;StopGraphic point2 = new StopGraphic( stopPoint) ;rfaf. setFeatures( new Graphic[]{ point1,point2} ) ;rfaf. setCompressedRequest( true) ;rp. setStops( rfaf) ; rp. setOutSpatialReference(mMapView. getSpatialReference( ) ) ; RoutingTask rt = newRoutingTask(“ http: / /192. 168. 58. 103: 6080 / arcgis / rest / services /NewSchoolND / NAServer / Route” ,null) ;RoutingResult mResults = rt. solve( rp) ;} catch( Exception e) {E. printStackTrace( ) ;Looper. prepare( ) ;Looper. loop( ) ;}
最短路径查询效果如图 4 所示,默认起点为当前位置,用户也可以自行输入起点、终点位置名称,点击“查找”按钮,完成最短路径查询。
4. 4 室内定位与服务
在线定位阶段,客户端需要扫描当前位置的信号强度值。Android 平台中,这一功能被封装在一个WifiManager 对象中。首先应当定义 WifiManager 对象 wifimanager,通过 getSystemService 方法开启操作WiFi 的权限; 权限开启之后,建立接收器 broadcas-tReceiver,并重载 WiFi 信号的回调函数 onReceive( ) ; 然后通过 registerReceiver( ) 方法注册接收器broadcastReceiver; 最后用 startScan ( ) 方法启动扫描。当获得扫描结果后,触发回调函数 onReceive( ) ,回调函数完成将扫描结果发送至定位服务器,获得定位服务器返回的结果后更新显示界面的功能。以下是 Android 平台上获取周边 AP 信号强度的关键代码。
Private WifiManager wifimanager;private BroadcastReceiver broadcastReceiver;broadcastReceiver = new BroadcastReceiver( ) {public void onReceive( Context arg0,Intent arg1) {List < ScanResult > wifilist = wifimanager. getScanResults( ) ;……}
}
Wifimanager = ( WifiManager) getSystemService ( Context.WIFI_SERVICE) ;/ / 注册回调函数registerReceiver( broadcastReceiver,new( IntentFilter( Wifi-Manager. SCAN_RESULTS_AVAILABLE_ACTION) ) ;/ / 启动扫描wifimanager. startScan( ) ;室内定位效果如图 5 所示,进行定位之前,用户根据所进入的楼宇选择显示对应的室内地图,点击“获取当前位置”按钮启动扫描,将扫描结果提交给定位服务器,获得定位服务器返回的位置信息以红色图标告知用户定位点。定位服务器估算出终端位置后,根据 new Date( ) 方法获得当前时间,查询空闲教室信息表与课程信息表,将查询结果发送至客户端。查询结果如图 6所示。
5 结语
通过对 Android 平台上的 GPS 定位、基于 WiFi的室内定位和 Mobile GIS 等各项技术的研究,设计并实现了一个校园 LBS 系统。测试结果表明,该系统的各个模块能够基本满足师生对校园 LBS 服务的基本要求。但还有很多地方有待提高: ( 1) 从整个系统看,客户端与服务器的数据传输依赖无线通信网络,数据量较大,网络不通畅时会出现无法交互的现象。( 2) 空间数据采集时,缺乏获取精确数据的专业设备,采集的数据会出现小范围误差。( 3) 扩展功能模块,添加周边娱乐设施查询、好友查询等等,使系统功能更加完善。
参考文献:
[1] 杨帆。 基于 GIS 与定位技术的室内外定位系统的设计和实现[D]. 沈阳: 东北大学,2011.
[2] 林以明,罗海勇,李锦涛,等。 基于动态Radio Map 的粒子滤波室内无线定位算法[J]. 计算机研究与发展,2011,48( 1) : 139- 146.
[3] 牟乃夏,刘文宝,王海银,等。 ArcGIS10 地理信息系统教程 -从初学到精通[M]. 北京: 测绘出版社,2012.
[4] 孙茜茜,陆南。 基于 Android 与 Mobile GIS 的新生报到服务系统[J]. 现代电子技术,2013,36( 20) : 79 -83.
[5] Kwok-Wai Cheung,Jonathan H M Sau,Murch R D,et al. A NewEmpirical Model for Indoor Propagation Prediction[J]. IEEE Trans-actions on Vehicular Technology,1988,8( 3) : 29 - 37.
[6] 王赛伟。 基于位置指纹的 WLAN 室内定位方法研宄[D]. 哈尔滨: 哈尔滨工业大学,2009.