文獻標識碼: A
文章編號: 0258-7998(2014)03-0133-04
近年來,全球地震災(zāi)害多發(fā),給人類造成巨大損失。應(yīng)急避難場所是應(yīng)對突發(fā)公共事件的一項災(zāi)民安置措施,是現(xiàn)代化大城市用于民眾躲避地震、火災(zāi)、爆炸、洪水、疫情等重大突發(fā)公共事件的安全避難場所[1]。應(yīng)急避難場所具有應(yīng)急避難指揮中心、獨立供電系統(tǒng)、應(yīng)急直升機停機坪、應(yīng)急消防措施、應(yīng)急避難疏散區(qū)、應(yīng)急供水等11種應(yīng)急避險功能,形成了一個集通信、電力、物流、人流、信息流等為一體的完整網(wǎng)絡(luò)。
隨著移動通信技術(shù)的快速發(fā)展和Android智能終端的迅速普及,人們對信息的獲取有了更高的要求[2]。開發(fā)一款基于Android系統(tǒng)的應(yīng)急避難場所的軟件顯得非常必要。Android系統(tǒng)是谷歌公司推出的一套智能開源手機平臺,由操作系統(tǒng)、中間件、用戶友好界面和應(yīng)用軟件組成[3]。
應(yīng)急避難場所查詢涉及到每個避難場所的位置信息,而百度LBS云服務(wù)可以解決這一問題。LBS云是百度地圖針對LBS開發(fā)者推出的平臺級服務(wù),結(jié)合已有的地圖API和SDK服務(wù),通過開放服務(wù)端存儲和計算能力,提供海量位置數(shù)據(jù)存儲、檢索及展示一體化解決方案[4]。
本文針對Android系統(tǒng),使用百度地圖Android SDK、定位API和LBS云服務(wù)開發(fā)了一款可以篩選、定位、地圖顯示和周邊檢索的應(yīng)急避難場所查詢軟件。
1 總體設(shè)計方案
1.1 Android開發(fā)介紹
Android是以Linux為核心的開放源碼操作系統(tǒng),可以運行在手機、平板電腦、GPS、播發(fā)器等各種手持終端上[5-6]。
Android主流的開發(fā)環(huán)境是Java,開發(fā)平臺是Eclipse(一種基于Java的開源、可擴展平臺)。Eclipse安裝安卓開發(fā)工具ADT(Android Development Tools)后即可直接使用Android的軟件開發(fā)工具包SDK(Software Development Kit)。同時SDK還提供可視化的模擬器,以及Dalvik虛擬機調(diào)試監(jiān)控服務(wù)(DDMS)工具,用于實時查看軟件運行情況及本件管理、截屏等操作[7-8]。本文的軟件就在以上基礎(chǔ)上開發(fā)調(diào)試,并最終在手機終端上通過測試。
1.2 百度地圖Android SDK簡介
百度地圖Android SDK是一套基于Android 2.1(v1.3.5及以前版本支持Android 1.5以上系統(tǒng))及以上版本設(shè)備的應(yīng)用程序接口,可適用于Android系統(tǒng)移動設(shè)備的地圖應(yīng)用。通過調(diào)用地圖SDK接口,可以輕松訪問百度地圖服務(wù)和數(shù)據(jù),構(gòu)建功能豐富、交互性強的地圖類應(yīng)用程序。
1.3 百度定位 SDK簡介
LBS(Location Based Service)是互聯(lián)網(wǎng)時代的熱點,在本地搜索、定向廣告、社交網(wǎng)絡(luò)等眾多領(lǐng)域得到了廣泛應(yīng)用。其核心基礎(chǔ)就是定位能力,為各類應(yīng)用提供位置信息。百度移動定位API是一個提供基礎(chǔ)定位API的第三方平臺,為各類應(yīng)用提供定位能力,提升用戶體驗。目前百度定位SDK支持Android平臺的免費使用。
1.4 百度LBS云簡介
LBS云是百度地圖針對LBS開發(fā)者推出的平臺級服務(wù),結(jié)合已有的地圖API和SDK服務(wù),通過開放服務(wù)端存儲和計算能力,提供海量位置數(shù)據(jù)存儲、檢索、展示一體化解決方案。LBS云包括云存儲和云檢索兩個部分。
LBS云有三個基本概念,分別是位置數(shù)據(jù)表(geotable)、自定義擴展列(column)和位置數(shù)據(jù)(poi)。位置數(shù)據(jù)表是百度LBS云提供給開發(fā)者自定義存儲位置數(shù)據(jù)的集合,類似于常見數(shù)據(jù)庫的一個表,不僅支持點線面結(jié)構(gòu)還支持用戶自定義結(jié)構(gòu)。自定義擴展列是開發(fā)者在創(chuàng)建的位置數(shù)據(jù)表基礎(chǔ)上根據(jù)自己的應(yīng)用場景自定義擴展的列,類似于常見數(shù)據(jù)表的一個列。位置數(shù)據(jù)即為開發(fā)者在定義好屬性和擴展列的位置數(shù)據(jù)表中帶有位置屬性的業(yè)務(wù)數(shù)據(jù)記錄,類似于常見數(shù)據(jù)表下的一條記錄。
1.5 避難場所查詢軟件設(shè)計方案
首先需要將所有的避難場所位置及相關(guān)信息存儲到百度LBS云中,軟件查詢避難場所的過程其實就是對已存儲信息的云端進行檢索的過程。云檢索必須在有網(wǎng)絡(luò)的條件下進行,所以當(dāng)沒有無線網(wǎng)絡(luò)時需要打開手機自身的移動網(wǎng)絡(luò)。如圖1所示,當(dāng)檢測到可用網(wǎng)絡(luò)后要劃分網(wǎng)絡(luò)類型,因為不同網(wǎng)絡(luò)的接口設(shè)置不同。通過百度定位API對終端用戶當(dāng)前所在位置進行定位。通過云檢索將云端的避難場所信息調(diào)出并計算避難場所與當(dāng)前位置的距離。軟件有兩種工作模式:一種是篩選模式,另一種是附近模式。在篩選模式下可以按照行政區(qū)、避難場所分類和關(guān)鍵字檢索對避難場所進行查找;在附近模式可以按照距離查找當(dāng)前位置周邊的避難場所。
2 軟件設(shè)計
系統(tǒng)分為2個數(shù)據(jù)包(package),一個是com.bd.lbs.yj用來完成軟件的主體功能;另一個是com,bd.lbs.api用來完成百度定位、云檢索和百度地圖顯示等功能。這2個數(shù)據(jù)包共包括了7個程序模塊,如圖2所示。
2.1 ContentModel模塊設(shè)計
ContentModel類用來定義列表內(nèi)容,包括避難場所的名稱、地址、類型、避難場所與當(dāng)前設(shè)備的距離、圖片外連接地址、專題頁地址、經(jīng)度和緯度。此外該類還定義了獲取這些信息的成員函數(shù)。
2.2 LBSListActivity模塊設(shè)計
LBSListActivity類繼承了ListActivity類并實現(xiàn)了對OnScrollListener的接口。實現(xiàn)了列表顯示,同時還監(jiān)控焦點是否為列表最后一行。本文的列表頁為單頁10條列表,當(dāng)頁面翻滾到最后一行時點擊“讀取更多”按鈕,即可再打開10條列表。
要在列表底部添加“讀取更多”按鈕并顯示讀取的進度就要在重寫父類Activity時添加“讀取更多(loadMoreView)”按鈕和進度條(progressBar)的layout設(shè)置。
本設(shè)計需要在列表中顯示每個避難場所的照片,這些照片被保存在網(wǎng)絡(luò)相冊中,系統(tǒng)解析網(wǎng)絡(luò)照片地址并將照片轉(zhuǎn)換為Bit圖片顯示。這個過程通過getBitmapFromUrl函數(shù)來完成。該函數(shù)首先建立與網(wǎng)絡(luò)相冊的連接,接收來自相冊的數(shù)據(jù)流并將全部數(shù)據(jù)流保存在緩存中,最后將緩存中的數(shù)據(jù)重新編碼成比特圖片。
2.3 DApplication模塊設(shè)計
Android中的Application類是為了需要保存全局變量而設(shè)計的基本類,該類在package創(chuàng)建時就存在。程序中的DApplication類是從Application類繼承下來的,用于保存本設(shè)計的全局變量。
本設(shè)計中的百度地圖SDK使用ak驗證和網(wǎng)絡(luò)類型的劃分也是在DApplication類中完成的。網(wǎng)絡(luò)類型主要分為中國移動CMWAP、中國聯(lián)通UNIWAP、中國電信CTWAP和3G網(wǎng)絡(luò)3GWAP。
2.4 MainActivity模塊設(shè)計
MainActivity類主要完成可用網(wǎng)絡(luò)的檢測、篩選/附近模式的切換,地圖/列表模式的切換和篩選按鈕功能的實現(xiàn)。
篩選/附近模式的切換通過ToggleButton按鈕實現(xiàn),地圖/列表模式的切換通過getTabHost函數(shù)來完成,各種篩選條件通過設(shè)置Spinner控件來完成。
2.5 LBSLocation模塊設(shè)計
LBSLocation類主要完成終端的定位功能。編寫這個類需要用到百度定位API,所以在該文件前添加如下程序來導(dǎo)入百度程序包:
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
首先要在啟動定位函數(shù)中配置定位信息,將定位經(jīng)緯度設(shè)置為百度經(jīng)緯度。然后編寫定位監(jiān)聽函數(shù)并實現(xiàn)對百度定位監(jiān)聽函數(shù)的接口。在定位監(jiān)聽函數(shù)中實現(xiàn)定位并計算當(dāng)前位置與每個避難場所的距離。
2.6 LBSCloudSearch模塊設(shè)計
LBSCloudSearch類通過http post方式訪問百度云,利用百度云檢索API查找百度云存儲數(shù)據(jù),返回JSON數(shù)據(jù)供移動應(yīng)用顯示。
云檢索前需要做好兩項準備工作:(1)根據(jù)劃分的網(wǎng)絡(luò)類型進行網(wǎng)絡(luò)接口配置; (2)設(shè)置百度云的databox及對應(yīng)ak的校驗。
2.7 LBSMapActivity模塊設(shè)計
LBSMapActivity類主要用于實現(xiàn)百度地圖的顯示功能。編寫這個類需要用到百度定位API,所以在該文件前添加以下程序來導(dǎo)入百度程序包:
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.ItemizedOverlay;
import com.baidu.mapapi.map.LocationData;
import com.baidu.mapapi.map.MKEvent;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationOverlay;
import com.baidu.mapapi.map.OverlayItem;
import com.baidu.mapapi.map.PopupClickListener;
import com.baidu.mapapi.map.PopupOverlay;
程序中使用initMapView()函數(shù)來完成初始化地圖,包括設(shè)置地圖中心坐標、地圖縮放參數(shù)和地圖控制控件等。使用addAllMarker()和removeAllMarker()兩個函數(shù),實現(xiàn)在地圖中添加避難場所位置麻點和刪除這些麻點。
在LBSMapActivity類中定義了MyGeneralListener和OverlayIcon兩個類,分別用于監(jiān)控網(wǎng)絡(luò)和定義麻點樣式。
3 軟件測試
3.1 云存儲
百度云存儲接口支持單個geotable億級數(shù)據(jù)及數(shù)百GB大小的存儲,每天支持百萬量級讀寫,每秒支持萬量級讀寫,完全滿足本設(shè)計的需求。在進行軟件測試前,通過批量上傳的方式將應(yīng)急避難場所的信息存到百度云端。除了百度云自帶的字段外還需要自定義擴展字段image、type和shelterurl。其中image為string類型,用來存儲展示在終端的避難場所圖片地址;type為double類型,用來區(qū)分避難場所類型;shelterurl為string類型,用來存儲避難場所專輯頁面地址。
3.2 手機測試
軟件通過Android SDK模擬器仿真后進入到手機實物測試,本次測試所用的手機為華為G520。手機測試步驟為:
(1)檢測在無網(wǎng)絡(luò)情況下程序是否退出;
(2)在無線WiFi網(wǎng)絡(luò)下,打開程序在列表模式下瀏覽避難場所列表,檢查列表中的避難場所能否與百度云端存儲的數(shù)據(jù)對應(yīng);
(3)檢查列表中的內(nèi)容和圖片是否與設(shè)計一致,列表中的定位以及距離計算是否準確;
(4)按照行政區(qū)和避難場所分類逐一進行篩選測試,檢測篩選是否有誤;
(5)切換到周邊模式進行周邊檢索,檢查周邊檢索是否準確;
(6)將列表模式切換到地圖模式,檢查地圖上麻點能否與列表對應(yīng);
(7)將WiFi網(wǎng)絡(luò)換成GSM網(wǎng)絡(luò),重復(fù)步驟(2)~步驟(6)進行檢測。
經(jīng)過上述測試,應(yīng)急避難場所查詢軟件所有功能工作正常,達到了預(yù)期目標。圖3、圖4為篩選模式和附近模式下列表/地圖的測試照片。
本文設(shè)計了一個基于Android操作系統(tǒng)的應(yīng)急避難場所查詢方案,實現(xiàn)了對應(yīng)急避難場所的查詢、篩選和地圖展示等功能。本設(shè)計的創(chuàng)新點是使用了百度LBS云技術(shù),將避難場所的位置信息存儲到百度云端,并通過云檢索獲取信息。與傳統(tǒng)方式相比省去了架設(shè)服務(wù)器保存信息和維護信息的開銷。同時使用百度地圖API和定位API,將定位所得到的百度經(jīng)緯度和避難場所的經(jīng)緯度顯示在百度地圖上。手機測試結(jié)果表明,本設(shè)計完成了預(yù)期的全部功能。
參考文獻
[1] 趙士達,張楠,楊爽. 地震時人口疏散模型研究[J]. 軟件導(dǎo)刊,2013(5):6-8.
[2] 馬志強.基于Android平臺即時通信系統(tǒng)的設(shè)計與實現(xiàn)[D].北京:北京交通大學(xué), 2009.
[3] 李寧. Android應(yīng)用開發(fā)實戰(zhàn)[M].北京:機械工業(yè)出版社, 2012.
[4] 豆瑞星.百度成立LBS事業(yè)部[J].互聯(lián)網(wǎng)周刊, 2012,11(21):56-57.
[5] 鄭云卿,黃琦.基于Android平臺的軟件自動化監(jiān)控工具的設(shè)計開發(fā)[J].計算機應(yīng)用與軟件,2013,30(2):235-238.
[6] 彭璇,吳肖. Google Map API在網(wǎng)絡(luò)地圖服務(wù)中的應(yīng)用[J]. 測繪信息與工程,2010,35(1):25-27.
[7] BURNETTE E. Hello, Android: introducing google’s mobile development platform[M]. American Pragmatic Bookshelf, 2009.
[8] 江燕良.基于Android智能終端的遠程控制系統(tǒng)[J].電子技術(shù)應(yīng)用,2012,38(8):129-132.