朱 煜 吳保國
(北京林業(yè)大學(xué),北京,100083)
基于Android的小班外業(yè)調(diào)查系統(tǒng)研建1)
朱 煜 吳保國
(北京林業(yè)大學(xué),北京,100083)
針對(duì)森林資源調(diào)查中小班外業(yè)調(diào)查問題,探討了采用Android操作系統(tǒng)、支持GPS的移動(dòng)設(shè)備中利用PhoneGap平臺(tái)構(gòu)建森林資源小班外業(yè)調(diào)查系統(tǒng)的技術(shù)與方法。給出了小班調(diào)查數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì),采用OpenLayers開源GIS實(shí)現(xiàn)GPS坐標(biāo)獲取與展示、小班要素編輯、小班要素合并與分割、屬性數(shù)據(jù)與空間數(shù)據(jù)的導(dǎo)入導(dǎo)出、數(shù)據(jù)的格式轉(zhuǎn)換等核心功能的方法以及核心代碼。設(shè)計(jì)開發(fā)的系統(tǒng)實(shí)現(xiàn)了小班編輯、小班糾偏、小班合并于分割、樣地編輯、數(shù)據(jù)采集等功能。
小班調(diào)查;Android;OpenLayers;phoneGap
小班外業(yè)調(diào)查是森林資源管理的主要工作之一,利用信息化手段進(jìn)行小班外業(yè)調(diào)查能夠減輕傳統(tǒng)小班調(diào)查數(shù)據(jù)內(nèi)業(yè)錄入的工作量,從而提高小班外業(yè)調(diào)查的正確性和工作效率[1]。據(jù)IDC(Internet Data Center)的數(shù)據(jù)報(bào)道,2013年,Android操作系統(tǒng)占據(jù)了全球移動(dòng)操作系統(tǒng)市場份額的59%[2]。因此,研究基于Android的小班外業(yè)調(diào)查系統(tǒng)具有實(shí)際應(yīng)用價(jià)值。
基于Android的應(yīng)用軟件開發(fā)模式可以分為Web App、Hybrid App、Native App。采用Hybrid App開發(fā)模式的Android App可以利用PhoneGap平臺(tái)在系統(tǒng)中搭建開源WebGIS,可供選擇的WebGIS平臺(tái)也有很多,例如OpenLayers、GoogleMap等。其中,OpenLayers[3]是開源GIS平臺(tái),提供了功能豐富的API,能夠?qū)崿F(xiàn)小班空間數(shù)據(jù)的展示、編輯等功能,滿足小班外業(yè)調(diào)查系統(tǒng)的需求,并且可降低開發(fā)與使用費(fèi)用。為了系統(tǒng)中使用離線地圖,系統(tǒng)使用KML格式的地理信息數(shù)據(jù)。以Hybrid App模式開發(fā)Android App,可以利用PhoneGap、AppCan、Titanium等開發(fā)平臺(tái),其中PhoneGap最早推出,成功案例也較多,例如:Trip Case、Untapped等,所以本系統(tǒng)采用PhoneGap框架。因此,本系統(tǒng)利用PhoneGap平臺(tái)搭建開源GIS OpenLayers,使用SQLite數(shù)據(jù)庫存儲(chǔ)小班采集的屬性數(shù)據(jù)[4],將小班空間數(shù)據(jù)存儲(chǔ)為KML格式的數(shù)據(jù)[5-6]。
1.1 小班調(diào)查的內(nèi)容
我國的森林調(diào)查根據(jù)調(diào)查目標(biāo)分為3類。其中二類調(diào)查又稱為森林資源規(guī)劃設(shè)計(jì)調(diào)查,以縣級(jí)行政區(qū)域、國有林場等為主要調(diào)查對(duì)象,以小班為基本調(diào)查單位[7],主要包括區(qū)劃、調(diào)查、資源統(tǒng)計(jì)分析3大部分。小班調(diào)查的因子主要有小班的坡度、坡向、坡位、土壤等立地因子和林木起源、樹種組成、平均年齡、平均直徑、平均高、蓄積量等測樹因子,其中小班的測樹因子是通過在小班中設(shè)置的調(diào)查樣地、標(biāo)準(zhǔn)地或角規(guī)樣地進(jìn)行調(diào)查后,通過計(jì)算得到。
1.2 小班調(diào)查數(shù)據(jù)庫設(shè)計(jì)
小班外業(yè)調(diào)查的數(shù)據(jù)字段較多,比如小班數(shù)據(jù)表中就有上百個(gè)因子字段,所以系統(tǒng)功能設(shè)計(jì)不僅要考慮到數(shù)據(jù)因子字段的全面性,還要考慮到數(shù)據(jù)冗余、系統(tǒng)開發(fā)難度等問題。系統(tǒng)核心的數(shù)據(jù)庫表結(jié)構(gòu)如下。
(1)小班調(diào)查數(shù)據(jù)。由于一個(gè)小班中可能出現(xiàn)多種樹種,為了減少冗余數(shù)據(jù),數(shù)據(jù)庫采用將小班調(diào)查因子存儲(chǔ)在2個(gè)關(guān)系中,關(guān)系XBSJB存儲(chǔ)小班的基本信息,關(guān)系SZZCB存儲(chǔ)小班的樹種組成,兩個(gè)關(guān)系之間用xbbh來關(guān)聯(lián),關(guān)系模式(只列出主要字段,其它省略)如下:
XBSJB(FID,xbbh,ldsyq,lmsyq,……,dcsj)
SZZCB(xbbh,sz)
其中,F(xiàn)ID是小班要素編號(hào),xbbh是小班編號(hào),ldsyq是林地所有權(quán),lmsyq是林木所有權(quán),dcsj是調(diào)查時(shí)間,sz是樹種。
(2)樣地與標(biāo)準(zhǔn)地調(diào)查數(shù)據(jù)。樣地與標(biāo)準(zhǔn)地的數(shù)據(jù)結(jié)構(gòu)基本是一樣的,為了減輕數(shù)據(jù)庫結(jié)構(gòu)的復(fù)雜度,數(shù)據(jù)庫采用將樣地表和標(biāo)準(zhǔn)地表都存放在表YDDCB結(jié)構(gòu)中,主鍵為小班編號(hào)和樣地號(hào),增加樣地類別字段來區(qū)分樣地與標(biāo)準(zhǔn)地,關(guān)系MMJCB存儲(chǔ)樣地中樣木的信息,主鍵為小班編號(hào)、樣地號(hào)和樣木號(hào),關(guān)系模式(只列出主要字段,其它省略)如下:
YDDCB(FID,xbbh,ydh,ydlb,……,dcsj)
MMJCB(xbbh,ydh,ymh,sz,xj,sg,……,dcsj)
其中,xbbh為小班編號(hào),ydh為樣地號(hào),ydlb為樣地類別,ymh是樣木號(hào),xj是胸徑,sg是樹高。
(3)角規(guī)調(diào)查數(shù)據(jù)。角規(guī)調(diào)查數(shù)據(jù)存儲(chǔ)在2個(gè)表中。角規(guī)立地因子數(shù)據(jù)存放在表JGDCB中,角規(guī)繞測數(shù)據(jù)存放在表JGRCB中,關(guān)系模式如下:
JGDCB(FID,xbbh,ydh,ydlb,ydmj,pd,px,……,dcsj)
JGRCB(xbbh,ydh,ymh,sz ,cljs,xj,sg)
其中,xbbh為小班編號(hào),ydh為角規(guī)樣地號(hào),ymh是樣木號(hào),pd是坡度,px是坡向,cljs是測量計(jì)數(shù),xj是胸徑,sg是樹高。
1.3 空間數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
系統(tǒng)的空間數(shù)據(jù)庫采用KML格式的地理信息空間數(shù)據(jù),在標(biāo)簽中存儲(chǔ)小班的FID用來與屬性數(shù)據(jù)進(jìn)行數(shù)據(jù)的關(guān)聯(lián),在標(biāo)簽中存儲(chǔ)小班的描述信息,可以在此標(biāo)簽中嵌套HTML語言做小班要素的描述,在標(biāo)簽中存儲(chǔ)小班邊界特征點(diǎn)的坐標(biāo)。小班的空間數(shù)據(jù)基本格式實(shí)例如下:
121.488,53.332,0 121.488,53.332, 0,……, 121.481,53.331,0
2.1 系統(tǒng)開發(fā)技術(shù)基礎(chǔ)
系統(tǒng)開發(fā)的技術(shù)基礎(chǔ)通過以下幾個(gè)方面來搭建:
①Android開發(fā)環(huán)境搭建。JDK安裝,Eclipse安裝,Android SDK安裝,ADT安裝,創(chuàng)建AVD。
②PhoneGap開發(fā)平臺(tái)搭建。下載PhoneGap并解壓,在系統(tǒng)開發(fā)工程包中創(chuàng)建兩個(gè)文件夾:/libs和/assets/www。將解壓出來的PhoneGap中的phonegap.js文件復(fù)制到/assets/www目錄下、phonegap.jar文件復(fù)制到/libs目錄下,再把xml目錄復(fù)制到android項(xiàng)目的res目錄下。修改AndroidManifest.xml文件中的配置,使開發(fā)環(huán)境具有相應(yīng)的API權(quán)限。再修改src文件夾下的Java主文件:添加import com.phonegap.*、將類改成繼承為DroidGap、刪掉import android.app.Activity、把setContentView()這行替換為super.loadUrl(“系統(tǒng)首界面地址”);
③引入OpenLayers。下載OpenLayers并解壓,把OpenLayers.js文件放在/assets/www/JS目錄下。
④系統(tǒng)開發(fā)。在/assets/www目錄下創(chuàng)建html文件,可首先創(chuàng)建一個(gè)與super.loadUrl中指向的一個(gè)html文件,即系統(tǒng)的首界面。
2.2 系統(tǒng)工作流程
根據(jù)小班調(diào)查的流程,系統(tǒng)的業(yè)務(wù)流程包括數(shù)據(jù)準(zhǔn)備、下載數(shù)據(jù)、數(shù)據(jù)采集、數(shù)據(jù)上傳、數(shù)據(jù)轉(zhuǎn)換五個(gè)過程,系統(tǒng)業(yè)務(wù)流程圖如圖1所示。
①數(shù)據(jù)準(zhǔn)備。將森林資源管理系統(tǒng)中的數(shù)據(jù)轉(zhuǎn)換為Android移動(dòng)設(shè)備支持的數(shù)據(jù)格式。需要轉(zhuǎn)換的數(shù)據(jù)有屬性數(shù)據(jù)和空間數(shù)據(jù),屬性數(shù)據(jù)將SQLServer支持的數(shù)據(jù)格式轉(zhuǎn)換為Android系統(tǒng)中SQLite支持的數(shù)據(jù)格式;空間數(shù)據(jù)格式轉(zhuǎn)換是將ArcGIS支持的shapfile數(shù)據(jù)轉(zhuǎn)換為KML格式的地理信息空間數(shù)據(jù)。
②數(shù)據(jù)下載。將轉(zhuǎn)換后的數(shù)據(jù)通過無線網(wǎng)絡(luò)下載到移動(dòng)設(shè)備的儲(chǔ)存卡中的相應(yīng)位置。
③小班外業(yè)數(shù)據(jù)采集。可分為森林資源屬性數(shù)據(jù)采集和空間數(shù)據(jù)采集兩部分。屬性數(shù)據(jù)的采集可通過兩種方法進(jìn)行,第一種將測量得到的森林資源屬性數(shù)據(jù)通過系統(tǒng)錄入到數(shù)據(jù)庫中;第二種方法是在地圖操作界面,點(diǎn)擊“資源調(diào)查”按鈕,然后再點(diǎn)擊相應(yīng)的小班地圖就能直接進(jìn)行資源調(diào)查??臻g數(shù)據(jù)采集有兩種方法,一種是手動(dòng)在小班圖層上畫出小班的邊界,然后保存圖層,這種方法可能會(huì)因?yàn)楣ぷ魅藛T的操作失誤等問題造成數(shù)據(jù)誤差較大,所以這種方法比較適用于小班邊界糾偏;另一種方法是,利用系統(tǒng)的定位導(dǎo)航功能,將實(shí)時(shí)采集到的GPS數(shù)據(jù)擬合成行走軌跡,并實(shí)時(shí)的在地圖上展示,工作人員繞著小班行走一圈,將會(huì)生成一個(gè)軌跡文件GPX,將此GPX文件轉(zhuǎn)換為KML文件,利用采集的坐標(biāo)點(diǎn)可擬合成小班面,并在小班圖層上展示。做樣地調(diào)查時(shí),需要新建一個(gè)樣地圖層,然后可在新圖層上直接勾繪樣地,完成后保存就會(huì)生成新建的樣地圖層。
④數(shù)據(jù)上傳。將采集到的森林資源小班數(shù)據(jù)通過無線網(wǎng)絡(luò)上傳到服務(wù)器上。
⑤格式轉(zhuǎn)換。在服務(wù)器上得到采集的數(shù)據(jù)后,再對(duì)采集到的數(shù)據(jù)進(jìn)行格式轉(zhuǎn)換,將數(shù)據(jù)轉(zhuǎn)換成服務(wù)器軟件支持的數(shù)據(jù)格式。
圖1 基于Android的小班外業(yè)調(diào)查系統(tǒng)業(yè)務(wù)流程
2.3 系統(tǒng)功能設(shè)計(jì)
根據(jù)小班外業(yè)調(diào)查的業(yè)務(wù)需求,將系統(tǒng)劃分為屬性數(shù)據(jù)和空間數(shù)據(jù)兩大部分,功能模塊圖如圖2所示。
屬性數(shù)據(jù)部分主要包括樣地調(diào)查、標(biāo)準(zhǔn)地調(diào)查、角規(guī)調(diào)查和小班調(diào)查等模塊。通過樣地調(diào)查、標(biāo)準(zhǔn)地調(diào)查、角規(guī)調(diào)查的方法將調(diào)查到的數(shù)據(jù)錄入到系統(tǒng)中。在系統(tǒng)中調(diào)查得到的數(shù)據(jù)都具有錄入、游覽、更改、刪除等管理功能,同時(shí)管理的記錄也會(huì)保存在數(shù)據(jù)庫中。通過小班數(shù)據(jù)模塊的游覽功能可鏈接到相應(yīng)小班的空間數(shù)據(jù)模塊,實(shí)現(xiàn)屬性查圖的功能。
空間數(shù)據(jù)部分主要包括小班位置定位、小班地圖游覽、地圖縮放、面積測量、圖查屬性、小班編輯、小班糾偏、小班合并與分割[8]等模塊。用戶根據(jù)需求可游覽地圖中的小班,定位到要調(diào)查的小班。進(jìn)行小班調(diào)查時(shí),可在地圖上進(jìn)行小班邊界的勾繪以及小班邊界的糾偏,也可以使用GPS導(dǎo)航功能圍著小班邊界繞測一圈生成小班邊界??赏ㄟ^地圖界面直接查看小班要素的概要信息,并能鏈接到屬性數(shù)據(jù)模塊查看詳細(xì)信息,實(shí)現(xiàn)圖查屬性的功能。
3.1 GPS坐標(biāo)獲取與展示
GPS坐標(biāo)的獲取需要Android移動(dòng)設(shè)備有GPS模塊的支持,調(diào)查點(diǎn)的經(jīng)緯度坐標(biāo)利用PhoneGap平臺(tái)提供的GPS數(shù)據(jù)接口獲取,關(guān)鍵程序如下:
navigator.geolocation.getCurrenPosition(getPositionSuccess,getPositionError,
{maximumAge:3000, timeout:5000,enableHighAccuracy:true});
當(dāng)前位置的緯度:position.coords.latitude;
當(dāng)前位置的經(jīng)度:position.coords.longitude;
當(dāng)前位置的海拔高度:position.coords.altitude;
調(diào)查點(diǎn)的經(jīng)緯度坐標(biāo)利用OpenLayers的API接口創(chuàng)建一個(gè)markers用于在地圖相應(yīng)坐標(biāo)上標(biāo)記當(dāng)前位置。
var iMarkers=new OpenLayers.Markers(“Markers”);
var icon=new OpenLayers.Icon(‘man.ico’, size, offset);
iMarkers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(lon,lat),icon));
其中l(wèi)on和lat是獲取的經(jīng)度和緯度,icon是在地圖上展示坐標(biāo)點(diǎn)的標(biāo)記圖片。
圖2 小班外業(yè)調(diào)查系統(tǒng)功能模塊
3.2 數(shù)據(jù)查詢
此模塊主要實(shí)現(xiàn)小班屬性查圖和小班圖查屬性兩部分功能,屬性數(shù)據(jù)和空間數(shù)據(jù)之間的關(guān)聯(lián)通過屬性數(shù)據(jù)中的FID和空間數(shù)據(jù)中標(biāo)簽字段進(jìn)行關(guān)聯(lián)實(shí)現(xiàn)。實(shí)現(xiàn)圖查屬性功能首先要建立一個(gè)popup:
popup = new OpenLayers.Popup.FramedCloud();
通過feature.attributes.name獲取小班標(biāo)簽中的值,通過此值在數(shù)據(jù)庫中查詢相應(yīng)FID的屬性數(shù)據(jù),將查詢出來的數(shù)據(jù)編輯成HTML[9]格式的數(shù)據(jù)寫入相應(yīng)的description字段中。關(guān)鍵程序如下:
description = 相應(yīng)的HTML描述;
popup = new OpenLayers.Popup.FramedCloud(“chicken”,
feature.geometry.getBounds().getCenterLonLat(),
null, description, null, true, onPopupClose);
實(shí)現(xiàn)屬性查圖功能,首先要得到當(dāng)前屬性數(shù)據(jù)的FID,通過FID查找空間數(shù)據(jù)中對(duì)應(yīng)標(biāo)簽中值的小班,創(chuàng)建SelectFeature并設(shè)置相應(yīng)的小班高亮顯示,將highlightOnly的值設(shè)置為true。
var highlightCtrl = new OpenLayers.Control.SelectFeature(bou, {
highlightOnly: true
});
3.3 小班要素勾繪
小班外業(yè)調(diào)查要素勾繪利用OpenLayers提供的DrawFeature接口直接在GIS平臺(tái)上手動(dòng)繪制,這種方法只能繪制出小班的大概形狀,不能精確的表達(dá)小班邊界的精確位置,小班外業(yè)采集系統(tǒng)采用采集GPS定位坐標(biāo)點(diǎn)來勾繪小班邊界,這樣就大大的提高了小班位置的精確性。首先要采集小班邊界的GPS坐標(biāo)點(diǎn),利用phoneGap平臺(tái)的Geolocation接口對(duì)小班邊界GPS坐標(biāo)點(diǎn)進(jìn)行采集,利用geolocation.watchPosition來跟蹤GPS坐標(biāo)數(shù)據(jù),系統(tǒng)采用3秒記錄一次:
var options = {timeout: 3000};
watchID = navigator.geolocation.watchPosition(onSuccess, onError, options);
每采集成功一個(gè)坐標(biāo)點(diǎn),都會(huì)調(diào)用onSuccess方法,可在onSuccess中將該坐標(biāo)點(diǎn)勾繪在小班地圖上。如果該點(diǎn)是起點(diǎn),則以點(diǎn)的形式呈現(xiàn),其余的點(diǎn)都將以終點(diǎn)的形式呈現(xiàn),第一要與前一個(gè)點(diǎn)相連接,第二要與起點(diǎn)想連接,形成一個(gè)閉合的曲面,保存成面要素。
var draw = new OpenLayers.Control.DrawFeature();
draw.insertXY(lon, lat);
坐標(biāo)點(diǎn)采集完成后,將坐標(biāo)點(diǎn)集合保存成KML格式的地理信息數(shù)據(jù),保存在地理信息空間數(shù)據(jù)的小班圖層中。
3.4 小班要素糾偏、合并與分離
在小班外業(yè)調(diào)查系統(tǒng)的GIS平臺(tái)中的小班修改包括小班邊界糾偏、小班合并與小班分離,通過OpenLayers的接口EditingToolbar的修改工具對(duì)小班邊界進(jìn)行糾偏和空間數(shù)據(jù)的編輯:
Var edit = new OpenLayers.Control.EditingToolbar();
對(duì)于小班邊界的糾偏,將糾偏后的空間數(shù)據(jù)保存在KML小班圖層中即可,而小班的合并與分離是將多個(gè)小班編輯的問題,所以需要對(duì)小班對(duì)應(yīng)的屬性數(shù)據(jù)進(jìn)行重新編輯。小班的合并是將多個(gè)小班合并成一個(gè)小班,對(duì)于這多個(gè)小班的屬性數(shù)據(jù)可能是不完全一樣的,例如小班面積、蓄積等采用多值相加的原則。小班的分離是將一個(gè)小班分割為多個(gè)小班,小班面積、蓄積等屬性采取按小班分割后的面積比例進(jìn)行分配。
3.5 屬性數(shù)據(jù)與空間數(shù)據(jù)的導(dǎo)入導(dǎo)出
基于Android的小班外業(yè)采集系統(tǒng)需要的空間數(shù)據(jù)和屬性數(shù)據(jù)存放在移動(dòng)設(shè)備的sdcard指定的目錄下,空間數(shù)據(jù)是KML格式的數(shù)據(jù),屬性數(shù)據(jù)是XML格式的數(shù)據(jù)[10]。
利用Openlayers的Vector接口將空間數(shù)據(jù)導(dǎo)入到小班外業(yè)調(diào)查系統(tǒng)中,核心程序如下:
var bou = new OpenLayers.Layer.Vector(“KML”, {
strategies:[new OpenLayers.Strategy.BBOX(),saveStrategy],
protocol: new OpenLayers.Protocol.HTTP({
url:“file:///storage/sdcard0/newFile/iSubcompartment.kml”,
format: new OpenLayers.Format.KML({maxDepth: 2})
})
將XML格式的屬性數(shù)據(jù)導(dǎo)入到SQLite數(shù)據(jù)庫中,需要先解析XML數(shù)據(jù),提取相應(yīng)小班字段的值利用SQL語句將數(shù)據(jù)插入到SQLite數(shù)據(jù)庫中:
executeSql(‘INSERT INTO XBSJ(V1,V2,……,Vi)VALUES(X1,X2,……, Xi)’);
小班外業(yè)采集完成后,空間數(shù)據(jù)的導(dǎo)出利用phoneGap的FileWriter接口將編輯完成的空間數(shù)據(jù)寫入相應(yīng)的文件夾中:
iFile=fileSystem.root.getDirectory(“iSubcompartment”, {create : true,
exclusive : false}, writerFile, fail);
iFile.getFile(“Subcompartment.xml”, {create : true,exclusive : false}, gotFileEntry, fail);
writer.write(xmlText);
空間數(shù)據(jù)的導(dǎo)出將SQLite數(shù)據(jù)庫中的數(shù)據(jù)讀取出來解析成XML格式的數(shù)據(jù),利用phoneGap的FileWriter接口將文本寫入相應(yīng)的XML文件中。
3.6 數(shù)據(jù)格式轉(zhuǎn)換
Android移動(dòng)設(shè)備端和服務(wù)器端之間的數(shù)據(jù)格式轉(zhuǎn)換是雙向的,即服務(wù)器端的數(shù)據(jù)格式向移動(dòng)端轉(zhuǎn)換和移動(dòng)端數(shù)據(jù)格式向服務(wù)器端轉(zhuǎn)換。服務(wù)器端的數(shù)據(jù)是屬性數(shù)據(jù)和空間數(shù)據(jù)都集成在一個(gè)shapfile格式的文件中,利用ArcGIS提供的ArcToolbox將shapfile格式的數(shù)據(jù)轉(zhuǎn)換為KML格式的數(shù)據(jù),此時(shí)的KML數(shù)據(jù)包括空間數(shù)據(jù)和屬性數(shù)據(jù),但屬性數(shù)據(jù)存放在KML數(shù)據(jù)的標(biāo)簽中,標(biāo)簽中保存的是HTML格式的屬性數(shù)據(jù),根據(jù)小班數(shù)據(jù)的數(shù)據(jù)量大、字段多等特點(diǎn),這種屬性數(shù)據(jù)格式在移動(dòng)端不容易管理,因此,可將標(biāo)簽中的屬性數(shù)據(jù)解析并轉(zhuǎn)換為移動(dòng)端支持的數(shù)據(jù)格式,由于Android的安全機(jī)制的限制,不能直接拷貝SQLite數(shù)據(jù)庫的數(shù)據(jù),所以采用XML數(shù)據(jù)進(jìn)行中轉(zhuǎn),在服務(wù)器端將屬性數(shù)據(jù)轉(zhuǎn)換成XML格式的數(shù)據(jù),將此XML格式的數(shù)據(jù)存放系統(tǒng)指定的目錄下,在Android移動(dòng)端解析XML并將數(shù)據(jù)保存在SQLite數(shù)據(jù)庫中??臻g數(shù)據(jù)和屬性數(shù)據(jù)之間可用KML空間數(shù)據(jù)中的字段進(jìn)行關(guān)聯(lián),這樣以空間數(shù)據(jù)和屬性數(shù)據(jù)分開保存的方式,較為適合移動(dòng)端數(shù)據(jù)的管理。
利用小班外業(yè)調(diào)查系統(tǒng)進(jìn)行數(shù)據(jù)采集后,將生成KML格式的空間數(shù)據(jù)和SQLite數(shù)據(jù)庫格式的屬性數(shù)據(jù),需要將這兩種格式的數(shù)據(jù)轉(zhuǎn)換為服務(wù)器端支持的數(shù)據(jù)格式,KML格式的數(shù)據(jù)可通過ArcGIS提供的ArcToolbox將KML數(shù)據(jù)轉(zhuǎn)換為shapfile格式的空間數(shù)據(jù),SQLite數(shù)據(jù)庫格式的屬性數(shù)據(jù)首先轉(zhuǎn)換為XML格式的數(shù)據(jù)保存在系統(tǒng)指定的目錄下,將此XML的數(shù)據(jù)在服務(wù)器端解析轉(zhuǎn)換為SQLServer支持的數(shù)據(jù)。因此,可在服務(wù)器保存了一套完整的小班數(shù)據(jù)。
通過上述對(duì)系統(tǒng)的設(shè)計(jì)開發(fā)工作,得到基于Android的小班外業(yè)調(diào)查系統(tǒng),該系統(tǒng)能夠滿足小班外業(yè)調(diào)查工作的業(yè)務(wù)需求,方便用戶的操作。系統(tǒng)在平板電腦上的運(yùn)行效果如圖3和圖4所示。其中,圖3是通過系統(tǒng)進(jìn)行小班屬性數(shù)據(jù)調(diào)查的運(yùn)行界面,圖4是系統(tǒng)中圖查屬性功能的展示。
圖3 小班調(diào)查界面
圖4 圖查屬性
基于Android系統(tǒng)的小班外業(yè)調(diào)查系統(tǒng)包括屬性數(shù)據(jù)和空間數(shù)據(jù)兩部分的數(shù)據(jù)采集。屬性數(shù)據(jù)的采集實(shí)現(xiàn)了樣地、標(biāo)準(zhǔn)地、角規(guī)等不同方法的調(diào)查;空間數(shù)據(jù)實(shí)現(xiàn)了數(shù)據(jù)的游覽、縮放、小班編輯、小班糾偏、小班合并與分離等功能。根據(jù)小班外業(yè)調(diào)查的內(nèi)容和流程設(shè)計(jì)了系統(tǒng)數(shù)據(jù)庫結(jié)構(gòu)、系統(tǒng)的工作流程以及系統(tǒng)功能模塊等,給出了系統(tǒng)實(shí)現(xiàn)關(guān)鍵技術(shù)的思路流程和關(guān)鍵代碼。該系統(tǒng)利用PhoneGap平臺(tái)搭建開源WebGIS,能夠使用離線地圖進(jìn)行小班外業(yè)調(diào)查,對(duì)森林資源調(diào)查具有重要的實(shí)際應(yīng)用價(jià)值,對(duì)在Android系統(tǒng)上構(gòu)建開源GIS的研究具有一定的參考價(jià)值和借鑒意義。
[1] 黨秋偉,王懿祥,徐富,等.基于WebGIS和二類調(diào)查數(shù)據(jù)的單株采伐系統(tǒng)的開發(fā)[J].東北林業(yè)大學(xué)學(xué)報(bào),2012,40(10):143-147.
[2] Puder A, Antebi O. Cross-Compiling android applications to iOS and Windows phone 7[J]. Mobile Networks & Applications,2013,18(1):3-21.
[3] 劉天悅,吳保國.基于開源WebGIS的“三網(wǎng)”綠化工程信息服務(wù)系統(tǒng)研建[J].東北林業(yè)大學(xué)學(xué)報(bào),2011,39(8):124-128.
[4] Lv Junyan, Xu Shiguo, Li Yijie. Application research of embedded database SQLite[J]. Wseas Transactions on Computers,2009,8(1):539-543.
[5] 張霞,李德仁,朱欣焰.基于GML構(gòu)建WebGIS的研究[J].測繪通報(bào),2003(10):4-7,18.
[6] Huang H S, Li Y, Gaetne G. An SVG-based method to support spatial analysis in XML/GML/SVG-based WebGIS[J]. International Journal of Geographical Information Science,2011,25(10):1561-1574.
[7] 孟憲宇.測樹學(xué)[M].北京:中國林業(yè)出版社,2009.
[8] 陳春,張樹文,徐桂芬.GIS中多邊形圖拓?fù)湫畔⑸傻臄?shù)學(xué)基礎(chǔ)[J].測繪學(xué)報(bào),1996(4):27-32.
[9] Anthes G. HTML5 leads a web revolution[J]. Communications of the ACM,2012,55(7):16-17.
[10] 宋宏光,王霓虹,王健.基于J2EE的“數(shù)字林業(yè)”服務(wù)平臺(tái)的構(gòu)建[J].東北林業(yè)大學(xué)學(xué)報(bào),2009,37(8):95-96,99.
Development of Subcompartment Investigation System Based on Android System/
Zhu Yu, Wu Baoguo
(Beijing Forestry University, Beijing 100083, P. R. China)//Journal of Northeast Forestry University.-2014,42(8).-133~137,151
For subcompartment survey of forest resources outside the industry survey questions, we discussed the Android operating system that supports GPS in mobile devices PhoneGap platform to build forest resources subcompartment outside the industry survey system technology and methods. We degined a subcompartment survey database structure, OpenLayers Open Source GIS implementation using GPS coordinates acquisition and display, feature editing subcompartment, subcompartment elements merge and split, attribute data and spatial data import and export, data format conversion method, and other core functions of the core code. We developed the system to achieve a subcompartment editing, subcompartment correction, subcompartment merge the split, sample editing, and data acquisition functions.
Subcompartment survey; Android; OpenLayers; PhoneGap
1) 國家高技術(shù)研究發(fā)展計(jì)劃(863計(jì)劃)項(xiàng)目(2012AA102003)。
朱煜,男,1988年12月生,北京林業(yè)大學(xué)信息學(xué)院,碩士研究生。
吳保國,北京林業(yè)大學(xué)信息學(xué)院,教授。E-mail:wubg@bjfu.edu.cn。
2013年10月14日。
TP311.1
責(zé)任編輯:潘 華。