朱 煜 吴保国
(北京林业大学,北京,100083)
基于Android的小班外业调查系统研建1)
朱 煜 吴保国
(北京林业大学,北京,100083)
针对森林资源调查中小班外业调查问题,探讨了采用Android操作系统、支持GPS的移动设备中利用PhoneGap平台构建森林资源小班外业调查系统的技术与方法。给出了小班调查数据库结构设计,采用OpenLayers开源GIS实现GPS坐标获取与展示、小班要素编辑、小班要素合并与分割、属性数据与空间数据的导入导出、数据的格式转换等核心功能的方法以及核心代码。设计开发的系统实现了小班编辑、小班纠偏、小班合并于分割、样地编辑、数据采集等功能。
小班调查;Android;OpenLayers;phoneGap
小班外业调查是森林资源管理的主要工作之一,利用信息化手段进行小班外业调查能够减轻传统小班调查数据内业录入的工作量,从而提高小班外业调查的正确性和工作效率[1]。据IDC(Internet Data Center)的数据报道,2013年,Android操作系统占据了全球移动操作系统市场份额的59%[2]。因此,研究基于Android的小班外业调查系统具有实际应用价值。
基于Android的应用软件开发模式可以分为Web App、Hybrid App、Native App。采用Hybrid App开发模式的Android App可以利用PhoneGap平台在系统中搭建开源WebGIS,可供选择的WebGIS平台也有很多,例如OpenLayers、GoogleMap等。其中,OpenLayers[3]是开源GIS平台,提供了功能丰富的API,能够实现小班空间数据的展示、编辑等功能,满足小班外业调查系统的需求,并且可降低开发与使用费用。为了系统中使用离线地图,系统使用KML格式的地理信息数据。以Hybrid App模式开发Android App,可以利用PhoneGap、AppCan、Titanium等开发平台,其中PhoneGap最早推出,成功案例也较多,例如:Trip Case、Untapped等,所以本系统采用PhoneGap框架。因此,本系统利用PhoneGap平台搭建开源GIS OpenLayers,使用SQLite数据库存储小班采集的属性数据[4],将小班空间数据存储为KML格式的数据[5-6]。
1.1 小班调查的内容
我国的森林调查根据调查目标分为3类。其中二类调查又称为森林资源规划设计调查,以县级行政区域、国有林场等为主要调查对象,以小班为基本调查单位[7],主要包括区划、调查、资源统计分析3大部分。小班调查的因子主要有小班的坡度、坡向、坡位、土壤等立地因子和林木起源、树种组成、平均年龄、平均直径、平均高、蓄积量等测树因子,其中小班的测树因子是通过在小班中设置的调查样地、标准地或角规样地进行调查后,通过计算得到。
1.2 小班调查数据库设计
小班外业调查的数据字段较多,比如小班数据表中就有上百个因子字段,所以系统功能设计不仅要考虑到数据因子字段的全面性,还要考虑到数据冗余、系统开发难度等问题。系统核心的数据库表结构如下。
(1)小班调查数据。由于一个小班中可能出现多种树种,为了减少冗余数据,数据库采用将小班调查因子存储在2个关系中,关系XBSJB存储小班的基本信息,关系SZZCB存储小班的树种组成,两个关系之间用xbbh来关联,关系模式(只列出主要字段,其它省略)如下:
XBSJB(FID,xbbh,ldsyq,lmsyq,……,dcsj)
SZZCB(xbbh,sz)
其中,FID是小班要素编号,xbbh是小班编号,ldsyq是林地所有权,lmsyq是林木所有权,dcsj是调查时间,sz是树种。
(2)样地与标准地调查数据。样地与标准地的数据结构基本是一样的,为了减轻数据库结构的复杂度,数据库采用将样地表和标准地表都存放在表YDDCB结构中,主键为小班编号和样地号,增加样地类别字段来区分样地与标准地,关系MMJCB存储样地中样木的信息,主键为小班编号、样地号和样木号,关系模式(只列出主要字段,其它省略)如下:
YDDCB(FID,xbbh,ydh,ydlb,……,dcsj)
MMJCB(xbbh,ydh,ymh,sz,xj,sg,……,dcsj)
其中,xbbh为小班编号,ydh为样地号,ydlb为样地类别,ymh是样木号,xj是胸径,sg是树高。
(3)角规调查数据。角规调查数据存储在2个表中。角规立地因子数据存放在表JGDCB中,角规绕测数据存放在表JGRCB中,关系模式如下:
JGDCB(FID,xbbh,ydh,ydlb,ydmj,pd,px,……,dcsj)
JGRCB(xbbh,ydh,ymh,sz ,cljs,xj,sg)
其中,xbbh为小班编号,ydh为角规样地号,ymh是样木号,pd是坡度,px是坡向,cljs是测量计数,xj是胸径,sg是树高。
1.3 空间数据结构设计
系统的空间数据库采用KML格式的地理信息空间数据,在标签中存储小班的FID用来与属性数据进行数据的关联,在标签中存储小班的描述信息,可以在此标签中嵌套HTML语言做小班要素的描述,在标签中存储小班边界特征点的坐标。小班的空间数据基本格式实例如下:
121.488,53.332,0 121.488,53.332, 0,……, 121.481,53.331,0
2.1 系统开发技术基础
系统开发的技术基础通过以下几个方面来搭建:
①Android开发环境搭建。JDK安装,Eclipse安装,Android SDK安装,ADT安装,创建AVD。
②PhoneGap开发平台搭建。下载PhoneGap并解压,在系统开发工程包中创建两个文件夹:/libs和/assets/www。将解压出来的PhoneGap中的phonegap.js文件复制到/assets/www目录下、phonegap.jar文件复制到/libs目录下,再把xml目录复制到android项目的res目录下。修改AndroidManifest.xml文件中的配置,使开发环境具有相应的API权限。再修改src文件夹下的Java主文件:添加import com.phonegap.*、将类改成继承为DroidGap、删掉import android.app.Activity、把setContentView()这行替换为super.loadUrl(“系统首界面地址”);
③引入OpenLayers。下载OpenLayers并解压,把OpenLayers.js文件放在/assets/www/JS目录下。
④系统开发。在/assets/www目录下创建html文件,可首先创建一个与super.loadUrl中指向的一个html文件,即系统的首界面。
2.2 系统工作流程
根据小班调查的流程,系统的业务流程包括数据准备、下载数据、数据采集、数据上传、数据转换五个过程,系统业务流程图如图1所示。
①数据准备。将森林资源管理系统中的数据转换为Android移动设备支持的数据格式。需要转换的数据有属性数据和空间数据,属性数据将SQLServer支持的数据格式转换为Android系统中SQLite支持的数据格式;空间数据格式转换是将ArcGIS支持的shapfile数据转换为KML格式的地理信息空间数据。
②数据下载。将转换后的数据通过无线网络下载到移动设备的储存卡中的相应位置。
③小班外业数据采集。可分为森林资源属性数据采集和空间数据采集两部分。属性数据的采集可通过两种方法进行,第一种将测量得到的森林资源属性数据通过系统录入到数据库中;第二种方法是在地图操作界面,点击“资源调查”按钮,然后再点击相应的小班地图就能直接进行资源调查。空间数据采集有两种方法,一种是手动在小班图层上画出小班的边界,然后保存图层,这种方法可能会因为工作人员的操作失误等问题造成数据误差较大,所以这种方法比较适用于小班边界纠偏;另一种方法是,利用系统的定位导航功能,将实时采集到的GPS数据拟合成行走轨迹,并实时的在地图上展示,工作人员绕着小班行走一圈,将会生成一个轨迹文件GPX,将此GPX文件转换为KML文件,利用采集的坐标点可拟合成小班面,并在小班图层上展示。做样地调查时,需要新建一个样地图层,然后可在新图层上直接勾绘样地,完成后保存就会生成新建的样地图层。
④数据上传。将采集到的森林资源小班数据通过无线网络上传到服务器上。
⑤格式转换。在服务器上得到采集的数据后,再对采集到的数据进行格式转换,将数据转换成服务器软件支持的数据格式。
图1 基于Android的小班外业调查系统业务流程
2.3 系统功能设计
根据小班外业调查的业务需求,将系统划分为属性数据和空间数据两大部分,功能模块图如图2所示。
属性数据部分主要包括样地调查、标准地调查、角规调查和小班调查等模块。通过样地调查、标准地调查、角规调查的方法将调查到的数据录入到系统中。在系统中调查得到的数据都具有录入、游览、更改、删除等管理功能,同时管理的记录也会保存在数据库中。通过小班数据模块的游览功能可链接到相应小班的空间数据模块,实现属性查图的功能。
空间数据部分主要包括小班位置定位、小班地图游览、地图缩放、面积测量、图查属性、小班编辑、小班纠偏、小班合并与分割[8]等模块。用户根据需求可游览地图中的小班,定位到要调查的小班。进行小班调查时,可在地图上进行小班边界的勾绘以及小班边界的纠偏,也可以使用GPS导航功能围着小班边界绕测一圈生成小班边界。可通过地图界面直接查看小班要素的概要信息,并能链接到属性数据模块查看详细信息,实现图查属性的功能。
3.1 GPS坐标获取与展示
GPS坐标的获取需要Android移动设备有GPS模块的支持,调查点的经纬度坐标利用PhoneGap平台提供的GPS数据接口获取,关键程序如下:
navigator.geolocation.getCurrenPosition(getPositionSuccess,getPositionError,
{maximumAge:3000, timeout:5000,enableHighAccuracy:true});
当前位置的纬度:position.coords.latitude;
当前位置的经度:position.coords.longitude;
当前位置的海拔高度:position.coords.altitude;
调查点的经纬度坐标利用OpenLayers的API接口创建一个markers用于在地图相应坐标上标记当前位置。
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));
其中lon和lat是获取的经度和纬度,icon是在地图上展示坐标点的标记图片。
图2 小班外业调查系统功能模块
3.2 数据查询
此模块主要实现小班属性查图和小班图查属性两部分功能,属性数据和空间数据之间的关联通过属性数据中的FID和空间数据中标签字段进行关联实现。实现图查属性功能首先要建立一个popup:
popup = new OpenLayers.Popup.FramedCloud();
通过feature.attributes.name获取小班标签中的值,通过此值在数据库中查询相应FID的属性数据,将查询出来的数据编辑成HTML[9]格式的数据写入相应的description字段中。关键程序如下:
description = 相应的HTML描述;
popup = new OpenLayers.Popup.FramedCloud(“chicken”,
feature.geometry.getBounds().getCenterLonLat(),
null, description, null, true, onPopupClose);
实现属性查图功能,首先要得到当前属性数据的FID,通过FID查找空间数据中对应标签中值的小班,创建SelectFeature并设置相应的小班高亮显示,将highlightOnly的值设置为true。
var highlightCtrl = new OpenLayers.Control.SelectFeature(bou, {
highlightOnly: true
});
3.3 小班要素勾绘
小班外业调查要素勾绘利用OpenLayers提供的DrawFeature接口直接在GIS平台上手动绘制,这种方法只能绘制出小班的大概形状,不能精确的表达小班边界的精确位置,小班外业采集系统采用采集GPS定位坐标点来勾绘小班边界,这样就大大的提高了小班位置的精确性。首先要采集小班边界的GPS坐标点,利用phoneGap平台的Geolocation接口对小班边界GPS坐标点进行采集,利用geolocation.watchPosition来跟踪GPS坐标数据,系统采用3秒记录一次:
var options = {timeout: 3000};
watchID = navigator.geolocation.watchPosition(onSuccess, onError, options);
每采集成功一个坐标点,都会调用onSuccess方法,可在onSuccess中将该坐标点勾绘在小班地图上。如果该点是起点,则以点的形式呈现,其余的点都将以终点的形式呈现,第一要与前一个点相连接,第二要与起点想连接,形成一个闭合的曲面,保存成面要素。
var draw = new OpenLayers.Control.DrawFeature();
draw.insertXY(lon, lat);
坐标点采集完成后,将坐标点集合保存成KML格式的地理信息数据,保存在地理信息空间数据的小班图层中。
3.4 小班要素纠偏、合并与分离
在小班外业调查系统的GIS平台中的小班修改包括小班边界纠偏、小班合并与小班分离,通过OpenLayers的接口EditingToolbar的修改工具对小班边界进行纠偏和空间数据的编辑:
Var edit = new OpenLayers.Control.EditingToolbar();
对于小班边界的纠偏,将纠偏后的空间数据保存在KML小班图层中即可,而小班的合并与分离是将多个小班编辑的问题,所以需要对小班对应的属性数据进行重新编辑。小班的合并是将多个小班合并成一个小班,对于这多个小班的属性数据可能是不完全一样的,例如小班面积、蓄积等采用多值相加的原则。小班的分离是将一个小班分割为多个小班,小班面积、蓄积等属性采取按小班分割后的面积比例进行分配。
3.5 属性数据与空间数据的导入导出
基于Android的小班外业采集系统需要的空间数据和属性数据存放在移动设备的sdcard指定的目录下,空间数据是KML格式的数据,属性数据是XML格式的数据[10]。
利用Openlayers的Vector接口将空间数据导入到小班外业调查系统中,核心程序如下:
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格式的属性数据导入到SQLite数据库中,需要先解析XML数据,提取相应小班字段的值利用SQL语句将数据插入到SQLite数据库中:
executeSql(‘INSERT INTO XBSJ(V1,V2,……,Vi)VALUES(X1,X2,……, Xi)’);
小班外业采集完成后,空间数据的导出利用phoneGap的FileWriter接口将编辑完成的空间数据写入相应的文件夹中:
iFile=fileSystem.root.getDirectory(“iSubcompartment”, {create : true,
exclusive : false}, writerFile, fail);
iFile.getFile(“Subcompartment.xml”, {create : true,exclusive : false}, gotFileEntry, fail);
writer.write(xmlText);
空间数据的导出将SQLite数据库中的数据读取出来解析成XML格式的数据,利用phoneGap的FileWriter接口将文本写入相应的XML文件中。
3.6 数据格式转换
Android移动设备端和服务器端之间的数据格式转换是双向的,即服务器端的数据格式向移动端转换和移动端数据格式向服务器端转换。服务器端的数据是属性数据和空间数据都集成在一个shapfile格式的文件中,利用ArcGIS提供的ArcToolbox将shapfile格式的数据转换为KML格式的数据,此时的KML数据包括空间数据和属性数据,但属性数据存放在KML数据的标签中,标签中保存的是HTML格式的属性数据,根据小班数据的数据量大、字段多等特点,这种属性数据格式在移动端不容易管理,因此,可将标签中的属性数据解析并转换为移动端支持的数据格式,由于Android的安全机制的限制,不能直接拷贝SQLite数据库的数据,所以采用XML数据进行中转,在服务器端将属性数据转换成XML格式的数据,将此XML格式的数据存放系统指定的目录下,在Android移动端解析XML并将数据保存在SQLite数据库中。空间数据和属性数据之间可用KML空间数据中的字段进行关联,这样以空间数据和属性数据分开保存的方式,较为适合移动端数据的管理。
利用小班外业调查系统进行数据采集后,将生成KML格式的空间数据和SQLite数据库格式的属性数据,需要将这两种格式的数据转换为服务器端支持的数据格式,KML格式的数据可通过ArcGIS提供的ArcToolbox将KML数据转换为shapfile格式的空间数据,SQLite数据库格式的属性数据首先转换为XML格式的数据保存在系统指定的目录下,将此XML的数据在服务器端解析转换为SQLServer支持的数据。因此,可在服务器保存了一套完整的小班数据。
通过上述对系统的设计开发工作,得到基于Android的小班外业调查系统,该系统能够满足小班外业调查工作的业务需求,方便用户的操作。系统在平板电脑上的运行效果如图3和图4所示。其中,图3是通过系统进行小班属性数据调查的运行界面,图4是系统中图查属性功能的展示。
图3 小班调查界面
图4 图查属性
基于Android系统的小班外业调查系统包括属性数据和空间数据两部分的数据采集。属性数据的采集实现了样地、标准地、角规等不同方法的调查;空间数据实现了数据的游览、缩放、小班编辑、小班纠偏、小班合并与分离等功能。根据小班外业调查的内容和流程设计了系统数据库结构、系统的工作流程以及系统功能模块等,给出了系统实现关键技术的思路流程和关键代码。该系统利用PhoneGap平台搭建开源WebGIS,能够使用离线地图进行小班外业调查,对森林资源调查具有重要的实际应用价值,对在Android系统上构建开源GIS的研究具有一定的参考价值和借鉴意义。
[1] 党秋伟,王懿祥,徐富,等.基于WebGIS和二类调查数据的单株采伐系统的开发[J].东北林业大学学报,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的“三网”绿化工程信息服务系统研建[J].东北林业大学学报,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构建WebGIS的研究[J].测绘通报,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] 孟宪宇.测树学[M].北京:中国林业出版社,2009.
[8] 陈春,张树文,徐桂芬.GIS中多边形图拓扑信息生成的数学基础[J].测绘学报,1996(4):27-32.
[9] Anthes G. HTML5 leads a web revolution[J]. Communications of the ACM,2012,55(7):16-17.
[10] 宋宏光,王霓虹,王健.基于J2EE的“数字林业”服务平台的构建[J].东北林业大学学报,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) 国家高技术研究发展计划(863计划)项目(2012AA102003)。
朱煜,男,1988年12月生,北京林业大学信息学院,硕士研究生。
吴保国,北京林业大学信息学院,教授。E-mail:wubg@bjfu.edu.cn。
2013年10月14日。
TP311.1
责任编辑:潘 华。