李 兵 付開宇 方小二
(云南省地圖院,云南 昆明 650000)
傳統(tǒng)的數(shù)據(jù)采集方法是,內(nèi)業(yè)人員打印出要采集區(qū)域的紙質(zhì)圖紙和報表,交由外業(yè)人員攜帶到實地進行采集工作,包括在紙質(zhì)地圖上對采集信息的標繪,以及在紙質(zhì)表格中對屬性數(shù)據(jù)的記錄?;氐睫k公室后需要把標繪的圖形進行矢量化處理,同時把屬性數(shù)據(jù)錄入數(shù)據(jù)庫。
傳統(tǒng)的數(shù)據(jù)采集方法存在數(shù)據(jù)采集成本高、精度低、效率低、時效性差等不足。3S技術(shù)的出現(xiàn)及快速發(fā)展為上述問題提供了科學(xué)的解決方案。
目前已有的采集系統(tǒng)分為單一在線數(shù)據(jù)采集系統(tǒng)和單一離線數(shù)據(jù)采集系統(tǒng),但存在以下問題:
在線采集系統(tǒng)必須實時在線,但數(shù)據(jù)采集的工作大多在野外進行,很多地方網(wǎng)絡(luò)覆蓋不足,在沒有網(wǎng)絡(luò)或網(wǎng)絡(luò)信號不足的區(qū)域,造成無法開展工作的困擾。同時為保證采集數(shù)據(jù)的精度,系統(tǒng)中必定會加入影像底圖,但影像圖數(shù)據(jù)量比較大,在數(shù)據(jù)交換過程中,勢必會產(chǎn)生許多的網(wǎng)絡(luò)傳輸費用。
離線采集系統(tǒng)要求內(nèi)業(yè)人員在外業(yè)人員出外業(yè)之前,把要采集區(qū)域的數(shù)據(jù)按系統(tǒng)要求處理好,轉(zhuǎn)存進移動設(shè)備,并進行數(shù)據(jù)的配置。待數(shù)據(jù)采集完畢后,將采集的數(shù)據(jù)導(dǎo)出交由內(nèi)業(yè)人員進行處理。但對一個區(qū)域的數(shù)據(jù)采集往往會有多名外業(yè)人員攜帶多臺設(shè)備同時進行作業(yè),造成內(nèi)業(yè)人員需要配置多臺設(shè)備的數(shù)據(jù),采集結(jié)束后需要將多臺設(shè)備采集的數(shù)據(jù)進行合并處理,顯然增加了內(nèi)業(yè)人員的工作量。并且移動設(shè)備中配置的數(shù)據(jù)存在時效性差、更新難度大、數(shù)據(jù)制作復(fù)雜等不足。
基于以上分析思考,開發(fā)離在線一體化的移動GIS數(shù)據(jù)采集系統(tǒng),不僅能解決傳統(tǒng)數(shù)據(jù)采集方法中存在的效率低和精度差的問題,并且相比單一在線或離線的數(shù)據(jù)采集系統(tǒng),減少了內(nèi)外業(yè)人員的工作量,有效地提高了生產(chǎn)效率。
Android是基于Linux并且開源的移動設(shè)備操作系統(tǒng),主要用于移動設(shè)備,如手機、手表、平板電腦等。隨著Android版本的更新,Android設(shè)備的性能也得到很大的提升,越來越多的用戶使用Android設(shè)備進行移動辦公。
SQLite是一款輕量級、自給自足、零配置、無服務(wù)器、支持事務(wù)的SQL數(shù)據(jù)庫引擎。與其他數(shù)據(jù)庫不同,SQLite不需要在系統(tǒng)中進行配置,只要確保SQLite的二進制文件存在即可使用的數(shù)據(jù)庫。這使得移動端的數(shù)據(jù)存儲成為現(xiàn)實。
移動定位可以幫助用戶快速的確定當前所在位置,是實現(xiàn)移動GIS采集系統(tǒng)不可或缺的條件。移動定位的主要方式有根據(jù)設(shè)備GPS芯片和GPS衛(wèi)星實現(xiàn)的GPS定位,根據(jù)設(shè)備獲取的基站信息實現(xiàn)的基站定位,根據(jù)設(shè)備獲取的Wi-Fi信息實現(xiàn)的Wi-Fi定位。由于移動GIS采集系統(tǒng)是用于戶外作業(yè),而在戶外GPS定位的方式精確度最高,所以系統(tǒng)采用GPS定位的方式。
數(shù)字正射影像,是對航空相片進行數(shù)字微分糾正和鑲嵌,按一定圖幅范圍裁剪生成的數(shù)字正射影像集。具有精度高、信息豐富、直觀逼真、獲取快捷等優(yōu)點,所以使用正射影像作為移動GIS數(shù)據(jù)采集系統(tǒng)的底圖,在此基礎(chǔ)上進行數(shù)據(jù)的采集。
VPN一般指虛擬專用網(wǎng)絡(luò),屬于遠程訪問技術(shù),即利用公用網(wǎng)絡(luò)架設(shè)專用網(wǎng)絡(luò),進行加密通訊。遠程訪問是通過VPN網(wǎng)關(guān)對數(shù)據(jù)包的加密和數(shù)據(jù)包目標地址的轉(zhuǎn)換來實現(xiàn)的。為保證移動GIS數(shù)據(jù)采集系統(tǒng)中數(shù)據(jù)的安全性,采用VPN技術(shù)作為系統(tǒng)數(shù)據(jù)交換的加密方式。
ArcGIS Runtime SDK是一套用于構(gòu)建本地應(yīng)用程序,并將其部署到各種主流平臺和設(shè)備的地圖應(yīng)用程序開發(fā)包,具有強大的地理信息表達和處理功能,使用它可以讓我們做出具有制圖、地理編碼、導(dǎo)航、地理處理、位置分析等能力的應(yīng)用。對于開發(fā)者而言可以根據(jù)自己的平臺選擇相應(yīng)的API進行開發(fā)。ArcGIS Runtime SDK for Android主要供Android平臺的開發(fā)者使用,使開發(fā)更加簡單高效,所以系統(tǒng)采用該技術(shù)作為應(yīng)用開發(fā)的接口。
運行時地理數(shù)據(jù)庫是ESRI的擴展名為*.geodatabase的專用于移動端設(shè)備的離線矢量格式。具有離線使用、空間數(shù)據(jù)編輯和屬性數(shù)據(jù)編輯等特性,所以移動GIS采集系統(tǒng)采用運行時地理數(shù)據(jù)庫作為離線空間地理數(shù)據(jù)庫。
用戶在網(wǎng)絡(luò)狀態(tài)良好的狀態(tài)下將要采集區(qū)域的影像底圖、運行時地理數(shù)據(jù)庫、地名和POI等數(shù)據(jù)通過VPN連接至服務(wù)器進行下載,下載完畢后進行離線外業(yè)作業(yè),待外業(yè)作業(yè)結(jié)束后,通過VPN連接至服務(wù)器將采集的數(shù)據(jù)同步回服務(wù)器。
系統(tǒng)采用四層架構(gòu),由數(shù)據(jù)層、數(shù)據(jù)交換層、業(yè)務(wù)邏輯層和移動端顯示層組成。系統(tǒng)可多客戶端同時訪問并采用統(tǒng)一的數(shù)據(jù)管理方式??傮w設(shè)計圖如圖1所示。
圖1 系統(tǒng)總體設(shè)計圖
移動GIS離在線一體化數(shù)據(jù)采集系統(tǒng)的功能概括為如下功能模塊,如圖2所示。
圖2 功能框架圖
2.2.1 作業(yè)準備模塊
作業(yè)準備模塊包括數(shù)據(jù)字典、任務(wù)范圍和服務(wù)發(fā)布三部分。數(shù)據(jù)字典主要是根據(jù)采集任務(wù)的需求所設(shè)置的采集項的字段名稱、字段類型及約束條件等。任務(wù)范圍主要是根據(jù)不同用戶設(shè)置不同的采集區(qū)域,用戶在進行作業(yè)前只需下載自己任務(wù)范圍內(nèi)的數(shù)據(jù),既可以節(jié)省數(shù)據(jù)傳輸?shù)牧髁?,也可以有效地避免多用戶對同一區(qū)域的重復(fù)采集。服務(wù)發(fā)布主要是將設(shè)置好數(shù)據(jù)字典和任務(wù)范圍的采集數(shù)據(jù)、影像數(shù)據(jù)、路網(wǎng)數(shù)據(jù)和POI數(shù)據(jù)發(fā)布到VPN服務(wù)器上,供移動GIS系統(tǒng)使用。
2.2.2 地圖管理模塊
地圖管理模塊提供地圖相關(guān)的操作,包括地圖全幅顯示、平移、放大、縮小、長度量測、面積量測、圖層管理和要素的點選查詢等功能。
2.2.3 數(shù)據(jù)采集模塊
數(shù)據(jù)采集模塊可以通過手動打點、自由筆或者GPS打點的方式采集點、線、面等空間數(shù)據(jù),待空間數(shù)據(jù)采集結(jié)束后根據(jù)需求選擇性填寫與其相關(guān)的屬性數(shù)據(jù),也可以對已采集數(shù)據(jù)的空間及屬性信息進行編輯。采集模塊還可以采集與所采要素相關(guān)聯(lián)的多媒體信息,如照片、視頻、音頻等數(shù)據(jù)。
2.2.4 GPS導(dǎo)航
GPS導(dǎo)航模塊包含定位和路徑導(dǎo)航兩部分,定位模塊依賴設(shè)備的GPS模塊獲取到設(shè)備的坐標,經(jīng)過坐標轉(zhuǎn)換,實時的在系統(tǒng)中渲染顯示。路徑導(dǎo)航模塊可以通過地圖選點或搜索POI的方式設(shè)置起點和終點,待設(shè)置好起止點之后系統(tǒng)會計算出起點到終點的最優(yōu)路徑,每段路的長度及耗時,并在地圖界面渲染顯示。
2.2.5 數(shù)據(jù)傳輸
數(shù)據(jù)傳輸模塊主要包括運行時地理數(shù)據(jù)庫的下載、運行時地理數(shù)據(jù)庫的同步和離線底圖的下載。用戶在網(wǎng)絡(luò)狀態(tài)良好的狀態(tài)下根據(jù)任務(wù)范圍,將包含采集數(shù)據(jù)的運行時地理數(shù)據(jù)庫通過VPN連接至VPN服務(wù)器進行下載,下載完畢后進行離線作業(yè),待外業(yè)作業(yè)結(jié)束后,通過VPN連接至服務(wù)器將包含采集的數(shù)據(jù)的運行時地理數(shù)據(jù)庫同步回服務(wù)器。離線底圖下載包含對任務(wù)范圍內(nèi)的影像底圖、地名和POI等數(shù)據(jù)進行下載,供移動GIS系統(tǒng)在離線狀態(tài)下使用。
3.1.1 系統(tǒng)開發(fā)環(huán)境
系統(tǒng)使用Android Studio 3.0作為開發(fā)平臺,Kotlin作為開發(fā)語言,結(jié)合ArcGIS Runtime SDK for Android 100.2進行開發(fā)。
3.1.2 系統(tǒng)運行環(huán)境
系統(tǒng)運行在操作系統(tǒng)為Android的設(shè)備上,包括手機和平板電腦,Android版本要求在5.0及其以上,內(nèi)存大于等于2G,存儲容量大于等于16G。
首先在ArcMap中將影像底圖和地名數(shù)據(jù)制作好,然后點擊共享為影像服務(wù),將其發(fā)布到ArcGis Server上,在服務(wù)編輯界面選中允許導(dǎo)出,供移動GIS系統(tǒng)下載離線底圖。將設(shè)置好數(shù)據(jù)字典和任務(wù)范圍的采集數(shù)據(jù)發(fā)布為可編輯的要素服務(wù),供移動GIS系統(tǒng)下載和同步運行時地理數(shù)據(jù)庫。將路網(wǎng)數(shù)據(jù)發(fā)布為路網(wǎng)服務(wù),供路徑導(dǎo)航模塊使用。
3.3.1 加載離線底圖
var tPKFile = File(getCachePath() + "/" + MyConfig.DT_Path)
var tileCache = TileCache(tPKFile.absolutePath)
var dt_Layer:ArcGISTiledLayer = ArcGISTiledLayer(tileCache)
dt_Layer.name = MyConfig.DT _Name
basemaps.baseLayers.add(layer)
var map = ArcGISMap(basemaps)
mapView.map = map
3.3.2 GPS定位
locationDisplay = mapView.locationDisplay
locationDisplay!!.autoPanMode = LocationDisplay.
AutoPanMode.OFF
locationDisplay!!.addLocationChangedListener {
locationChangedEvent ->
location = locationChangedEvent.location}
3.3.3 運行時地理數(shù)據(jù)庫下載
val generateParamsFuture=
mGeodatabaseSyncTask.createDefaultGenerateGeodatabas eParametersAsync(mGenerateExtent)
var generateParams = generateParamsFuture.get()
var generateJob = mGeodatabaseSyncTask
generateGeodatabaseAsync(generateParams,mGeodatabasePath)
3.3.4 運行時地理數(shù)據(jù)庫同步
val syncParamsFuture = geodatabaseSyncTask.createDefau ltSyncGeodatabaseParametersAsync(geodatabase)
var syncParams = syncParamsFuture.get()
var syncJob = geodatabaseSyncTask.
syncGeodatabaseAsync(syncParams,geodatabase)
3.3.5 離線底圖下載
val generateParamsFuture =mExportTileCacheTask.create DefaultExportTileCacheParametersAsync(mAreaOfInterest,mMinScale,mMaxScale)
var generateParams = generateParamsFuture.get()
var generateJob = mExportTileCacheTask
exportTileCacheAsync(generateParams,mFileNameWithPath)
3.3.6 路徑導(dǎo)航
RouteTask routeTask = RouteTask.createOnlineRouteTask
(ROUTE_PATH,null);
RouteParameters routeParameters = routeTask.retrieveDefa ultRouteTaskParameters();
routeTask.solve(routeParameters,new CallbackListener
3.3.7 數(shù)據(jù)采集
包括屬性數(shù)據(jù)、空間數(shù)據(jù)及多媒體信息的采集和編輯等。
(1) 空間數(shù)據(jù)采集。空間數(shù)據(jù)的采集包括對點、線、面要素的采集,通過調(diào)用ArcGIS Runtime SDK for Android 接口的SketchEditor類來實現(xiàn),比如采集一個點,代碼如下:
mMapView.sketchEditor = mSketchEditor
mSketchEditor.start(SketchCreationMode.POINT)
(2) 空間數(shù)據(jù)編輯。包括對已采要素的Geometry進行節(jié)點的增、刪、改操作,主要代碼如下:
mSketchEditor.start(geometry,SketchCreationMode.POINT)
(3) 屬性數(shù)據(jù)采集。屬性界面是系統(tǒng)根據(jù)作業(yè)準備階段設(shè)置的數(shù)據(jù)字典動態(tài)生成的。主要代碼如下:
textValue = mArcGisFeature.attributes.get(field.name)?.toString() ?:""
var edit = editText(textValue) {hint = field.alias;tag =field }
(4) 多媒體采集
系統(tǒng)可以對圖片、音頻和視頻數(shù)據(jù)進行采集和編輯,比如添加照片,代碼如下:
mArcGisFeature.addAttachmentAsync(FileUtils.File2byte(file),"image/jpg",file!!.name).get()
本文首先對傳統(tǒng)的數(shù)據(jù)采集方式存在的問題進行了描述,然后對移動GIS離在線一體化關(guān)鍵技術(shù)進行了研究,并提出一種基于移動GIS離在線一體化數(shù)據(jù)采集系統(tǒng)的設(shè)計方案。該方案不僅包含常規(guī)GIS系統(tǒng)的數(shù)據(jù)可視化和管理功能,而且還具備離線數(shù)據(jù)采集、在線數(shù)據(jù)同步、位置分析等功能,極大地減輕了數(shù)據(jù)采集人員的工作量,有效地提高了生產(chǎn)效率。