王靜怡,羅治國
(1.西安理工大學 工程訓練中心,陜西 西安710054;2.陜西省地震局臺網中心,陜西 西安710068)
3G的普及、無線網絡的發展及智能手機的價格持續走低為手機上網奠定了較好的使用基礎,促進網民對各類手機應用程序的使用,尤其為網絡接入、終端獲取受限的人群提供接入互聯網的可能。截至2013年12月,我國手機網民規模達5億。而手機地圖將成為生活信息服務的重要入口,截止到2012年12月,中國手機地圖在手機網民中的滲透率達 35.4%[1]。
怎樣利用3G手機的優勢,充分利用手機地圖快速、直觀地顯示震情要素,更好地為防震減災服務,成為了科技工作者需要關注的問題。
為提高SMS短信及手機地圖的綜合應用,實現了基于Baidu Maps的地圖可視化的Android手機震情顯示系統,從SMS短信中獲取信息并在Baidu Maps中顯示出來,實現了震情信息的顯示和地圖方式的切換等。
Android是一種以Linux為基礎的開放源代碼操作系統,主要用于便攜設備。Android操作系統最初由Andy Rubin開發,最初主要支持手機。2005年由Google收購注資,并組建開放手機聯盟開發改良,逐漸擴展到平板電腦及其他領域上。
Android軟件棧由圖1中所示的元素組成。Android提供了常用軟件都會使用到的框架:用于控制活動的生命周期的活動管理器(Activity Manager)、用于為活動構建用戶界面的視圖(View)、提供一種一致的和非打斷性的機制來通知用戶的通知管理器 (Notification Manager)、應用程序共享數據的內容提供器(Content Providers)和支持非代碼資源的具體化的資源管理器(Resource Manager)等。這些是所有Android應用程序的架構基礎[2]。
Android通過SQLite為每一個應用程序提供了一個輕量級的關系數據庫。應用程序可以利用這個托管的關系數據庫引擎來安全高效地存儲數據。
百度地圖移動版API是一套基于移動互聯網設備的應用程序接口,支持iOS/Android平臺。通過該接口,可以輕松訪問百度服務和數據,構建功能豐富、交互性強的地圖應用程序。該API支持GPS、A-GPS和WiFi定位,定位速度快于谷歌地圖。

圖1 Android軟件棧
系統結構如圖2所示,分為后臺服務及前端顯示兩部分。后臺服務用于分析由陜西地震臺網中心通過移動MAS機或者短信貓池發送的包含震情信息的SMS短信,獲得震中位置(經緯度及震中地名)、發震時刻、震級等相關震情要素。借助移動網絡(GPRS、3G、WiFi等)或者Baidu離線地圖,將獲得的震中位置在Baidu Maps的MapView中顯示出來,并實現拖動、縮放地圖及衛星地圖切換顯示等。衛星地圖可顯示震中位置及其周邊地形環境,可對震情對人群的影響、災害可能產生的大小有一個預評估。
Android平臺有著嚴格的安全機制,位置服務、手機地圖服務等操作需在AndroidManifest.xml文件中申明相關的權限。GPS要獲取ACCESS_FINE_LOCATION等權限,百度地圖需 ACCESS_NETWORK_STATE、WRITE_EXTERNAL_STORAGE等權限,收到短信啟用相關服務需要設置RECEIVE_SMS等權限[3]。

圖2 系統結構
在Android中,Intent作為一個系統級的消息傳遞機制,可在進程間發送結構化消息,后臺監聽程序可通過實現BroadcastReceiver來監聽和響應應用系統內的這些Broadcast Intent[2]。
當提取參數成功后,以ContentValues的方式將參數信息寫入SQLite數據庫,同時彈出提示框,提示收到新的地震信息。圖3為接收到一條地震消息。

圖3 接收到一條地震消息

圖4 系統主窗口
系統主窗口如圖4所示。當打開系統主界面時,使用ContentProvider從SQLite數據庫中讀取已存入的震情信息,以ListView的形式顯示出來。該Activity通過實現Comparator接口的方式對已讀取的震情信息列表按發震時刻或者震級大小排序。
震中的定位使用經度和緯度來確定,在Android中的GeoPoint類代表了一個地點的經緯度,函數格式為:GeoPoint(int latitude×1E6,int longitude×1E6),E6 是緯度,即度數乘以106。
地震圖用以在地圖MapView上顯示多數地震。該圖層使用getDrawable方法按震級大小獲取系統事先定義的代表不同震級的大小和顏色各異的icon,傳遞給擴展了的ItemizedOverlay這個覆蓋物的抽象基類,實現不同震級、不同圖標及震級大小標注顯示等。圖5為圖層顯示多數震情信息。

圖5 圖層顯示多數震情信息
地震詳情模塊通過Intent的方式獲取一條震情的要素,并通過Overlay這個覆蓋物的抽象基類,在圖層上顯示該條震情信息,同時MyLocationOverlay覆蓋物圖層通過網絡或者GPS定位的方式獲取當前位置用以計算震中距,如圖6所示。
計算震中距的方法如下,lat1、lng1代表震中的經緯度值,lat2、lng2為獲取的當前位置的經緯度值:


圖6 衛星視圖顯示震情詳情

針對現有的震情發送主要通過SMS短信的特點,通過截取震情信息短信內容在Baidu Maps上的顯示并集中管理,較好地解決了過去陜西臺網震中圖靠彩信發送、手機接收容易出錯、震中圖顯示像素有限而無法縮放、耗費手機流量等不足。結合Baidu離線地圖(緩存地圖),在使用少量流量的情況下可以獲得更加詳細的衛星視圖,內容更加豐富。該接收系統可較好地應用在應急救援及災害初評等方面的防震減災服務上。
[1]CNNIC.第33次中國互聯網絡發展狀況統計報告[R].2014:18,78.
[2]Reto Meier.Android 4高級編程(第 3版)[M].北京:清華大學出版社,2012.
[3]劉安戰,賈曉輝.基于Android的私密短信系統設計與實現[J].微型機與應用,2012,31(17):51-56.