洪文菊, 茍 剛, 薛現斌(貴州大學 計算機科學與技術學院, 貴陽 550025)
基于位置服務的移動GIS①
洪文菊, 茍 剛, 薛現斌
(貴州大學 計算機科學與技術學院, 貴陽 550025)
隨著移動終端的普遍應用, 無線通信技術和地理信息系統的飛速發展, 基于位置的服務LBS(Location Based Service)與移動GIS(Geographic Information system)相結合的應用模式已成為研究熱點, 并且開拓了一個具有無限潛能的市場. 本文首先論述了基于位置服務的移動GIS的基本概念, 探討了Android開發平臺的系統架構與基于LBS的移動GIS體系結構, 在此基礎上設計了一個基于android平臺的移動GIS系統, 該系統在傳統移動GIS的基礎上進行了改進, 克服了傳統移動GIS缺乏社交互動性的缺點, 不僅能夠實現準確的實時定位與軌跡記錄查詢, 還能夠與好友互相分享實時位置以及進行多人軌跡的同時追蹤, 可以用于對老人兒童等弱勢群體進行實時監護, 也可以用于企業員工、車輛的管理調度等.
位置服務; 移動GIS; 移動定位
目前, 隨著智能手機的普及以及移動定位的迅速發展, 位置服務與移動GIS相結合的應用模式, 已經成為研究熱點. 許多公司、組織或者個人開發了各種基于位置服務的移動GIS應用, 這些應用大多都是基于地圖瀏覽或者個人移動定位方面, 偏向于導航功能, 而在用戶軌跡記錄及社交分享以及用戶互動方面的功能則比較少.
為了彌補以上的這些不足之處, 本文設計并開發了一款基于位置服務的可用于實時定位與軌跡分享的移動GIS, 本系統在實現了傳統移動GIS的導航與定位等基礎功能的基礎上, 還增加了軌跡記錄、歷史軌跡查詢、好友之間的位置分享及多人軌跡同時查看等功能, 以期為用戶提供更加實用便捷的位置服務.
地理信息系統(Geographic Information System,GIS), 是在計算機軟件、硬件和網絡的支持下, 對地理空間數據進行采集、存儲、查詢、分析和顯示的技術系統[1]. 移動GIS是目前地理信息系統研究的重要方向之一, 它在繼承了傳統地理信息系統對地理空間數據處理的基礎上, 還集成了嵌入式技術、移動計算技術、移動通信技術和定位技術, 使得地理空間數據的采集與處理更加具有靈活性與實時性. 基于位置的服務(Location Based Service, LBS), 是指移動終端利用各種定位技術獲得當前位置信息, 再通過無線網絡得到某項服務[2]. 與傳統的GIS相比, 基于位置服務的移動GIS具有移動性、實時性、靈活性、多樣性等特點, 能夠提供實時的空間信息“4A服務”, 已經成為了人們日常生活中的一種必不可少的信息服務.
Android是一種基于Linux平臺的、開源的、智能移動終端的操作系統, 它由谷歌公司開發而成, 近年來已逐漸成為主流的移動終端操作系統之一. Android操作系統采用分層架構設計, 從高層到低層可以分為四層架構, 分別是應用層、應用框架層、系統運行庫層和 Linux 內核層[3].
1) Linux內核層:基于 Linux 2.6內核開發, 主要用來為Android設備的各種硬件提供底層的驅動, 如顯示驅動、音頻驅動、照相機驅動、藍牙驅動等, 它是硬件和軟件之間的抽象層.
2) 系統運行庫層: 通過C/C++庫來支持Android系統提供的各個組件或者模塊. 這一層包含有Android運行時庫, 它提供的核心庫能夠允許開發者使用Java語言來編寫Android應用. 運行時庫中還包含Dalvik虛擬機, 它專為移動設備服務, 使得每一個Android應用都能運行在獨立的進程當中.
3) 應用框架層:提供開發者構建應用程序時所需要的各種API.
4) 應用層:該層包含所有運行在Android機上的應用程序, 即開發者所開發的“手機應用”.
基于LBS的移動GIS主要由3部分構成: 客戶端部分、服務器部分和數據源部分[4]. 如圖1所示.
客戶端: 基于LBS的移動GIS的移動終端是一種能夠進行快速定位和地理識別的設備. 它具有方便攜帶、耗能低等特點, 并且兼容具備衛星導航定位、加載行業應用軟件、通信和數據傳輸等基本功能. 常用的硬件設備主要包括智能手機、便攜式電腦、掌上電腦(PDA)、GPS定位儀等.

圖1 基于LBS的移動GIS體系結構圖
服務器: 系統的服務器包括Internet、Web Server、Map Server等組成部分. 無線通信網絡用來連接用戶與服務器, 目前主流應用的無線網絡分為基于蜂窩通信系統的無線網絡(GSM、GPRS、CDMA、LTE等)和無線局域網(WiFi)兩種方式. Web服務器接收客戶端提交的不同類型數據, 服務器處理邏輯將接收到的數據按照客戶端的要求在Web服務器端進行運算, 再將運算的結果返回給客戶端進行解析和顯示. GIS應用服務器提供LBS服務、空間數據分析、查詢、下載等操作[5]. 它是整個系統的核心部分.
數據源: 基于LBS的移動GIS系統包含了與地理位置有關的空間數據以及相應的屬性數據, 是地理應用服務器實現地理信息服務的數據來源. 其中屬性數據可以存儲在嵌入式數據庫中(如SQLite), 也可以存儲在服務器端的數據庫中(如SQL Server). 空間數據可以存放在本地, 作為離線地圖使用, 但考慮到空間數據的更新頻率較快, 數據量較大等因素, 通常存放在GIS應用服務器中以在線的形式進行訪問.
本文旨在實現一個基于位置服務的移動GIS. 系統通過用戶移動終端的GPS或移動網絡采集用戶的實時位置信息, 用戶可以在電子地圖上查看自己的位置.同時, 系統可以記錄用戶移動產生的軌跡, 用戶可以通過選擇時段查詢自己在該時段中的歷史軌跡. 系統也集成了社交互動功能, 用戶可以添加好友, 在與好友互相開放位置之后可以查看彼此的實時位置與軌跡,同時用戶還可以建立群組, 同時查看多個群成員的軌跡情況.
4.1 總體設計
根據分析定位系統的業務需求與系統功能需求,將本系統的主要功能模塊設計如圖2所示.

圖2 系統功能模塊圖
本系統由移動客戶端與后臺服務器端兩部分構成.移動客戶端在Android系統平臺上開發, 使用Android studio作為開發工具. 客戶端與服務器端采用C/S結構來進行交互, 本系統采用Apache作為Web服務器, 選擇SqlServer作為數據庫管理系統.
本系統的移動客戶端負責接收用戶的請求和顯示結果, 直接與用戶進行交互. Web服務器負責接收客戶端的請求, 通過SQL語句等方式調用數據庫服務器,然后將數據處理的結果返回給Web服務器, 再由Web服務器傳送回客戶端.
本文主要討論基于LBS功能的實現, 因此系統中如添加好友、新建群等輔助功能則不再贅述.
4.2 功能實現
4.2.1 客戶端與服務器端的通信
本應用采用Volley框架來處理客戶端與服務器端的通信. 盡管Android SDK中提供了HttpClient 和HttpUrlConnection兩種方式用來處理網絡操作, 但當應用比較復雜的時候就需要我們編寫大量的代碼處理很多東西, 如圖像緩存, 請求的調度等等. 而Volley框架抽象了底層Http Client等實現的細節, 使Android應用網絡操作更方便更快捷, 并且Volley在不同的線程上異步執行所有請求而避免了阻塞主線程[6].
Volley的用法如下:
RequestQueue mQueue = Volley. newrequest Queue (context); //獲取請求列對象
StringRequest stringRequest = new StringRequest(getString(R.string.webIP), new Response. Listener<String>() {
@Override
public void onResponse(String response
) {
Log.d("TAG", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse ( VolleyError error)
{
Log.e("TAG",error.getMessage(), error);
}
}); //傳入三個參數, 分別是服務器地址, 服務器響應成功回調, 服務器響應失敗的回調
mQueue.add(stringRequest);
4.2.2 登錄注冊模塊的實現
用戶使用Android客戶端時首先看到的是登錄頁面. 已經注冊了的用戶可以直接進行登錄, 沒有注冊過的用戶需要先進行注冊, 然后再登錄進入本系統.該模塊的內部流程如圖3所示.

圖3 客戶端登錄注冊流程圖
其中部分關鍵代碼如下:
final String user = et_name. getText(). toString(). trim(); //獲取用戶輸入的用戶名
final String password = et_password. getText().toString().trim(); //獲取用戶輸入的密碼
if(TextUtils.isEmpty(user)||TextUtils.isEmpty
(password)) {
Toast.makeText(getApplicationContext(), "用戶名和密碼不能為空", Toast. LENGTH_SHORT). show () ;
return;
}
Map<String, String> map = new HashMap<String, String>();
map.put("user", user);
map.put("password", myApp.md5 (pass word));
4.2.3 定位模塊的實現
在本系統用戶可以在本機頁面點擊“開啟實時位置”實現自我的實時定位. 該部分的界面主要是一個MapView, 界面的底端有放大地圖與縮小地圖的按鈕,用戶也可以通過手勢拖動或放大縮小地圖. 本模塊功能實現流程如圖4所示.

圖4 定位模塊流程圖
其中部分關鍵代碼如下:
public void start() {
//新建百度地圖定位客戶端類;
mLocationClient = new LocationClient(ct);
mMyBDLocationListener = new MyBDLocationListener();
/ /注冊監聽器;
mLocationClient.registerLocationListener(mMyBDLocat ionListener);
//創建定位選項;
LocationClientOption option = new Location ClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy );//設置定位模式, 高精度, 低功耗, 僅設備
option.setCoorType("gcj02");//返回國測局經緯度坐標系: gcj02
option.setScanSpan(1000 * locate_time);//設置發起定位請求的間隔
option.setIsNeedAddress(true);//設置是否需要地址信息
option.setOpenGps(true);//設置是否使用gps
mLocationClient.setLocOption(option);
mLocationClient.start();
}
功能運行結果如圖5所示.

圖5 定位功能的實現
4.2.4 軌跡查詢模塊的實現
軌跡查詢分為查詢自己的歷史軌跡與查詢好友的歷史軌跡. 用戶查詢自己的歷史軌跡時, 首先設定要查找的時間段, 即軌跡的開始時間與結束時間, 時間段的設置通過datePicker與timePicker兩個類組成的時間選擇器來實現, 然后通過SQL語句查詢保存在本機SQLite數據庫中的數據, 查詢到的這些數據就是這段時間里所定位到的位置點points, 最后通過如下代碼將數據繪制成軌跡顯示在界面上.
OverlayOptions mopolyline = new PolylinOptins().width(10).color(0xAAFF0000).points(points);
mBaiduMap.addOverlay(mopolyline);
查詢本機歷史軌跡的開發流程如圖6所示.

圖6 本機歷史軌跡查詢模塊
若用戶要查詢好友的歷史軌跡, 則在用戶設定查找時間段發起請求后, 系統將好友的用戶ID, 查詢的起始時間通過封裝成Map鍵值對發送到服務器端, 服務器再根據這些信息在SqlServer數據庫中進行位置數據查找, 之后將結果返回給客戶端. 這部分的關鍵代碼如下:
Map<String, String> map = new HashMap <String, String>();
map.put("friend_id", show_userID);
map.put("starttime", starttime);
map.put("endtime", endtime);
webserverhelper = new WebServerHelper(get-String(R.string.webIP) + getString(R.string.get_location_ url), GET_LOCATIONS, map, baidumap. this, "", "", "get_locations", this);
webserverhelper.request();
查詢好友歷史軌跡的開發流程如圖7所示.功能運行結果如圖8所示.

圖7 好友歷史軌跡查詢模塊

圖8 軌跡查詢功能實現
本文旨在實現一個基于位置服務的移動GIS. 針對當前的移動GIS應用缺乏社交與互動性的缺陷, 設計并實現了實時定位
首先對Android系統架構與移動GIS體系結構做了簡要探討, 在此基礎上研發了一套基于Android平臺的移動GIS應用系統, 實現了實時定位、軌跡記錄、歷史軌跡查詢、好友之間的位置分享及多人軌跡同時查看等功能, 極大地提高了移動GIS的互動性與社交性, 可以對特定人員進行追蹤, 能夠滿足朋友、親人、同事之間的位置需求.
位置服務與移動GIS的密切結合開拓了一個廣闊的市場, 這一市場蘊含著巨大的商機, 無限的潛能, 相信隨著移動用戶的逐步增多, 這一市場將更加壯大, 本系統的設計可以為基于位置服務的移動GIS系統提供參考.
1 肖航宇.移動地理信息系統應用研究[碩士學位論文].武漢:武漢理工大學,2010.
2 Jiang B, Yao X. Location-based services and GIS in perspective. Computers, Environment and Urban Systems, 2006, 30(6): 712–725.
3 姚昱旻,劉衛國.Android 的架構與應用開發研究.計算機系統應用,2008,17(11):110–112,24.
4 許穎,魏峰遠.移動 GIS 關鍵技術及開發模式探討.測繪與空間地理信息,2008,31(4):45–47.
5 陳飛翔,楊崇俊,申勝利,等.基于LBS的移動GIS研究.計算機工程與應用,2006,42(2):200–202.
6 孟遠.Android網絡通信框架Volley的解析和比較.軟件, 2014,(12):66–68.
Mobile GIS Based on Location Services
HONG Wen-Ju, GOU Gang, XUE Xian-Bin
(School of Computer Science and Technology, Guizhou University, Guiyang 550025, China)
With the rapid development of mobile terminal technology, wireless communication network technology and the universal application of geo-spatial information in all walks of life, the application mode that combines LBS with mobile GIS has become a hot research topic, and it opens up a market with unlimited potential. This paper discusses the basic concept of mobile GIS based on location services and the system architecture of Android development platform and the architecture of mobile GIS based on LBS. On the basis of this, a mobile GIS system based on Android platform is designed. The system has been improved on the basis of traditional mobile GIS, which overcomes the shortcomings of lack of social interaction in traditional mobile GIS, it not only can realize accurate real-time positioning and query trajectory, but also can share real-time location with friends and track the trajectory of many people at the same time. It can be used for real-time monitoring of the old elderly, children and other vulnerable groups, but also for employees, vehicle management scheduling.
location service; mobile GIS; mobile location
貴州省農業資源與環境信息化服務平臺關鍵技術的研究與建設(黔科合NY[2013]3078號)
2016-07-18;收到修改稿時間:2016-08-18
10.15888/j.cnki.csa.005672