《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于Android系統(tǒng)的避難場所查詢軟件開發(fā)
基于Android系統(tǒng)的避難場所查詢軟件開發(fā)
來源:電子技術應用2014年第3期
趙士達, 張 楠, 楊 爽
(天津市地震局, 天津300201)
摘要: 介紹了一種基于Android操作系統(tǒng)的應急避難場所查詢軟件。應急避難場所的位置信息存儲在百度云端,軟件通過云檢索獲得相應的信息。軟件將檢索到的信息以列表和地圖的形式展現(xiàn)出來,并提供條件篩選、周邊檢索和定位等功能。通過Android SDK模擬器仿真和手機終端測試,驗證了該軟件的各項功能全部達到預期目標。
中圖分類號: TP393
文獻標識碼: A
文章編號: 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

    近年來,全球地震災害多發(fā),給人類造成巨大損失。應急避難場所是應對突發(fā)公共事件的一項災民安置措施,是現(xiàn)代化大城市用于民眾躲避地震、火災、爆炸、洪水、疫情等重大突發(fā)公共事件的安全避難場所[1]。應急避難場所具有應急避難指揮中心、獨立供電系統(tǒng)、應急直升機停機坪、應急消防措施、應急避難疏散區(qū)、應急供水等11種應急避險功能,形成了一個集通信、電力、物流、人流、信息流等為一體的完整網(wǎng)絡。
    隨著移動通信技術的快速發(fā)展和Android智能終端的迅速普及,人們對信息的獲取有了更高的要求[2]。開發(fā)一款基于Android系統(tǒng)的應急避難場所的軟件顯得非常必要。Android系統(tǒng)是谷歌公司推出的一套智能開源手機平臺,由操作系統(tǒng)、中間件、用戶友好界面和應用軟件組成[3]。
 應急避難場所查詢涉及到每個避難場所的位置信息,而百度LBS云服務可以解決這一問題。LBS云是百度地圖針對LBS開發(fā)者推出的平臺級服務,結(jié)合已有的地圖API和SDK服務,通過開放服務端存儲和計算能力,提供海量位置數(shù)據(jù)存儲、檢索及展示一體化解決方案[4]。
    本文針對Android系統(tǒng),使用百度地圖Android SDK、定位API和LBS云服務開發(fā)了一款可以篩選、定位、地圖顯示和周邊檢索的應急避難場所查詢軟件。
1 總體設計方案
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)控服務(DDMS)工具,用于實時查看軟件運行情況及本件管理、截屏等操作[7-8]。本文的軟件就在以上基礎上開發(fā)調(diào)試,并最終在手機終端上通過測試。
1.2 百度地圖Android SDK簡介
    百度地圖Android SDK是一套基于Android 2.1(v1.3.5及以前版本支持Android 1.5以上系統(tǒng))及以上版本設備的應用程序接口,可適用于Android系統(tǒng)移動設備的地圖應用。通過調(diào)用地圖SDK接口,可以輕松訪問百度地圖服務和數(shù)據(jù),構(gòu)建功能豐富、交互性強的地圖類應用程序。
1.3 百度定位 SDK簡介
    LBS(Location Based Service)是互聯(lián)網(wǎng)時代的熱點,在本地搜索、定向廣告、社交網(wǎng)絡等眾多領域得到了廣泛應用。其核心基礎就是定位能力,為各類應用提供位置信息。百度移動定位API是一個提供基礎定位API的第三方平臺,為各類應用提供定位能力,提升用戶體驗。目前百度定位SDK支持Android平臺的免費使用。
1.4 百度LBS云簡介
    LBS云是百度地圖針對LBS開發(fā)者推出的平臺級服務,結(jié)合已有的地圖API和SDK服務,通過開放服務端存儲和計算能力,提供海量位置數(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ù)表基礎上根據(jù)自己的應用場景自定義擴展的列,類似于常見數(shù)據(jù)表的一個列。位置數(shù)據(jù)即為開發(fā)者在定義好屬性和擴展列的位置數(shù)據(jù)表中帶有位置屬性的業(yè)務數(shù)據(jù)記錄,類似于常見數(shù)據(jù)表下的一條記錄。
1.5 避難場所查詢軟件設計方案
    首先需要將所有的避難場所位置及相關信息存儲到百度LBS云中,軟件查詢避難場所的過程其實就是對已存儲信息的云端進行檢索的過程。云檢索必須在有網(wǎng)絡的條件下進行,所以當沒有無線網(wǎng)絡時需要打開手機自身的移動網(wǎng)絡。如圖1所示,當檢測到可用網(wǎng)絡后要劃分網(wǎng)絡類型,因為不同網(wǎng)絡的接口設置不同。通過百度定位API對終端用戶當前所在位置進行定位。通過云檢索將云端的避難場所信息調(diào)出并計算避難場所與當前位置的距離。軟件有兩種工作模式:一種是篩選模式,另一種是附近模式。在篩選模式下可以按照行政區(qū)、避難場所分類和關鍵字檢索對避難場所進行查找;在附近模式可以按照距離查找當前位置周邊的避難場所。

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

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

 


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

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

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