近年來,移動互聯網技術飛速發展、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 服務器根據要求調用數據庫中的地圖數據以及相應的地理處理工具來提供服務。定位服務器主要用于運行算法,當接收到客戶端發來的無線信號時,調用室內定位算法確定終端設備的位置,并將該位置的相關數據發送至客戶端??蛻舳伺c服務端之間利用無線網絡進行數據傳輸,通過標準的 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 所示?!?】
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.