洪文菊, 茍 剛, 薛現(xiàn)斌(貴州大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 貴陽 550025)
基于位置服務(wù)的移動(dòng)GIS①
洪文菊, 茍 剛, 薛現(xiàn)斌
(貴州大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 貴陽 550025)
隨著移動(dòng)終端的普遍應(yīng)用, 無線通信技術(shù)和地理信息系統(tǒng)的飛速發(fā)展, 基于位置的服務(wù)LBS(Location Based Service)與移動(dòng)GIS(Geographic Information system)相結(jié)合的應(yīng)用模式已成為研究熱點(diǎn), 并且開拓了一個(gè)具有無限潛能的市場(chǎng). 本文首先論述了基于位置服務(wù)的移動(dòng)GIS的基本概念, 探討了Android開發(fā)平臺(tái)的系統(tǒng)架構(gòu)與基于LBS的移動(dòng)GIS體系結(jié)構(gòu), 在此基礎(chǔ)上設(shè)計(jì)了一個(gè)基于android平臺(tái)的移動(dòng)GIS系統(tǒng), 該系統(tǒng)在傳統(tǒng)移動(dòng)GIS的基礎(chǔ)上進(jìn)行了改進(jìn), 克服了傳統(tǒng)移動(dòng)GIS缺乏社交互動(dòng)性的缺點(diǎn), 不僅能夠?qū)崿F(xiàn)準(zhǔn)確的實(shí)時(shí)定位與軌跡記錄查詢, 還能夠與好友互相分享實(shí)時(shí)位置以及進(jìn)行多人軌跡的同時(shí)追蹤, 可以用于對(duì)老人兒童等弱勢(shì)群體進(jìn)行實(shí)時(shí)監(jiān)護(hù), 也可以用于企業(yè)員工、車輛的管理調(diào)度等.
位置服務(wù); 移動(dòng)GIS; 移動(dòng)定位
目前, 隨著智能手機(jī)的普及以及移動(dòng)定位的迅速發(fā)展, 位置服務(wù)與移動(dòng)GIS相結(jié)合的應(yīng)用模式, 已經(jīng)成為研究熱點(diǎn). 許多公司、組織或者個(gè)人開發(fā)了各種基于位置服務(wù)的移動(dòng)GIS應(yīng)用, 這些應(yīng)用大多都是基于地圖瀏覽或者個(gè)人移動(dòng)定位方面, 偏向于導(dǎo)航功能, 而在用戶軌跡記錄及社交分享以及用戶互動(dòng)方面的功能則比較少.
為了彌補(bǔ)以上的這些不足之處, 本文設(shè)計(jì)并開發(fā)了一款基于位置服務(wù)的可用于實(shí)時(shí)定位與軌跡分享的移動(dòng)GIS, 本系統(tǒng)在實(shí)現(xiàn)了傳統(tǒng)移動(dòng)GIS的導(dǎo)航與定位等基礎(chǔ)功能的基礎(chǔ)上, 還增加了軌跡記錄、歷史軌跡查詢、好友之間的位置分享及多人軌跡同時(shí)查看等功能, 以期為用戶提供更加實(shí)用便捷的位置服務(wù).
地理信息系統(tǒng)(Geographic Information System,GIS), 是在計(jì)算機(jī)軟件、硬件和網(wǎng)絡(luò)的支持下, 對(duì)地理空間數(shù)據(jù)進(jìn)行采集、存儲(chǔ)、查詢、分析和顯示的技術(shù)系統(tǒng)[1]. 移動(dòng)GIS是目前地理信息系統(tǒng)研究的重要方向之一, 它在繼承了傳統(tǒng)地理信息系統(tǒng)對(duì)地理空間數(shù)據(jù)處理的基礎(chǔ)上, 還集成了嵌入式技術(shù)、移動(dòng)計(jì)算技術(shù)、移動(dòng)通信技術(shù)和定位技術(shù), 使得地理空間數(shù)據(jù)的采集與處理更加具有靈活性與實(shí)時(shí)性. 基于位置的服務(wù)(Location Based Service, LBS), 是指移動(dòng)終端利用各種定位技術(shù)獲得當(dāng)前位置信息, 再通過無線網(wǎng)絡(luò)得到某項(xiàng)服務(wù)[2]. 與傳統(tǒng)的GIS相比, 基于位置服務(wù)的移動(dòng)GIS具有移動(dòng)性、實(shí)時(shí)性、靈活性、多樣性等特點(diǎn), 能夠提供實(shí)時(shí)的空間信息“4A服務(wù)”, 已經(jīng)成為了人們?nèi)粘I钪械囊环N必不可少的信息服務(wù).
Android是一種基于Linux平臺(tái)的、開源的、智能移動(dòng)終端的操作系統(tǒng), 它由谷歌公司開發(fā)而成, 近年來已逐漸成為主流的移動(dòng)終端操作系統(tǒng)之一. Android操作系統(tǒng)采用分層架構(gòu)設(shè)計(jì), 從高層到低層可以分為四層架構(gòu), 分別是應(yīng)用層、應(yīng)用框架層、系統(tǒng)運(yùn)行庫層和 Linux 內(nèi)核層[3].
1) Linux內(nèi)核層:基于 Linux 2.6內(nèi)核開發(fā), 主要用來為Android設(shè)備的各種硬件提供底層的驅(qū)動(dòng), 如顯示驅(qū)動(dòng)、音頻驅(qū)動(dòng)、照相機(jī)驅(qū)動(dòng)、藍(lán)牙驅(qū)動(dòng)等, 它是硬件和軟件之間的抽象層.
2) 系統(tǒng)運(yùn)行庫層: 通過C/C++庫來支持Android系統(tǒng)提供的各個(gè)組件或者模塊. 這一層包含有Android運(yùn)行時(shí)庫, 它提供的核心庫能夠允許開發(fā)者使用Java語言來編寫Android應(yīng)用. 運(yùn)行時(shí)庫中還包含Dalvik虛擬機(jī), 它專為移動(dòng)設(shè)備服務(wù), 使得每一個(gè)Android應(yīng)用都能運(yùn)行在獨(dú)立的進(jìn)程當(dāng)中.
3) 應(yīng)用框架層:提供開發(fā)者構(gòu)建應(yīng)用程序時(shí)所需要的各種API.
4) 應(yīng)用層:該層包含所有運(yùn)行在Android機(jī)上的應(yīng)用程序, 即開發(fā)者所開發(fā)的“手機(jī)應(yīng)用”.
基于LBS的移動(dòng)GIS主要由3部分構(gòu)成: 客戶端部分、服務(wù)器部分和數(shù)據(jù)源部分[4]. 如圖1所示.
客戶端: 基于LBS的移動(dòng)GIS的移動(dòng)終端是一種能夠進(jìn)行快速定位和地理識(shí)別的設(shè)備. 它具有方便攜帶、耗能低等特點(diǎn), 并且兼容具備衛(wèi)星導(dǎo)航定位、加載行業(yè)應(yīng)用軟件、通信和數(shù)據(jù)傳輸?shù)然竟δ? 常用的硬件設(shè)備主要包括智能手機(jī)、便攜式電腦、掌上電腦(PDA)、GPS定位儀等.
圖1 基于LBS的移動(dòng)GIS體系結(jié)構(gòu)圖
服務(wù)器: 系統(tǒng)的服務(wù)器包括Internet、Web Server、Map Server等組成部分. 無線通信網(wǎng)絡(luò)用來連接用戶與服務(wù)器, 目前主流應(yīng)用的無線網(wǎng)絡(luò)分為基于蜂窩通信系統(tǒng)的無線網(wǎng)絡(luò)(GSM、GPRS、CDMA、LTE等)和無線局域網(wǎng)(WiFi)兩種方式. Web服務(wù)器接收客戶端提交的不同類型數(shù)據(jù), 服務(wù)器處理邏輯將接收到的數(shù)據(jù)按照客戶端的要求在Web服務(wù)器端進(jìn)行運(yùn)算, 再將運(yùn)算的結(jié)果返回給客戶端進(jìn)行解析和顯示. GIS應(yīng)用服務(wù)器提供LBS服務(wù)、空間數(shù)據(jù)分析、查詢、下載等操作[5]. 它是整個(gè)系統(tǒng)的核心部分.
數(shù)據(jù)源: 基于LBS的移動(dòng)GIS系統(tǒng)包含了與地理位置有關(guān)的空間數(shù)據(jù)以及相應(yīng)的屬性數(shù)據(jù), 是地理應(yīng)用服務(wù)器實(shí)現(xiàn)地理信息服務(wù)的數(shù)據(jù)來源. 其中屬性數(shù)據(jù)可以存儲(chǔ)在嵌入式數(shù)據(jù)庫中(如SQLite), 也可以存儲(chǔ)在服務(wù)器端的數(shù)據(jù)庫中(如SQL Server). 空間數(shù)據(jù)可以存放在本地, 作為離線地圖使用, 但考慮到空間數(shù)據(jù)的更新頻率較快, 數(shù)據(jù)量較大等因素, 通常存放在GIS應(yīng)用服務(wù)器中以在線的形式進(jìn)行訪問.
本文旨在實(shí)現(xiàn)一個(gè)基于位置服務(wù)的移動(dòng)GIS. 系統(tǒng)通過用戶移動(dòng)終端的GPS或移動(dòng)網(wǎng)絡(luò)采集用戶的實(shí)時(shí)位置信息, 用戶可以在電子地圖上查看自己的位置.同時(shí), 系統(tǒng)可以記錄用戶移動(dòng)產(chǎn)生的軌跡, 用戶可以通過選擇時(shí)段查詢自己在該時(shí)段中的歷史軌跡. 系統(tǒng)也集成了社交互動(dòng)功能, 用戶可以添加好友, 在與好友互相開放位置之后可以查看彼此的實(shí)時(shí)位置與軌跡,同時(shí)用戶還可以建立群組, 同時(shí)查看多個(gè)群成員的軌跡情況.
4.1 總體設(shè)計(jì)
根據(jù)分析定位系統(tǒng)的業(yè)務(wù)需求與系統(tǒng)功能需求,將本系統(tǒng)的主要功能模塊設(shè)計(jì)如圖2所示.
圖2 系統(tǒng)功能模塊圖
本系統(tǒng)由移動(dòng)客戶端與后臺(tái)服務(wù)器端兩部分構(gòu)成.移動(dòng)客戶端在Android系統(tǒng)平臺(tái)上開發(fā), 使用Android studio作為開發(fā)工具. 客戶端與服務(wù)器端采用C/S結(jié)構(gòu)來進(jìn)行交互, 本系統(tǒng)采用Apache作為Web服務(wù)器, 選擇SqlServer作為數(shù)據(jù)庫管理系統(tǒng).
本系統(tǒng)的移動(dòng)客戶端負(fù)責(zé)接收用戶的請(qǐng)求和顯示結(jié)果, 直接與用戶進(jìn)行交互. Web服務(wù)器負(fù)責(zé)接收客戶端的請(qǐng)求, 通過SQL語句等方式調(diào)用數(shù)據(jù)庫服務(wù)器,然后將數(shù)據(jù)處理的結(jié)果返回給Web服務(wù)器, 再由Web服務(wù)器傳送回客戶端.
本文主要討論基于LBS功能的實(shí)現(xiàn), 因此系統(tǒng)中如添加好友、新建群等輔助功能則不再贅述.
4.2 功能實(shí)現(xiàn)
4.2.1 客戶端與服務(wù)器端的通信
本應(yīng)用采用Volley框架來處理客戶端與服務(wù)器端的通信. 盡管Android SDK中提供了HttpClient 和HttpUrlConnection兩種方式用來處理網(wǎng)絡(luò)操作, 但當(dāng)應(yīng)用比較復(fù)雜的時(shí)候就需要我們編寫大量的代碼處理很多東西, 如圖像緩存, 請(qǐng)求的調(diào)度等等. 而Volley框架抽象了底層Http Client等實(shí)現(xiàn)的細(xì)節(jié), 使Android應(yīng)用網(wǎng)絡(luò)操作更方便更快捷, 并且Volley在不同的線程上異步執(zhí)行所有請(qǐng)求而避免了阻塞主線程[6].
Volley的用法如下:
RequestQueue mQueue = Volley. newrequest Queue (context); //獲取請(qǐng)求列對(duì)象
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);
}
}); //傳入三個(gè)參數(shù), 分別是服務(wù)器地址, 服務(wù)器響應(yīng)成功回調(diào), 服務(wù)器響應(yīng)失敗的回調(diào)
mQueue.add(stringRequest);
4.2.2 登錄注冊(cè)模塊的實(shí)現(xiàn)
用戶使用Android客戶端時(shí)首先看到的是登錄頁面. 已經(jīng)注冊(cè)了的用戶可以直接進(jìn)行登錄, 沒有注冊(cè)過的用戶需要先進(jìn)行注冊(cè), 然后再登錄進(jìn)入本系統(tǒng).該模塊的內(nèi)部流程如圖3所示.
圖3 客戶端登錄注冊(cè)流程圖
其中部分關(guān)鍵代碼如下:
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 定位模塊的實(shí)現(xiàn)
在本系統(tǒng)用戶可以在本機(jī)頁面點(diǎn)擊“開啟實(shí)時(shí)位置”實(shí)現(xiàn)自我的實(shí)時(shí)定位. 該部分的界面主要是一個(gè)MapView, 界面的底端有放大地圖與縮小地圖的按鈕,用戶也可以通過手勢(shì)拖動(dòng)或放大縮小地圖. 本模塊功能實(shí)現(xiàn)流程如圖4所示.
圖4 定位模塊流程圖
其中部分關(guān)鍵代碼如下:
public void start() {
//新建百度地圖定位客戶端類;
mLocationClient = new LocationClient(ct);
mMyBDLocationListener = new MyBDLocationListener();
/ /注冊(cè)監(jiān)聽器;
mLocationClient.registerLocationListener(mMyBDLocat ionListener);
//創(chuàng)建定位選項(xiàng);
LocationClientOption option = new Location ClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy );//設(shè)置定位模式, 高精度, 低功耗, 僅設(shè)備
option.setCoorType("gcj02");//返回國(guó)測(cè)局經(jīng)緯度坐標(biāo)系: gcj02
option.setScanSpan(1000 * locate_time);//設(shè)置發(fā)起定位請(qǐng)求的間隔
option.setIsNeedAddress(true);//設(shè)置是否需要地址信息
option.setOpenGps(true);//設(shè)置是否使用gps
mLocationClient.setLocOption(option);
mLocationClient.start();
}
功能運(yùn)行結(jié)果如圖5所示.
圖5 定位功能的實(shí)現(xiàn)
4.2.4 軌跡查詢模塊的實(shí)現(xiàn)
軌跡查詢分為查詢自己的歷史軌跡與查詢好友的歷史軌跡. 用戶查詢自己的歷史軌跡時(shí), 首先設(shè)定要查找的時(shí)間段, 即軌跡的開始時(shí)間與結(jié)束時(shí)間, 時(shí)間段的設(shè)置通過datePicker與timePicker兩個(gè)類組成的時(shí)間選擇器來實(shí)現(xiàn), 然后通過SQL語句查詢保存在本機(jī)SQLite數(shù)據(jù)庫中的數(shù)據(jù), 查詢到的這些數(shù)據(jù)就是這段時(shí)間里所定位到的位置點(diǎn)points, 最后通過如下代碼將數(shù)據(jù)繪制成軌跡顯示在界面上.
OverlayOptions mopolyline = new PolylinOptins().width(10).color(0xAAFF0000).points(points);
mBaiduMap.addOverlay(mopolyline);
查詢本機(jī)歷史軌跡的開發(fā)流程如圖6所示.
圖6 本機(jī)歷史軌跡查詢模塊
若用戶要查詢好友的歷史軌跡, 則在用戶設(shè)定查找時(shí)間段發(fā)起請(qǐng)求后, 系統(tǒng)將好友的用戶ID, 查詢的起始時(shí)間通過封裝成Map鍵值對(duì)發(fā)送到服務(wù)器端, 服務(wù)器再根據(jù)這些信息在SqlServer數(shù)據(jù)庫中進(jìn)行位置數(shù)據(jù)查找, 之后將結(jié)果返回給客戶端. 這部分的關(guān)鍵代碼如下:
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();
查詢好友歷史軌跡的開發(fā)流程如圖7所示.功能運(yùn)行結(jié)果如圖8所示.
圖7 好友歷史軌跡查詢模塊
圖8 軌跡查詢功能實(shí)現(xiàn)
本文旨在實(shí)現(xiàn)一個(gè)基于位置服務(wù)的移動(dòng)GIS. 針對(duì)當(dāng)前的移動(dòng)GIS應(yīng)用缺乏社交與互動(dòng)性的缺陷, 設(shè)計(jì)并實(shí)現(xiàn)了實(shí)時(shí)定位
首先對(duì)Android系統(tǒng)架構(gòu)與移動(dòng)GIS體系結(jié)構(gòu)做了簡(jiǎn)要探討, 在此基礎(chǔ)上研發(fā)了一套基于Android平臺(tái)的移動(dòng)GIS應(yīng)用系統(tǒng), 實(shí)現(xiàn)了實(shí)時(shí)定位、軌跡記錄、歷史軌跡查詢、好友之間的位置分享及多人軌跡同時(shí)查看等功能, 極大地提高了移動(dòng)GIS的互動(dòng)性與社交性, 可以對(duì)特定人員進(jìn)行追蹤, 能夠滿足朋友、親人、同事之間的位置需求.
位置服務(wù)與移動(dòng)GIS的密切結(jié)合開拓了一個(gè)廣闊的市場(chǎng), 這一市場(chǎng)蘊(yùn)含著巨大的商機(jī), 無限的潛能, 相信隨著移動(dòng)用戶的逐步增多, 這一市場(chǎng)將更加壯大, 本系統(tǒng)的設(shè)計(jì)可以為基于位置服務(wù)的移動(dòng)GIS系統(tǒng)提供參考.
1 肖航宇.移動(dòng)地理信息系統(tǒng)應(yīng)用研究[碩士學(xué)位論文].武漢:武漢理工大學(xué),2010.
2 Jiang B, Yao X. Location-based services and GIS in perspective. Computers, Environment and Urban Systems, 2006, 30(6): 712–725.
3 姚昱旻,劉衛(wèi)國(guó).Android 的架構(gòu)與應(yīng)用開發(fā)研究.計(jì)算機(jī)系統(tǒng)應(yīng)用,2008,17(11):110–112,24.
4 許穎,魏峰遠(yuǎn).移動(dòng) GIS 關(guān)鍵技術(shù)及開發(fā)模式探討.測(cè)繪與空間地理信息,2008,31(4):45–47.
5 陳飛翔,楊崇俊,申勝利,等.基于LBS的移動(dòng)GIS研究.計(jì)算機(jī)工程與應(yīng)用,2006,42(2):200–202.
6 孟遠(yuǎn).Android網(wǎng)絡(luò)通信框架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
貴州省農(nóng)業(yè)資源與環(huán)境信息化服務(wù)平臺(tái)關(guān)鍵技術(shù)的研究與建設(shè)(黔科合NY[2013]3078號(hào))
2016-07-18;收到修改稿時(shí)間:2016-08-18
10.15888/j.cnki.csa.005672