張意中++游彬++閆偉
摘 要:文中設計并實現(xiàn)了一款基于Android平臺和移動GIS系統(tǒng)的校園應用。利用Android百度地圖SDK,對現(xiàn)在LBS軟件不提供小區(qū)域范圍內(nèi)位置服務的缺陷進行分析,結(jié)合校園內(nèi)位置信息和Android平臺技術實現(xiàn)了包括校園POI(Point of Interest)信息查詢、基于校園位置的信息服務、校園POI要素顯示控制、校園內(nèi)部熱點間的步行路線規(guī)劃等多種應用功能。重點分析了基于百度地圖Android SDK的移動GIS開發(fā)的關鍵技術,如移動空間定位、百度地圖和服務器數(shù)據(jù)庫的管理等。
關鍵詞:Android平臺;移動GIS技術;百度地圖SDK ;LBS服務
中圖分類號:TP333 文獻標識碼:A 文章編號:2095-1302(2015)11-00-04
0 引 言
地理信息系統(tǒng)(GIS)是依賴計算機軟硬件對地球空間中的地理位置及其屬性信息數(shù)據(jù)獲取、存儲、處理、檢索訪問和描述的管理系統(tǒng)[1]。隨著無線通信和嵌入式軟硬件等前沿科技的發(fā)展,移動智能設備獲得了很大的進步。目前,在諸多移動操作系統(tǒng)中占主流地位的是三大操作系統(tǒng),分別為IOS、Android、Windows Phone,這些操作系統(tǒng)均支持Mobile GIS應用程序的開發(fā)。Mobile GIS應用服務已經(jīng)滲透到了各行各業(yè),凡是人能到達或者活動的地方,比如航空航天、地面、地表、地下等都是Mobile GIS研究的領域。當前4G網(wǎng)絡的數(shù)據(jù)下載速率達到了100 Mb/s,上傳速率也有20 Mb/s[2],新型移動終端設備的軟件系統(tǒng)和硬件系統(tǒng)具有更高的網(wǎng)絡訪問能力,這讓移動應用可以直接接入互聯(lián)網(wǎng)。并讓Mobile GIS系統(tǒng)的LBS應用搬到智能終端上成為了現(xiàn)實。目前,許多公司、組織或者個人開發(fā)了各種Mobile GIS應用,如美國麻省理工學院的校園系統(tǒng)MIT Mobile、俄勒岡大學開發(fā)的數(shù)字校園系統(tǒng)等。這些系統(tǒng)的熱點只能手動輸入關鍵字查詢,搜索方式單一,而且沒有添加校園熱點間的路線規(guī)劃導航功能。
本文在Android操作系統(tǒng)和百度地圖API的基礎上,根據(jù)學校大眾對位置服務的要求,結(jié)合Mobile GIS服務設計杭州電子科技大學智能校園系統(tǒng),進一步拓展了Mobile GIS的應用范圍。本系統(tǒng)的設計與實現(xiàn)研究方法也可以移植到智慧小區(qū)等類似系統(tǒng)。此系統(tǒng)總體包括Mobile GIS客戶端、服務器端與無線通信網(wǎng)絡三部分,采用C/S(客戶端/服務器端)架構(gòu),Mobile GIS客戶端通過無線網(wǎng)絡與遠端服務器通信[3,4]。
1 系統(tǒng)構(gòu)架設計
杭州電子科技大學高教園校區(qū)現(xiàn)有教學區(qū)、生活區(qū)(本科)、生活區(qū)G區(qū)(研究生公寓)。整個校區(qū)面積廣闊,多達1 200畝,校園內(nèi)的建筑物、院系、辦事機構(gòu)等很多,一般分布較散,本校師生都難以準確尋找,校園的新生和外來人員更加難以分辨、找到自己感興趣或者需要的地方,也給他們參加各項活動帶來了諸多不便。根據(jù)校園學生學習和生活需求,設計出如下功能:
(1)熱點搜索:標注出有關你輸入關鍵字的所有地點,點擊標注,彈出這個標注點的詳情。
(2)路線規(guī)劃:在杭州市內(nèi),輸入你的起點和終點,根據(jù)交通工具會提供三種想要的路線規(guī)劃。分別為駕車路線,公交路線和步行路線。
(3)公交查詢:輸入杭州市內(nèi)的公交號,可以查到此公交路線上所有的公交站臺。
(4)室外定位:顯示當前所在的位置。
(5)杭電校園:點擊會出現(xiàn)杭州電子科技大學的校園全景圖。
(6)校園路線規(guī)劃:在校園內(nèi)輸入起點、終點,會給出一個規(guī)劃步行路線圖。
(7)生活區(qū)域:杭電本科生生活區(qū)的生活要素搜索和周邊定位功能。
(8)研究生公寓:研究生生活區(qū)的生活要素搜索周邊定位功能。
系統(tǒng)功能構(gòu)架如圖1所示。
2 功能的設計和實現(xiàn)
2.1 基礎地圖模塊
LBS是當前流行的POI模式:位置信息點服務。其核心就是將線下的資源結(jié)合地理位置信息整合并發(fā)布到線上,為人們的生活提供服務[5]?;A地圖功能模塊顧名思義就是可以實現(xiàn)地圖最基本的功能:
(1)熱點搜索:用poi Search activity實現(xiàn)OnGetPoiSearchResultListener接口監(jiān)聽,獲得搜索數(shù)據(jù),而且會把數(shù)據(jù)顯示在地圖上。以搜索高沙為例,如圖2所示。
(2)公交路線查詢:當我們坐上公交車后不知道離目的地有幾站路,可以將OnGetBusLineSearchResultListener接口在Bus Search activity中實現(xiàn)。把從接口OnGetBusLineSearchResultListener中得到的數(shù)據(jù)以BusLineOverlay形式覆蓋到Map view中。以搜索8路公交車為例,如圖3所示。
(3)路線規(guī)劃:路線規(guī)劃功能提供三種路線參考:自駕路線,公交路線和步行路線。具體是實現(xiàn)OnGetRoutePlanResultListener接口,并從中獲得規(guī)劃的結(jié)果。文澤路到西湖景區(qū)公交查詢路線規(guī)劃結(jié)果如圖4所示。
(4) 定位功能:如圖4所示的定位功能調(diào)用GPS設備對當前位置定位,在程序上通過實現(xiàn) PoiSearch.newInstance(),并設置OnGetPoiSearchResultListener監(jiān)聽,開啟定位服務向百度定位服務器發(fā)送請求獲得用戶所在的位置信息,此時用戶可以清晰地看到自己在哪兒,如圖5所示。
圖1 系統(tǒng)應用的框架圖
圖2 搜索杭州高沙的結(jié)果 圖3 8路公交查詢結(jié)果
2.2 智能校園
智能校園是本GIS應用設計的主要功能。主要分為杭電全景圖、校內(nèi)路線規(guī)劃、校園熱點搜索、本科生活區(qū)服務和研究生生活區(qū)服務等內(nèi)容。提供的小區(qū)域范圍內(nèi)LBS服務,是現(xiàn)在地圖軟件所達不到的效果。此功能模塊首先由一個list view來顯示功能列表,點擊相應的功能列表選項,會跳轉(zhuǎn)到相應的activity中去。并響應想要的功能。
圖4 路線規(guī)劃結(jié)果 圖5 定位結(jié)果
2.2.1 杭電校園和校園路線規(guī)劃
杭電校園此功能是顯示杭州電子科技大學的全景圖,分為衛(wèi)星地圖和普通地圖兩種,如圖6所示。當學校里的老師、學生或者外來人員在校園某處卻想去校園里的其它地點,而兩地間的距離較近時,可以選擇步行到達目的地[6]。校園步行路線規(guī)劃在實現(xiàn)時,過程主要分為兩步:一是輸入框加載內(nèi)容的實現(xiàn):采用AutoCompleteTextView這個自動補全控件。此控件通過setAdapter(sugAdapter)語句,把AutoCompleteTextView提示內(nèi)容和已經(jīng)設計好的sugAdapter適配器相結(jié)合。當用戶輸入一個字時,AutoCompleteTextView會掃描sugAdapter適配器的內(nèi)容,并把得到的相關內(nèi)容以listview的形式顯示出來供用戶選擇。二是獲取輸入的關鍵字之間的路線圖:這里用到步行規(guī)劃監(jiān)聽,并從onGetWalkingRouteResult接口中得到結(jié)果。以杭電體育館到杭電電子信息學院為例,如圖7所示。圖8所示為校園路線規(guī)劃搜索邏輯圖。
圖6 校園全景圖 圖7 校內(nèi)路線規(guī)劃結(jié)果
2.2.2 校園熱點搜索
杭州電子科技大學校園內(nèi)的建筑物、學院、辦事行政機構(gòu)、體育場所等POI繁多,不同的地點有各自相關的位置信息,通過訪問服務器或者應用本地數(shù)據(jù)獲得這些信息。
圖8 路線規(guī)劃邏輯圖
利用語句String string = keyWorldsView.getText ().toString()獲得輸入的熱點名關鍵字,從數(shù)據(jù)庫中獲得此關鍵字的經(jīng)緯度。得到的經(jīng)緯度坐標保存在變量latlng中,用此經(jīng)緯度坐標再進行標注操作。校園POI查詢功能在輸入熱點關鍵字時有兩種方式,分別是列表視圖加載校園POI選擇輸入和搜索欄模糊查詢輸入。用戶輸入興趣點關鍵字或者關鍵字首字,結(jié)果將顯示在列表視圖上,選擇對應興趣點名稱,完成搜索任務,POI的具體位置以地圖標注的形式顯示,點擊標注彈出的氣泡視圖呈現(xiàn)POI的基本位置信息。查詢操作流程如圖9所示。
圖9 查詢操作流程圖
此熱點以搜索電子信息學院為例,圖10所示為列表選中方式,圖11所示為模糊搜索匹配輸入。
2.2.3 本科生活區(qū)
本科生活區(qū)功能是針對學生在本科生活區(qū)和附近的服務,此功能模塊提供了學生生活區(qū)宿舍樓,ATM機,學生食堂,后勤部等服務點的查詢與定位。單獨用一個activity顯示生活要素列表。并設置點擊事件,當用戶點擊“生活區(qū)要素”時會調(diào)用語句:
Intent intent =new Intent(Dormitory.this,LifeKEY.class);
startActivityForResult(intent, 0);
圖10 列表選中方式圖 圖11 模糊搜索匹配輸入
跳轉(zhuǎn)到生活區(qū)要素的列表,列表是用可展開列表組件ExpandableList實現(xiàn)。在列表中設置點擊列表項事件監(jiān)聽。當選中想要的要素,會把熱點的名字傳回原來的Activity中,利用此點擊的內(nèi)容,把想要的要素以標注的形式添加到地圖上。同時也提供以生活區(qū)為中心的周邊搜索功能,點擊“生活區(qū)周邊”按鈕,會調(diào)用一個LinearLayout布局,用來顯示輸入窗口。根據(jù)提示用戶輸入搜索半徑,接著興趣點的名稱,點擊“搜索”會調(diào)回一個button監(jiān)聽事件,響應 mPoiSearch.searchNearby方法,得到想要的周邊結(jié)果。圖12為搜索生活區(qū)3幢宿舍樓顯示圖,圖13為在周邊搜索生活區(qū)附近1 000米的肯德基頁面顯示圖。
圖12 搜索生活區(qū)3幢 圖13 在周邊搜索生活區(qū)附近
宿舍樓顯示圖 1 000米的肯德基頁面顯示圖
2.2.4 研究生公寓
此功能模塊是針對研究生提供的服務,杭電研究生宿舍離教學區(qū)比較遠,所以單獨為一個功能,此模塊功能包括兩個方面:一是研究生公寓內(nèi)的宿舍樓,食堂的查詢。二是宿舍樓周邊搜索。由于研究生公寓要素不是很多,再此用Spinner控件顯示要素列表。而且給每個列表項添加監(jiān)聽事件,具體代碼如下:
mySpinner.setOnItemSelectedListener{
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
}
}
當我們點擊Spinner控件中的要素時,會從數(shù)據(jù)庫中獲得相應的經(jīng)緯度坐標。此功能的界面與本科生活區(qū)類似。應用結(jié)果如圖14、15所示。圖14為研究生宿舍33幢界面顯示圖,圖15為搜索研究生1 000米內(nèi)的建設銀行界面顯示圖。
圖14 搜索研究生宿舍33幢樓 圖15 搜索研究生宿舍
1 000米內(nèi)的建設銀行
2.2.5 SQLite數(shù)據(jù)庫
SQLite是輕量級的數(shù)據(jù)庫,專門用于手機,Pad等存儲資源有限的設備上。此應用中建立了一個擁有熱點名稱、熱點經(jīng)度和熱點緯度等字段的數(shù)據(jù)庫,具體程序如下:
public void onCreate(SQLiteDatabase arg0) {
arg0.execSQL(“CREATE TABLE IF NOT EXISTS db_position (positionId TEXT PRIMARY KEY NOT NULL ,”+ “positionName TEXT,longitude double,latitude double)”);
與此同時建立Position類來存取相應的位置坐標。在Position類中設置三個屬性:positionName,longitude ,latitude。此類用于存放位置點信息。Position類的對象用來存儲生活區(qū)宿舍樓。部分代碼如下:
Position position16=new Position(UUID.randomUUID().toString(),”電子科技大學生活區(qū)3棟”,120.349265,30.322314);
Position position17=new Position(UUID.randomUUID().toString(),”電子科技大學生活區(qū)4棟”,120.348613,30.322275);
Position position18=new Position(UUID.randomUUID().toString(),”電子科技大學生活區(qū)5棟”,120.350141,30.322719);
Position position19=new Position(UUID.randomUUID().toString(),”電子科技大學生活區(qū)6棟”,120.34939,30.322692);
Position position20=new Position(UUID.randomUUID().toString(),”電子科技大學生活區(qū)7棟”,120.348474,30.323031);
Position position21=new Position(UUID.randomUUID().toString(),”電子科技大學生活區(qū)10棟”,120.350141,30.323756);
Position position22=new Position(UUID.randomUUID().toString(),”電子科技大學生活區(qū)11棟”,120.349377,30.323733);
Position position23=new Position(UUID.randomUUID().toString(),”電子科技大學生活區(qū)12棟”,120.348636,30.323709);
Position position24=new Position(UUID.randomUUID().toString(),”電子科技大學生活區(qū)22棟”,120.34785,30.323709);
Position position25=new Position(UUID.randomUUID().toString(),”電子科技大學生活區(qū)27棟”,120.351834,30.322376);
Position position26=new Position(UUID.randomUUID().toString(),”電子科技大學生活區(qū)28棟”,120.351793,30.322782);
通過數(shù)據(jù)庫操作語句execSQL,把已經(jīng)存好的position點加入到數(shù)據(jù)庫中,具體程序如下:
dbWriterDatabase.execSQL(“INSERT INTO db_position (positionId,positionName,longitude,
latitude) values (?,?,?,?)”, New Object[]{position.getPositionId(),position.getPositionName(),
position.getLongitude(),position.getLatitude()});
System.out.println(“數(shù)據(jù)已寫入”);
數(shù)據(jù)庫建立成功,并且每個熱點的信息加入數(shù)據(jù)庫后,就可以用queryDbPosition方法根據(jù)熱點名稱取得相應的經(jīng)緯度。queryDbPosition方法的具體代碼如下:
public LatLng queryDbPosition(String positionName ){
LatLng latLng=null;
try {
Cursor cursor= dbWriterDatabase.rawQuery(“select * from db_position where positionName=? “, new String[]{positionName});
if (cursor.moveToNext()) {
String PositionIdString=cursor.getString(0);
System.out.println(“PositionIdString”+ PositionIdString);
double longitude=cursor.getDouble(2);
System.out.println(“l(fā)ongitude”+longitude);
double latitude=cursor.getDouble(3);
System.out.println(“l(fā)atitude”+latitude);
latLng=new LatLng(latitude, longitude);
}
cursor.close();
} catch (Exception e) {
}
return latLng;
}
3 結(jié) 語
為了解決百度地圖在小區(qū)域內(nèi)不能提供有針對性的服務的問題,通過對Android 系統(tǒng)中的定位技術和方法進行研究,對Baidu Map進行了二次開發(fā),設計并實現(xiàn)了一個校園LBS 系統(tǒng)。測試結(jié)果表明,該系統(tǒng)的各個功能模塊能夠滿足校園學生對LBS 的基本要求,但仍需要在以下幾個方面進行研究:
(1)可以添加杭電官方微博到應用中去;
(2)定時發(fā)布學校的講座信息和校園新聞;
(3) 擴展使用WiFi 的定位方式,在校園內(nèi)部使用無線定位將會更受歡迎;
(4)完善周邊好友查詢功能,要使系統(tǒng)能夠查看周邊好友位置和移動軌跡,這樣就會根據(jù)好友的位置來與身邊的好友聯(lián)系,教師也可以利用該項功能查看學生的出勤情況和興趣場所。
參考文獻
[1] Kang-tsung Chang .地理信息系統(tǒng)導論(第七版)[M].陳健飛,連蓮,譯.北京:電子工業(yè)出版社,2014:3-4.
[2] 張克平.LTE/LTE-Advanced—B3G/4G/B4G移動通信系統(tǒng)無線技術[M].北京:電子工業(yè)出版社,2013:28-30.
[3] 王崇倡,蘇存英.基于移動GIS的公共設施巡查系統(tǒng)的設計與實現(xiàn)[J].測繪科學,2011,36(6):88-90.
[4] 陳曉軍,劉春,裴洪雨.基于移動GIS的數(shù)字城管數(shù)據(jù)采集系統(tǒng)架構(gòu)與實現(xiàn)[J].鐵道勘察,2009(4):62-66.
[5] 趙江玲.基于手機的位置服務研究與應用[D].成都:電子科技大學,2010:45-50.
[6] Li Fang, Li Xialei, Bian Fuling.A Framework for Autonomous LBS in Wireless Pervasive Computing Environments[J]. Proceedings of the 9th International Conference on Advanced Communication Technology,2007(3):1715-1720.