《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于Android系統(tǒng)的避難場(chǎng)所查詢軟件開發(fā)
基于Android系統(tǒng)的避難場(chǎng)所查詢軟件開發(fā)
來源:電子技術(shù)應(yīng)用2014年第3期
趙士達(dá), 張 楠, 楊 爽
(天津市地震局, 天津300201)
摘要: 介紹了一種基于Android操作系統(tǒng)的應(yīng)急避難場(chǎng)所查詢軟件,。應(yīng)急避難場(chǎng)所的位置信息存儲(chǔ)在百度云端,軟件通過云檢索獲得相應(yīng)的信息,。軟件將檢索到的信息以列表和地圖的形式展現(xiàn)出來,,并提供條件篩選、周邊檢索和定位等功能,。通過Android SDK模擬器仿真和手機(jī)終端測(cè)試,,驗(yàn)證了該軟件的各項(xiàng)功能全部達(dá)到預(yù)期目標(biāo),。
中圖分類號(hào): TP393
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)03-0133-04
Development of emergency shelters query software based on Android
Zhao Shida, Zhang Nan, Yang Shuang
Tianjin Seismological Bureau, Tianjin 300201, China
Abstract: Introducing a query software that based on Android. The location information of emergency shelter was stored in Baidu Cloud. The software get the information by Cloud research. The researched information was displayed in list form a map form. The software has screening, periphery searching, positioning function. The software has passed the test and each function has achieved the expected target.
Key words : Android; emergency shelter; Cloud storage; Cloud search; Baidu map API; Baidu positioning

    近年來,全球地震災(zāi)害多發(fā),,給人類造成巨大損失,。應(yīng)急避難場(chǎng)所是應(yīng)對(duì)突發(fā)公共事件的一項(xiàng)災(zāi)民安置措施,是現(xiàn)代化大城市用于民眾躲避地震,、火災(zāi),、爆炸、洪水,、疫情等重大突發(fā)公共事件的安全避難場(chǎng)所[1]。應(yīng)急避難場(chǎng)所具有應(yīng)急避難指揮中心,、獨(dú)立供電系統(tǒng),、應(yīng)急直升機(jī)停機(jī)坪、應(yīng)急消防措施,、應(yīng)急避難疏散區(qū),、應(yīng)急供水等11種應(yīng)急避險(xiǎn)功能,形成了一個(gè)集通信,、電力,、物流、人流,、信息流等為一體的完整網(wǎng)絡(luò),。
    隨著移動(dòng)通信技術(shù)的快速發(fā)展和Android智能終端的迅速普及,人們對(duì)信息的獲取有了更高的要求[2],。開發(fā)一款基于Android系統(tǒng)的應(yīng)急避難場(chǎng)所的軟件顯得非常必要,。Android系統(tǒng)是谷歌公司推出的一套智能開源手機(jī)平臺(tái),由操作系統(tǒng),、中間件,、用戶友好界面和應(yīng)用軟件組成[3]。
 應(yīng)急避難場(chǎng)所查詢涉及到每個(gè)避難場(chǎng)所的位置信息,,而百度LBS云服務(wù)可以解決這一問題,。LBS云是百度地圖針對(duì)LBS開發(fā)者推出的平臺(tái)級(jí)服務(wù),結(jié)合已有的地圖API和SDK服務(wù),,通過開放服務(wù)端存儲(chǔ)和計(jì)算能力,,提供海量位置數(shù)據(jù)存儲(chǔ)、檢索及展示一體化解決方案[4],。
    本文針對(duì)Android系統(tǒng),使用百度地圖Android SDK,、定位API和LBS云服務(wù)開發(fā)了一款可以篩選、定位,、地圖顯示和周邊檢索的應(yīng)急避難場(chǎng)所查詢軟件,。
1 總體設(shè)計(jì)方案
1.1 Android開發(fā)介紹

    Android是以Linux為核心的開放源碼操作系統(tǒng),,可以運(yùn)行在手機(jī)、平板電腦,、GPS,、播發(fā)器等各種手持終端上[5-6]。
    Android主流的開發(fā)環(huán)境是Java,,開發(fā)平臺(tái)是Eclipse(一種基于Java的開源,、可擴(kuò)展平臺(tái))。Eclipse安裝安卓開發(fā)工具ADT(Android Development Tools)后即可直接使用Android的軟件開發(fā)工具包SDK(Software Development Kit),。同時(shí)SDK還提供可視化的模擬器,,以及Dalvik虛擬機(jī)調(diào)試監(jiān)控服務(wù)(DDMS)工具,用于實(shí)時(shí)查看軟件運(yùn)行情況及本件管理,、截屏等操作[7-8],。本文的軟件就在以上基礎(chǔ)上開發(fā)調(diào)試,并最終在手機(jī)終端上通過測(cè)試。
1.2 百度地圖Android SDK簡(jiǎn)介
    百度地圖Android SDK是一套基于Android 2.1(v1.3.5及以前版本支持Android 1.5以上系統(tǒng))及以上版本設(shè)備的應(yīng)用程序接口,,可適用于Android系統(tǒng)移動(dòng)設(shè)備的地圖應(yīng)用,。通過調(diào)用地圖SDK接口,可以輕松訪問百度地圖服務(wù)和數(shù)據(jù),,構(gòu)建功能豐富,、交互性強(qiáng)的地圖類應(yīng)用程序。
1.3 百度定位 SDK簡(jiǎn)介
    LBS(Location Based Service)是互聯(lián)網(wǎng)時(shí)代的熱點(diǎn),,在本地搜索,、定向廣告、社交網(wǎng)絡(luò)等眾多領(lǐng)域得到了廣泛應(yīng)用,。其核心基礎(chǔ)就是定位能力,,為各類應(yīng)用提供位置信息。百度移動(dòng)定位API是一個(gè)提供基礎(chǔ)定位API的第三方平臺(tái),,為各類應(yīng)用提供定位能力,,提升用戶體驗(yàn)。目前百度定位SDK支持Android平臺(tái)的免費(fèi)使用,。
1.4 百度LBS云簡(jiǎn)介
    LBS云是百度地圖針對(duì)LBS開發(fā)者推出的平臺(tái)級(jí)服務(wù),,結(jié)合已有的地圖API和SDK服務(wù),通過開放服務(wù)端存儲(chǔ)和計(jì)算能力,,提供海量位置數(shù)據(jù)存儲(chǔ),、檢索、展示一體化解決方案,。LBS云包括云存儲(chǔ)云檢索兩個(gè)部分,。
    LBS云有三個(gè)基本概念,分別是位置數(shù)據(jù)表(geotable)、自定義擴(kuò)展列(column)和位置數(shù)據(jù)(poi)。位置數(shù)據(jù)表是百度LBS云提供給開發(fā)者自定義存儲(chǔ)位置數(shù)據(jù)的集合,,類似于常見數(shù)據(jù)庫的一個(gè)表,,不僅支持點(diǎn)線面結(jié)構(gòu)還支持用戶自定義結(jié)構(gòu)。自定義擴(kuò)展列是開發(fā)者在創(chuàng)建的位置數(shù)據(jù)表基礎(chǔ)上根據(jù)自己的應(yīng)用場(chǎng)景自定義擴(kuò)展的列,,類似于常見數(shù)據(jù)表的一個(gè)列,。位置數(shù)據(jù)即為開發(fā)者在定義好屬性和擴(kuò)展列的位置數(shù)據(jù)表中帶有位置屬性的業(yè)務(wù)數(shù)據(jù)記錄,類似于常見數(shù)據(jù)表下的一條記錄。
1.5 避難場(chǎng)所查詢軟件設(shè)計(jì)方案
    首先需要將所有的避難場(chǎng)所位置及相關(guān)信息存儲(chǔ)到百度LBS云中,,軟件查詢避難場(chǎng)所的過程其實(shí)就是對(duì)已存儲(chǔ)信息的云端進(jìn)行檢索的過程,。云檢索必須在有網(wǎng)絡(luò)的條件下進(jìn)行,所以當(dāng)沒有無線網(wǎng)絡(luò)時(shí)需要打開手機(jī)自身的移動(dòng)網(wǎng)絡(luò),。如圖1所示,,當(dāng)檢測(cè)到可用網(wǎng)絡(luò)后要?jiǎng)澐志W(wǎng)絡(luò)類型,因?yàn)椴煌W(wǎng)絡(luò)的接口設(shè)置不同,。通過百度定位API對(duì)終端用戶當(dāng)前所在位置進(jìn)行定位,。通過云檢索將云端的避難場(chǎng)所信息調(diào)出并計(jì)算避難場(chǎng)所與當(dāng)前位置的距離。軟件有兩種工作模式:一種是篩選模式,,另一種是附近模式,。在篩選模式下可以按照行政區(qū),、避難場(chǎng)所分類和關(guān)鍵字檢索對(duì)避難場(chǎng)所進(jìn)行查找;在附近模式可以按照距離查找當(dāng)前位置周邊的避難場(chǎng)所,。

2 軟件設(shè)計(jì)
    系統(tǒng)分為2個(gè)數(shù)據(jù)包(package),一個(gè)是com.bd.lbs.yj用來完成軟件的主體功能;另一個(gè)是com,bd.lbs.api用來完成百度定位,、云檢索和百度地圖顯示等功能,。這2個(gè)數(shù)據(jù)包共包括了7個(gè)程序模塊,如圖2所示,。

2.1 ContentModel模塊設(shè)計(jì)
    ContentModel類用來定義列表內(nèi)容,,包括避難場(chǎng)所的名稱、地址,、類型,、避難場(chǎng)所與當(dāng)前設(shè)備的距離、圖片外連接地址,、專題頁地址,、經(jīng)度和緯度。此外該類還定義了獲取這些信息的成員函數(shù),。
2.2 LBSListActivity模塊設(shè)計(jì)
    LBSListActivity類繼承了ListActivity類并實(shí)現(xiàn)了對(duì)OnScrollListener的接口,。實(shí)現(xiàn)了列表顯示,同時(shí)還監(jiān)控焦點(diǎn)是否為列表最后一行,。本文的列表頁為單頁10條列表,,當(dāng)頁面翻滾到最后一行時(shí)點(diǎn)擊“讀取更多”按鈕,即可再打開10條列表。
    要在列表底部添加“讀取更多”按鈕并顯示讀取的進(jìn)度就要在重寫父類Activity時(shí)添加“讀取更多(loadMoreView)”按鈕和進(jìn)度條(progressBar)的layout設(shè)置,。
    本設(shè)計(jì)需要在列表中顯示每個(gè)避難場(chǎng)所的照片,,這些照片被保存在網(wǎng)絡(luò)相冊(cè)中,系統(tǒng)解析網(wǎng)絡(luò)照片地址并將照片轉(zhuǎn)換為Bit圖片顯示,。這個(gè)過程通過getBitmapFromUrl函數(shù)來完成,。該函數(shù)首先建立與網(wǎng)絡(luò)相冊(cè)的連接,接收來自相冊(cè)的數(shù)據(jù)流并將全部數(shù)據(jù)流保存在緩存中,,最后將緩存中的數(shù)據(jù)重新編碼成比特圖片,。
2.3 DApplication模塊設(shè)計(jì)
    Android中的Application類是為了需要保存全局變量而設(shè)計(jì)的基本類,該類在package創(chuàng)建時(shí)就存在。程序中的DApplication類是從Application類繼承下來的,,用于保存本設(shè)計(jì)的全局變量,。
    本設(shè)計(jì)中的百度地圖SDK使用ak驗(yàn)證和網(wǎng)絡(luò)類型的劃分也是在DApplication類中完成的。網(wǎng)絡(luò)類型主要分為中國(guó)移動(dòng)CMWAP,、中國(guó)聯(lián)通UNIWAP,、中國(guó)電信CTWAP和3G網(wǎng)絡(luò)3GWAP。
2.4 MainActivity模塊設(shè)計(jì)
    MainActivity類主要完成可用網(wǎng)絡(luò)的檢測(cè),、篩選/附近模式的切換,地圖/列表模式的切換和篩選按鈕功能的實(shí)現(xiàn),。
    篩選/附近模式的切換通過ToggleButton按鈕實(shí)現(xiàn),地圖/列表模式的切換通過getTabHost函數(shù)來完成,各種篩選條件通過設(shè)置Spinner控件來完成。
2.5 LBSLocation模塊設(shè)計(jì)
 LBSLocation類主要完成終端的定位功能,。編寫這個(gè)類需要用到百度定位API,,所以在該文件前添加如下程序來導(dǎo)入百度程序包:
    import com.baidu.location.BDLocation;
    import com.baidu.location.BDLocationListener;
    import com.baidu.location.LocationClient;
    import com.baidu.location.LocationClientOption;
    首先要在啟動(dòng)定位函數(shù)中配置定位信息,將定位經(jīng)緯度設(shè)置為百度經(jīng)緯度。然后編寫定位監(jiān)聽函數(shù)并實(shí)現(xiàn)對(duì)百度定位監(jiān)聽函數(shù)的接口,。在定位監(jiān)聽函數(shù)中實(shí)現(xiàn)定位并計(jì)算當(dāng)前位置與每個(gè)避難場(chǎng)所的距離,。
2.6 LBSCloudSearch模塊設(shè)計(jì)
    LBSCloudSearch類通過http post方式訪問百度云,利用百度云檢索API查找百度云存儲(chǔ)數(shù)據(jù),,返回JSON數(shù)據(jù)供移動(dòng)應(yīng)用顯示,。
    云檢索前需要做好兩項(xiàng)準(zhǔn)備工作:(1)根據(jù)劃分的網(wǎng)絡(luò)類型進(jìn)行網(wǎng)絡(luò)接口配置; (2)設(shè)置百度云的databox及對(duì)應(yīng)ak的校驗(yàn),。
2.7 LBSMapActivity模塊設(shè)計(jì)
     LBSMapActivity類主要用于實(shí)現(xiàn)百度地圖的顯示功能,。編寫這個(gè)類需要用到百度定位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è)置地圖中心坐標(biāo),、地圖縮放參數(shù)和地圖控制控件等,。使用addAllMarker()和removeAllMarker()兩個(gè)函數(shù),實(shí)現(xiàn)在地圖中添加避難場(chǎng)所位置麻點(diǎn)和刪除這些麻點(diǎn)。
    在LBSMapActivity類中定義了MyGeneralListener和OverlayIcon兩個(gè)類,分別用于監(jiān)控網(wǎng)絡(luò)和定義麻點(diǎn)樣式,。
3 軟件測(cè)試
3.1 云存儲(chǔ)

 


   百度云存儲(chǔ)接口支持單個(gè)geotable億級(jí)數(shù)據(jù)及數(shù)百GB大小的存儲(chǔ),,每天支持百萬量級(jí)讀寫,每秒支持萬量級(jí)讀寫,,完全滿足本設(shè)計(jì)的需求,。在進(jìn)行軟件測(cè)試前,通過批量上傳的方式將應(yīng)急避難場(chǎng)所的信息存到百度云端。除了百度云自帶的字段外還需要自定義擴(kuò)展字段image、type和shelterurl,。其中image為string類型,,用來存儲(chǔ)展示在終端的避難場(chǎng)所圖片地址;type為double類型,,用來區(qū)分避難場(chǎng)所類型,;shelterurl為string類型,用來存儲(chǔ)避難場(chǎng)所專輯頁面地址,。
3.2 手機(jī)測(cè)試
    軟件通過Android SDK模擬器仿真后進(jìn)入到手機(jī)實(shí)物測(cè)試,,本次測(cè)試所用的手機(jī)為華為G520。手機(jī)測(cè)試步驟為:
    (1)檢測(cè)在無網(wǎng)絡(luò)情況下程序是否退出,;
    (2)在無線WiFi網(wǎng)絡(luò)下,,打開程序在列表模式下瀏覽避難場(chǎng)所列表,檢查列表中的避難場(chǎng)所能否與百度云端存儲(chǔ)的數(shù)據(jù)對(duì)應(yīng),;
    (3)檢查列表中的內(nèi)容和圖片是否與設(shè)計(jì)一致,,列表中的定位以及距離計(jì)算是否準(zhǔn)確;
    (4)按照行政區(qū)和避難場(chǎng)所分類逐一進(jìn)行篩選測(cè)試,,檢測(cè)篩選是否有誤,;
    (5)切換到周邊模式進(jìn)行周邊檢索,檢查周邊檢索是否準(zhǔn)確,;
    (6)將列表模式切換到地圖模式,,檢查地圖上麻點(diǎn)能否與列表對(duì)應(yīng);
    (7)將WiFi網(wǎng)絡(luò)換成GSM網(wǎng)絡(luò),,重復(fù)步驟(2)~步驟(6)進(jìn)行檢測(cè),。
   經(jīng)過上述測(cè)試,,應(yīng)急避難場(chǎng)所查詢軟件所有功能工作正常,,達(dá)到了預(yù)期目標(biāo)。圖3,、圖4為篩選模式和附近模式下列表/地圖的測(cè)試照片,。

    本文設(shè)計(jì)了一個(gè)基于Android操作系統(tǒng)的應(yīng)急避難場(chǎng)所查詢方案,實(shí)現(xiàn)了對(duì)應(yīng)急避難場(chǎng)所的查詢,、篩選和地圖展示等功能,。本設(shè)計(jì)的創(chuàng)新點(diǎn)是使用了百度LBS云技術(shù),將避難場(chǎng)所的位置信息存儲(chǔ)到百度云端,,并通過云檢索獲取信息,。與傳統(tǒng)方式相比省去了架設(shè)服務(wù)器保存信息和維護(hù)信息的開銷。同時(shí)使用百度地圖API和定位API,,將定位所得到的百度經(jīng)緯度和避難場(chǎng)所的經(jīng)緯度顯示在百度地圖上,。手機(jī)測(cè)試結(jié)果表明,本設(shè)計(jì)完成了預(yù)期的全部功能。
參考文獻(xiàn)
[1] 趙士達(dá),張楠,楊爽. 地震時(shí)人口疏散模型研究[J]. 軟件導(dǎo)刊,2013(5):6-8.
[2] 馬志強(qiáng).基于Android平臺(tái)即時(shí)通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京交通大學(xué), 2009.
[3] 李寧. Android應(yīng)用開發(fā)實(shí)戰(zhàn)[M].北京:機(jī)械工業(yè)出版社, 2012.
[4] 豆瑞星.百度成立LBS事業(yè)部[J].互聯(lián)網(wǎng)周刊, 2012,11(21):56-57.
[5] 鄭云卿,黃琦.基于Android平臺(tái)的軟件自動(dòng)化監(jiān)控工具的設(shè)計(jì)開發(fā)[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(2):235-238.
[6] 彭璇,,吳肖. Google Map API在網(wǎng)絡(luò)地圖服務(wù)中的應(yīng)用[J].  測(cè)繪信息與工程,,2010,35(1):25-27.
[7] BURNETTE E. Hello, Android: introducing google’s mobile development platform[M]. American Pragmatic Bookshelf,  2009.
[8] 江燕良.基于Android智能終端的遠(yuǎn)程控制系統(tǒng)[J].電子技術(shù)應(yīng)用,2012,38(8):129-132.

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。