陳根深,劉軍旗,何 憶,黃 挺,張志庭,劉 剛
1(中國地質大學(武漢)教育部長江三峽庫區地質災害研究中心,武漢 470074)
2(中國地質大學(武漢)計算機學院,武漢 430074)
3(中國地質大學(武漢)智能地學信息處理湖北省重點實驗室,武漢 430074)
野外地質數據采集作為地理信息系統中重要的部分,是開展地質研究的基礎,其質量直接影響解釋結果與客觀實際的接近程度[1-6].野外地質數據具有類型繁多、信息量龐大、內容復雜、以描述性信息為主、受人為因素以及其他因素的影響等特點,傳統的野外地質數據采集工作是使用野簿記錄,地質人員將采集到紙質數據帶回去并對其進行數字化成為電子文件或將其存入數據庫中,通過紙質數據與原圖進行比較來檢查.具有記錄內容隨意、格式不規范以及使用不方便等缺點,數字化過程繁瑣也會降低數據采集的質量和準確性,容易存在數據質量問題,難以滿足地學定量化和地礦信息化的要求[7,8].傳統的掌機具有輕便與省點的優點,但其內存小,一般只有32 M,處理圖形能力差,只適合記錄文字信息,無法滿足記錄大量的地層、構造以及礦產等屬性信息以及遙感影像、素描與數碼照片等數碼信息的實際工作需求[9,10].智能化的數據采集系統主要是基于掌上電腦(PDA)的野外采集系統,通過將PDA 集成在某種儀器設備上,用戶可以通過設備原裝軟件進行數據處理,從而將GPS 與GIS 系統結合,實現地質數據采集數字化,但其價格高昂,功能受硬件約束較大,在全面性與易用性上存在不足.
隨著移動通信網絡的快速發展和移動電子設備的快速升級,移動設備的普及性得到極大提高,尤其是近幾年井噴式的發展,基于Android 平臺的智能設備因具有用戶數量大、應用場景多、開發成本低、攜帶與充電方便等優勢,得到了廣泛的應用.
本文基于開源的Android 平臺,集成World Wind 地圖技術、網絡通信技術、多線程技術和數據存儲技術,針對野外地質采集工作中存在的步驟繁瑣、效率低、工作周期長等問題,研發了一種基于World Wind 移動端的地質數據野外采集系統,充分利用移動互聯網的普遍性與便捷性,實現野外地質工作的信息化采集、瀏覽和展示,為地質研究工作人員提供便捷的數據錄入方式,提高野外地質數據采集的工作效率.
地質數據野外采集系統主要針對的用戶群體為從事地質勘查數據采集的研究工作人員,考慮到用戶群體的特殊性,需要對系統進行性能、可靠性、可擴展性等需求進行分析.Android 系統已經較為完善,但由于國內基于World Wind 移動端開發的例子很少,依據實際業務需求,在系統設計與實現中需要解決以下3 個難點:(1)系統健壯性與可擴展性.考慮到移動智能設備的迅速升級和地質工作信息化的進一步推進,系統需要隨著業務的更新與設備的升級進一步優化,不僅要求能夠靈活修改已有的功能模塊,還要求能夠方便添加新的功能模塊.(2)基于北斗/GPS 和移動網絡的綜合定位策略.GPS 定位精度高,但是獲取定位的時間較長,同時對所處地形和所在區域的衛星數量有一定要求;移動網絡的定位精度較低,但是獲取定位的時間較短.(3)基于World Wind 移動GIS 圖形編輯、導航及投影研究.
通過分析,針對以上問題分別提出的解決方案如下:(1)系統需要較大的冗余空間,充分采用模塊設計模式,為將來的功能擴展和系統升級優化做好鋪墊.(2)建立北斗/GPS 與移動網絡結合的綜合定位策略,在定位過程中,當無法通過GPS 定位時,通過移動網絡獲取定位,當獲取到GPS 定位后,用GPS 定位替換移動網絡定位.在此基礎上,基于移動GIS 的可視化采集用戶接口,實現結構化與非結構化的原始數據在矢量化地質底圖的實時定位錄入.(3)World Wind 移動端開發包括基于空間庫的地質底圖數據組織與配置,基于移動端World Wind 控件的開發,以及圖層管理、自定義圖形、地圖標注、屬性查詢、空間查詢及空間量算與空間分析[11].
整個系統分為用戶界面層、邏輯功能層和數據訪問層,如圖1所示.用戶界面層為用戶提供友好的圖形交互界面,包括界面顯示、地圖加載顯示和數據對話框展示等;邏輯功能層是針對某種特定的業務需求提供完整的邏輯功能,包括移動設備的觸屏基本操作、數據編輯、數據上傳和數據更新等[12];數據訪問層用于對數據進行訪問、管理及標準化.通過響應用戶的請求,形成相應的檢索語句,對用戶所采集的數據進行數據庫增刪改查等管理操作.
地質數據野外采集系統旨在輔助地質研究工作人員在野外便捷、精確地采集各種地質勘查數據,因此在采用模塊化設計模式的基礎上,系統主要分為GPS/北斗定位模塊、地球三維展示模塊、可視化數據錄入模塊、數據導出模塊、可視化數據編輯模塊、移動GIS 地質實體投影模塊和移動GIS 地質實體導航模塊,總體功能結構如圖2所示.
2.3.1 定位模塊
定位模塊通過北斗/GPS 衛星導航系統結合移動基站進行目標地的定位與位置信息獲取,利用GIS 地圖對所在的位置進行實時顯示并與用戶實時交互.主要分為網絡定位和衛星定位.網絡定位時通過集成百度底圖進行定位,衛星定位是通過北斗或者GPS 芯片進行定位.衛星定位利用北斗衛星導航系統進行目標的定位與位置信息獲取,北斗衛星導航系統是由空間段、地面段和用戶段三部分組成.其可在全球范圍內全天候、全天時為各類用戶提供高精度、高可靠性定位、導航和授時服務,并具有短報文通信能力,已經初步具備區域導航、定位和授時能力,定位精度10 米,測速精度02 米/秒,授時精度10 納秒[13,14].北斗模塊的定位原理:首先移動設備發送信號到衛星,接著衛星轉發到總控站進行解算,然后總控站把解算結果轉發給衛星.最后,衛星將結果傳回到客戶端.延遲相對較高,但是定位精度相對較高.百度地圖定位時通過百度地圖得到定位信息,利用GIS 地圖所在位置進行實時顯示,其中調用GIS 地圖服務必須先獲取其Map API Key.在野外工作中,網絡定位受信號、設備等因素的影響,精度一般在10-20 米左右,GPS 定位也會受到云層、地形等因素的影響導致定位誤差;因此,建立北斗/GPS 與移動網絡結合的綜合定位策略,在定位過程中,當無法通過GPS 定位時,通過移動網絡獲取定位,當獲取到GPS 定位后,用GPS 定位替換移動網絡定位.在此基礎上,基于移動GIS 的可視化采集用戶接口,實現結構化與非結構化的原始數據在矢量化地質底圖的實時定位錄入.

圖1 系統體系架構

圖2 系統功能結構圖
2.3.2 數據操作模塊
對地質數據進行錄入和保存,同時基于定位模塊實現可視化的數據錄入和數據編輯,該模塊根據業務需求分為六個子模塊:巖體、土體、水體、構造、資源和災害,如圖3所示.巖體數據錄入主要記錄野外巖體調查點的巖體綜合信息,包括地理位置、經緯度坐標、巖體名稱、高程、巖性等;土體數據錄入主要記錄土質類型、顏色、顆粒粗細等;水體數據錄入主要記錄水體類型、流量、水深、動態變化等;構造數據主要記錄構造類型、走向等;資源數據主要記錄調查點的礦種類別、資源量、礦體特征等;災害數據主要記錄調查點的災害類型、災害范圍、災害程度等.

圖3 數據錄入模塊結構圖
2.3.3 實體投影模塊
實體投影主要是能夠在World Wind 地球儀上對調查路線調查區進行實體投影,方便野外工作人員采集數據;同時也能夠對工作人員當前位置進行投影展示,進行導航或通過在底圖上投影的調查點查看采集的調查點的詳細信息.投影包括調查點投影以及實際勘探路線直線投影,導航指通過點擊地圖上調查點投影跳轉到對應的調查點詳情界面.
要在地圖上獲得實際路線投影,首先要遍歷數據庫里的所有調查點,使用HashMap 將不同圖幅的調查點進行分組,同一圖幅調查點放到同一個List 數列中;再依次對同一圖幅的調查點List 使用HashMap 分組得到每條路線所對應的調查點List.根據同一路線的每個調查點的經緯度創建一個position 對象,創建path對象并將所有position 加入其中,最后將path 對象加入RenderableLayer 對象中,再將RenderableLayer加入World Wind 圖層即可在地圖上顯示路線投影.
調查點投影遍歷數據庫下所有調查點,對每個調查點創建Placemark(地標:調查點標志)和Lable(標簽:調查點編號)對象,并將其加入RenderableLayer 對象中,再將RenderableLayer 加入World Wind 圖層即可在地圖上顯示調查點投影.調查點導航首先需要添加觸摸事件,判斷觸摸的是否為所添加的調查點投影.若為調查點投影,則根據該點的經緯度與所有調查點的經緯度進行比較,若一致,則使用startActivity 函數并攜帶Point 對象跳轉到相對應的調查點詳情界面.
2.3.4 三維展示模塊
三維展示模塊可以很好地展現地球的各種宏觀形態,可以對地球上的一些人類活動進行模擬;通過旋轉地球,可以從多角度來觀察地球上的地形地貌;通過“日夜循環”模式,清晰地了解地球自轉情況,通過模擬飛行器繞地飛行,宏觀地展示地面的復雜情況,方便規劃飛行路線;該模塊還可以在地表進行地標的拖拽、分析地表紋理以及在地球上進行一些簡單的模型搭建等等.
2.4.1 圖幅基本信息數據庫設計
圖幅基本信息數據庫用于存儲每張圖幅切片所對應的基本信息,用戶選擇圖幅后系統可以根據數據庫中的入伏基本信息和SD 卡中對應的圖幅,將其加載到World Wind 地圖上,圖幅基本信息表數據結構如表1所示.

表1 圖幅基本信息表數據結構
2.4.2 地質數據庫設計
系統數據庫模型采用圖幅-路線-調查點以及調查點的相關地質要素數據,包括巖體、土體、水體、構造、資源、災害6 大要素.地質數據模型E-R 圖如圖4所示.

圖4 地質數據模型E-R 圖
對地質數據進行錄入和保存,按照地質要素分類,每個地質要素類別中包含多張數據表,例如調查點要素類別中包含調查點基本信息表、調查點查證表、樣品信息表、調查點影像表和應用評價表;水體要素類別中包含水體(泉)調查表、水體(井、鉆孔)調查點表、水體(河)調查點表、井/孔水文地質柱狀圖信息表等;其他地質要素類別中包含的數據表歸納整理后,如表2所示.

表2 地質數據庫表清單
其中以調查點基本信息數據表為例的數據結構如表3所示,數據表采用GUID 主鍵,其中調查點統一編號、圖幅編號、路線編號和調查點號為必填字段,當用戶在數據錄入時,遺漏填寫必填字段,系統在交互界面中設計有溫馨提示對話框.

表3 調查點數據表的數據結構表

5 調查點性 PointType varchar 10 不必6 調查種類 PointSort varchar 2 不必7 調查手段 PointMethod varchar 10 不必8 地理位置 Location varchar 80 不必9 經度 Longitude double 20 ° 不必10 緯度 Latitude double 20 ° 不必11 高程 Altitude float 2 m 不必12 調查日期 SurveyDate Date 不必13 天氣狀況 Weather varchar 10 不必14 記錄人 Recorder varchar 20 不必15 參加人員 Participant varchar 40 不必
在GIS 底圖選取時,使用基于World Wind 的三維地球儀作為載體,替換傳統的二維平面底圖.World Wind 是美國航空宇航局研發的一款開源的地理軟件,能夠展現NASA、UGCS 等服務商所提供的地球圖像,是一個可視化地球儀.World Wind 實質上是為應用程序表達、處理和分析空間數據提供了一個平臺,其最大的特性是它是唯一擁有將多種公開和專用地理數據聚合功能,不但可以提供NASA 自身的數據,還可以提供從其他政府部門、行業和普通大眾中得到的數據;此外,它還能夠自動更新衛星數據,應用程序通過其接口可以獲取最新的衛星數據,例如火山噴發、地震等衛星影像.軟件開發人員能夠使用該軟件迅速搭建一個應用程序,實現地圖與地理信息的可視化交互,也能夠根據特定領域的需求,研發相關的應用程序.
World Wind 在地圖顯示時通過采用使用多分辨率圖層技術,達到快速瀏覽、縮放遙感影像數據的目的.所謂多分辨率圖層技術[15]就是對被顯示的數據進行重采樣,提取不同分辨率的圖層,然后根據World Wind 的視距顯示不同分辨率的圖層.World Wind 首先對地球進行網格劃分,在不同的分辨率層次上劃分大小不同的網格,并進行編號[16].在第0 層,World Wind將地球分成50 塊瓦片,每一塊影像跨度為36°×36°;第1 層在圖層0 的基礎上提高4 倍的分辨率,也就是說對于同一影像,它被分成18°×18°的片段,因此產生200 塊信息的瓦片;在圖層2,分辨率提高到含有800 塊9°×9°的瓦片;圖層3 就是4.5°×4.5°,而且含有3200 塊瓦片,以此類推.
World Wind 采用了先進的流傳輸技術,傳統的數據傳輸方式是直接傳輸空間數據,而World Wind 客戶端和服務器采用了傳輸圖片的方式,也就是說當用戶向服務器請求數據時,服務器不用即時生成數據,而是將先前準備好的圖片數據拼接成用戶需要的范圍,并返回給用戶,這在一定程度上極大地降低了服務器和網絡寬帶的負擔.
相對于具有較強商業性的GoogleEarth,World Wind 是完全免費的,其本身并不是一個應用程序,而是一個SDK,能夠提供完全開源的API 來進行軟件開發的工具包,其數據也更全面,結構更開放,支持加載GoogleEarth 的KML 文件.
World Wind 地圖的實現主要包含以下幾個步驟:
1)使用Gradle 將World Wind 庫添加到項目中;
2)在Activity 對應布局文件中添加FragmentLayout;
3)在Activity 中創建一個WorldWindow 的實例并添加到FragmentLayout 中;
4)要使得WorldWind 地球能夠下載圖像,需要將下面兩個網絡訪問權限添加到AndroidManifest 中.
<uses-permission android:name=”android.permission.INTERNET”/>
<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE”/>
Android 提供了兩種常用的網絡通信方式,分別包括使用TCP/IP 協議的Socket 通信以及另一種基于HTTP 協議的[17].本系統研發采用基于TCP/IP 協議的Socket,主要是因為HTTP 采用了“請求-響應”方式,服務器不能主動向客戶端發送消息,而系統的進一步完善,服務器發送、更新以及服務器主動確認客戶端實時位置等可能都需要服務器向客戶端發送請求;TCP是面向連接的,其三握手原則能確保將連接的不穩定性降到最低.而不采用UDP 套接字是因為UDP 不是面向連接的,不需要在數據傳輸之前建立連接,并且在接收到數據之后也不會向數據源發送確認信號.發送端沒有接收到確認信號,便無法確認是否數據成功發送到對方手上,當然也不需要你重新發送數據,因此它是一種沒有連接、缺乏可靠性的一種數據傳輸協議.而地質數據十分重要,保證數據傳輸的可靠性、安全性決定了我們應該使用TCP 套接字.系統Android 客戶端和服務器端利用Socket 進行數據交互通信的具體流程如圖5所示.
Android 一般會將線程分為兩種,其中一種叫做Main Thread,其余的線程則被稱為Worker Thread.當用戶在運行某個程序的時候,Android 操作系統都會開啟一個主要的線程給該程序,這個線程主要被用來加載UI 界面,與用戶進行交互并將交互結果根據需要顯示到屏幕上,這個線程通常被稱為Main Thread,又叫UI Thread.程序要想在Worker Thread 中更新Main Thread 的UI 界面,這就涉及到Worker Thread 和Main Thread 之間的消息通信問題[18].Android 操作系統為開發人員提供了處理多線程之間的消息通信問題的兩種方式:Handler 機制和AsyncTask 機制.
(1)通過Handle 機制來實現的通信方式:Android 一般使用Handler 處理線程中的消息隊列,每當線程中的Looper 對象獲取到消息隊列傳過來的某個消息時,Handler 就會把該消息發送給對象,每個線程中只能包含唯一的一個Handler 對象,使用該Handler對象便可以向其對應的線程傳遞消息,即Message 對象;Handler 一般用于實現某一個定時的任務或者用于線程之間的數據傳遞.
(2)通過AsyncTask 機制來實現的通信方式:Async Task 通過將線程池和Handler 進行封裝來處理線程間的通信問題,其優點在于能夠比較方便地在主線程中進行用戶界面更新,主要是因為AsyncTask 中擁有一個Handler 對象,能夠向主線程傳遞消息并讓其更新界面;使用線程池是為了避免不必要的線程創建和銷毀.
本文使用多線程機制主要是為了進行網絡數據請求,在進行網絡請求時,往往耗時較久,需要在子線程中進行,由于Handler 具有結構清晰,函數定義清晰等特點,本文也不需要AsyncTask 所包含的線程池進行管理,因此采用Handler 機制來解決主線程與工作線程之間的通信問題,具體實現流程如圖6所示.
數據持久化通常指將存儲在某個存儲器中的臨時數據存儲到設備中,確保設備關閉時數據不會丟失.本系統采用了兩種數據持久化方式:文件存儲到SD 卡和SQLite 數據庫存儲.文件存儲到SD 卡中主要用于存儲較大的圖幅切片,結構性復雜、數據量大的關系型數據存儲到SQLite 數據庫.文件存儲不會對保存的數據做任何格式化的處理,任何數據都是按照其原本的狀態存儲到對應的文件中,文件存儲適合粗出二進制數據或者不是很復雜的文本數據.SQLite 數據庫作為一種輕量級的關系型數據庫,占用了非常少量的系統資源,讀寫速度非常快,被廣泛應用于移動通信中.SQLite 數據庫文件存放在應用程序根目錄下的databases 目錄里面,不僅支持標準的SQL 語法,還支持數據庫的ACID 事務,相對于其他的數據庫,其方便之處在于不需要用戶名和密碼等訪問權限.Android 正是通過將其設置為操作系統自帶的數據庫,進一步促進了數據的本地持久化.

圖5 客戶端與服務器通信流程圖
3.4.1 圖幅切片存儲到SD 卡實現步驟
1)創建File 類,指向圖幅切片保存位置;
2)創建File 類對應的緩存輸出流BufferOutput Stream;
3)將字節流數列轉換為Bitmap 對象;
4)調用Bitmap 類下的compress 方法將圖片以png 文件格式保存到SD 卡對應目錄中.
3.4.2 SQLite 存儲數據實現步驟
1)完成LitePal 的配置工作;
2)創建數據庫并創建需要的數據表;
3)繼承DataSupport 類,實現增、刪、改、查功能.
本系統已在Android 系統的設備上進行安裝調試,并通過大量的測試,對系統的功能進行優化和升級,最終版本已經應用到實際工作中,并取得較好的效果.系統安裝及運行效果如圖7所示.根據實際業務需求,系統實現了高空鳥瞰圖與地平線視角兩種顯示方式,供用戶在實際應用中進行選擇,運行效果如圖8所示.

圖6 客戶端獲取圖幅多線程數據通信流程圖

圖7 系統安裝及運行界面
三維展示模塊能夠很好地展示地球的各種宏觀形態,通過旋轉,可以從多種角度來觀察地球上投影的地形地貌;通過“日夜循環”模式,模擬飛行器繞地飛行,宏觀地觀察地面的各種復雜地形情況,方便規劃野外地質勘查路線;也能夠實現地標拖拽、紋理分析及模型搭建等.

圖8 高空鳥瞰圖、地平線視角
本文針對地質數據野外采集與數字化的實際問題,集成World Wind 地圖技術、網絡通信技術、多線程技術和數據存儲技術,設計并實現了一種基于World Wind 移動端的地質數據野外采集系統,替換傳統的紙質錄入方法和掌上電腦平面文本錄入的方法.基于北斗/GPS 與移動網絡的綜合定位策略研究取得了較好的成果;基于移動GIS 的可視化數據采集用戶接口,實現了結構化與非結構化的原始數據矢量化地質底圖的實時定位錄入;基于WorldWind 移動GIS 圖形編輯、導航及投影研究取得了突破性成果;本系統的研發提高了資源勘查工作的效率,減少工作人員數量,降低資源勘查的成本;利用移動互聯網的普遍性、便捷性以及安全性實現野外地質工作的信息化采集、瀏覽和展示,為用戶提供了一種全新高效的工作方式.

圖9 數據增刪改查效果圖