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

圖1 系統(tǒng)體系架構(gòu)

圖2 系統(tǒng)功能結(jié)構(gòu)圖
2.3.2 數(shù)據(jù)操作模塊
對(duì)地質(zhì)數(shù)據(jù)進(jìn)行錄入和保存,同時(shí)基于定位模塊實(shí)現(xiàn)可視化的數(shù)據(jù)錄入和數(shù)據(jù)編輯,該模塊根據(jù)業(yè)務(wù)需求分為六個(gè)子模塊:巖體、土體、水體、構(gòu)造、資源和災(zāi)害,如圖3所示.巖體數(shù)據(jù)錄入主要記錄野外巖體調(diào)查點(diǎn)的巖體綜合信息,包括地理位置、經(jīng)緯度坐標(biāo)、巖體名稱、高程、巖性等;土體數(shù)據(jù)錄入主要記錄土質(zhì)類型、顏色、顆粒粗細(xì)等;水體數(shù)據(jù)錄入主要記錄水體類型、流量、水深、動(dòng)態(tài)變化等;構(gòu)造數(shù)據(jù)主要記錄構(gòu)造類型、走向等;資源數(shù)據(jù)主要記錄調(diào)查點(diǎn)的礦種類別、資源量、礦體特征等;災(zāi)害數(shù)據(jù)主要記錄調(diào)查點(diǎn)的災(zāi)害類型、災(zāi)害范圍、災(zāi)害程度等.

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

表1 圖幅基本信息表數(shù)據(jù)結(jié)構(gòu)
2.4.2 地質(zhì)數(shù)據(jù)庫(kù)設(shè)計(jì)
系統(tǒng)數(shù)據(jù)庫(kù)模型采用圖幅-路線-調(diào)查點(diǎn)以及調(diào)查點(diǎn)的相關(guān)地質(zhì)要素?cái)?shù)據(jù),包括巖體、土體、水體、構(gòu)造、資源、災(zāi)害6 大要素.地質(zhì)數(shù)據(jù)模型E-R 圖如圖4所示.

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

表2 地質(zhì)數(shù)據(jù)庫(kù)表清單
其中以調(diào)查點(diǎn)基本信息數(shù)據(jù)表為例的數(shù)據(jù)結(jié)構(gòu)如表3所示,數(shù)據(jù)表采用GUID 主鍵,其中調(diào)查點(diǎn)統(tǒng)一編號(hào)、圖幅編號(hào)、路線編號(hào)和調(diào)查點(diǎn)號(hào)為必填字段,當(dāng)用戶在數(shù)據(jù)錄入時(shí),遺漏填寫(xiě)必填字段,系統(tǒng)在交互界面中設(shè)計(jì)有溫馨提示對(duì)話框.

表3 調(diào)查點(diǎn)數(shù)據(jù)表的數(shù)據(jù)結(jié)構(gòu)表

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

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

圖6 客戶端獲取圖幅多線程數(shù)據(jù)通信流程圖

圖7 系統(tǒng)安裝及運(yùn)行界面
三維展示模塊能夠很好地展示地球的各種宏觀形態(tài),通過(guò)旋轉(zhuǎn),可以從多種角度來(lái)觀察地球上投影的地形地貌;通過(guò)“日夜循環(huán)”模式,模擬飛行器繞地飛行,宏觀地觀察地面的各種復(fù)雜地形情況,方便規(guī)劃野外地質(zhì)勘查路線;也能夠?qū)崿F(xiàn)地標(biāo)拖拽、紋理分析及模型搭建等.

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

圖9 數(shù)據(jù)增刪改查效果圖
計(jì)算機(jī)系統(tǒng)應(yīng)用2019年4期