基于GIS的森林资源管理信息系统研究与开发
温金奎,罗传文*
(东北林业大学 林学院,哈尔滨 150040)
摘要:基于GIS技术实现热林实验中心森林资源管理信息系统建设与开发,主要使用了Geodatabase模型(面向对象的空间数据库模型)作为森林资源数据库模型,使用Geodatabase数据库统一组织和存储热林实验中心的等高线、高程点、境界、河流、道路、林班、经营班、小班和注记等矢量图层;地形图、主要树种(桉树、马尾松、红椎、西南桦、米老排等)分龄组林木和DEM图像;TIN等数据。采用面向对象的软件开发方法、以集成二次GIS应用软件开发方式,在Visual C++2010软件开发环境中,使用ArcEngine 10.1组件软件产品开发森林资源管理信息系统软件,访问和操作Geodatabase数据库,实现地图的显示、浏览、查询统计和管理分析等功能。
关键词:森林资源管理;GIS开发;Geodatabase;ArcGIS Engine;Visual C++
中图分类号:S 757.3
文献标识码:A
文章编号:1001-005X(2015)02-0031-06
Abstract:The construction and development of the forest resources management information system for Tropical Forest Experimental Center based on GIS technology used Geodatabase model(object-oriented spatial database model)as the forest resource database model and used Geodatabase to organize and storage the features such as lines,elevation points,realm,rivers,roads,forest compartments,management classes,small classes,annotation and other vector layers;topographic maps,the main tree species(eucalyptus,pine,red vertebrae,southwest birch,Laosensish etc.),age groups of trees,DEM image,TIN and other data.The object-oriented software development methods were integrated with secondary GIS application software development methods.In Visual C++ 2010 software development environment,the ArcEngine 10.1 Components were used to develop the forest resources management information system software,from accessing and operating Geodatabase,and to realize map’s display,browsing,query,statistics,management,analysis,and other functions.
Keywords:forest resources management;GIS development;geodatabase;ArcGIS engine;Visual C++
收稿日期:2014-09-19
基金项目:“十二五”国家科技计划课题(2012BAD22B0101-1)
作者简介:第一温金奎,硕士研究生。研究方向:林业遥感与地理信息系统。
通讯作者:*罗传文,博士,教授。研究方向:地理信息系统与空间信息学。E-mail:lcw1234562000@yahoo.com.cn
Development and Study of Forest ResourcesManagement Information System Based on GIS
Wen Jinkui,Luo Chuanwen*
(School of Forestry,Northeast Forestry University,Harbin 150040)
引文格式:温金奎,罗传文.基于GIS的森林资源管理信息系统研究与开发[J].森林工程,2015,31(2):31-36.
中国林科院热带林业实验中心:简称热林中心,成立于1979年9月,是中国林科院直属科学事业性质的林业科学实验基地、科技创新基地和科普教育基地。热林中心地处桂西南的凭祥市,与越南毗邻,实验区横跨龙州、宁明和凭祥二县一市,下辖4个实验场,面积19 000 hm2,有林面积16 000 hm2,森林总蓄积量139万m3。
1数据库建设
Geodatabase是ESRI公司设计的面向对象的空间数据库模型,模型的最终实现建立在关系数据库RDBMS(如Microsoft Access database,Oracle,Microsoft SQL Server,PostgreSQL,Informix,或IBM DB2)上,空间数据与属性数据通过关系(表)进行统一组织、存储[1]。其中个人Geodatabase可在Microsoft Access database上实现,是单机环境下的Geodatabase版本。最终建立个人Geodatabase数据库,用于统一存储热林实验中心森林资源数据。
所有数据以电子数据形式存放于计算机中,分为两类:地理空间数据和非地理空间数据。
地理空间数据:tif格式的覆盖热林实验中心林地范围的1∶10 000地形图扫描文件,shaps格式的地图矢量数据文件——各种点、线、面要素数据,mdx格式的地图文档数据,mdb数据库格式的地图标注数据。
(2)非空间数据:dbf格式的二类调查数据,tif林木图像数据。
为建立Geodatabase数据库,需要对原始数据进行预处理,数据的处理也相应的分为两类:地理空间数据的处理和非地理空间数据的处理。
①地理空间数据处理。1∶10 000扫描地形图投影坐标系统为:高斯-克吕格投影,北京1954坐标系,采用3度带投影,位于36度带,西偏36 500 km。地形图分幅编号为:行列式编号法——所有地形图位于分幅号为F-48-70,F-48-82的1∶10万地形图中,如图1所示。以此为基础对地理空间数据进行处理和使用,地理空间数据处理工具使用ArcGIS Desktop 10.1。
图1 热林实验中心林地1∶10 000地形图覆盖范围与分幅编号 Fig.1 1∶10 000 topographic map coverage and map subdivision number of woodland in Tropical Forest Experimental Center
以地图分幅编号重命名地形图扫描文件(如scan015更名为F-48-70-(61))后进行地形图校正,裁剪,拼接,二值化。最后进行等高线矢量化,赋高程值获取等高线数据,局部高程注记点数据,由等高线生成三维地形数据:TIN数据、DEM图像数据。
对原始数据文件进行重命名(编码),格式转换,版本升级(与ArcGIS 10.1版本同步)、数据文件组织。
②非地理空间数据处理。主要是对林木图像数据进行去背景处理,使用Photoshop软件,处理结果如图2所示。每一主要树种都有“幼树”、“中树”、“成树”3幅图像照片。
图2 林木(左:闽楠苗,中:桉树“中”,右:大王椰“成”) Fig.2 Trees(Left:child minnan, middle:middle-aged eucalyptus,right:adult king coconut)
数据库设计的基本过程就是进行数据库概念设计、逻辑设计、物理设计的过程。数据库概念设计直接反映问题域(应用域)中的实体(对象)及关系,在数据库概念模型设计的基础上,逻辑设计详细描述了数据库概念模型的内容与结构,物理设计依据具体的数据库(Microsoft Access database,Oracle,Microsoft SQL Server,PostgreSQL,Informix,或IBM DB2)详细描述了逻辑模型的实现[2-4]。
对于热林实验中心森林资源数据库概念模型,参考ESRI的森林资源数据概念模型设计和全国森林资源管理信息系统建设标准之县级森林资源数据库建设规范,设计如图3所示。在Microsoft Office Visio 2007采用UML(Unified Modeling Language)统一建模语言完成逻辑设计,在ArcGIS 10.1桌面软件环境中使用ArcCatalog应用软件完成物理设计。
图3 热林实验中心森林资源数据库概念设计 Fig.3 Conceptual design of forest resource database of Tropical Forest Experimental Center
在热林实验中心数据库物理设计过程中,完成了Geodatabase数据库结构的创建。它包括创建Geodatabase数据库文件(mdb格式的数据库文件),5个要素集(Feature Dataset)的创建(本质上是关系表),一个栅格数据集(Raster Dataset)的创建,创建空的要素类(Feature class),创建拓扑,创建表,创建关系类。
最后将“原始数据处理”后的数据导入Geodatabase数据库作为数据库的录入,最终实现数据的统一组织与储存。
2软件开发
软件的开发过程主要包括用户需求分析、系统设计、编码实现和软件测试等内容,它们是对软件开发过程的抽象与概况,可以说任何的软件开发都包含需求分析、设计、实现和测试,但现实的软件开发中又难以进行严格区分[5]。
信息系统是这样的一个系统:它存在于某一组织环境中,由计算机硬件、软件、数据库、人员组成,并为组织环境服务。森林资源管理信息系统是应用GIS技术,为森林资源管理服务的特殊信息系统。
软件的概念是相对于硬件概念的,在这里“软件”概念可以扩展为相对于具体的组织环境、计算机硬件、数据库和用户等概念,是对组织环境、计算机硬件、数据库和用户等特征的反映。
为此,开发这样一个软件系统它集中反映了热林实验中心、计算机、 Geodatabase数据库、组织成员等的需求。它可以运行在PC计算机上,能管理Geodatabase数据库,供某一组织成员使用,为热林实验中心进行科研实验、经营管理服务,需求分析如图4所示。
图4 系统总体需求分析 Fig.4 Overall demand analysis of the system
对于数据库管理的实现,可以选择地理信息系统平台软件实现,而对于数据库应用可以选择以地理信息系统平台软件为基础,进行二次应用软件开发。
系统设计是在需求分析的基础上,对系统的进一步分析与设计,它包括概要设计与详细设计两个步骤,理论上是不涉及具体的技术实现的,但实践中分析设计与具体的实现技术是紧密联系的。森林资源数据库的实现是ArcGIS Geodatabase,而且数据库管理功能通过地理信息系统平台软件ArcGIS 10.1实现,需要分析和设计的是数据库应用功能的分析设计。
森林资源数据库应用软件功能的实现是建立在地理信息系统基础上的,所以森林资源数据库应用软件的分析与设计的主要内容是地理信息系统功能的分析设计,主要模块概要分析设计有:①界面分析设计:简洁,方面,人性化;②地图显示:包括加载地图数据,地图浏览显示,图层管理,图层标注,图层渲染等;③地图编辑:添加,修改,删除地图要素;④地图查询、统计:实现图形,属性的双向查询,用森林资源数据生成林业统计报表;⑤地图分析:主要有图层叠加分析,缓冲区分析等。
详细设计是对概要设计的进一步细化,主要是对象的选择,以及对象间相互关系的建立:这些对象基本上都是地理信息系统平台软件实现的常用对象(已经被分析和设计完成,只需要在应用软件的实现中选择、组织、调用就能实现相应功能)。
实现包括选择具体的开发工具与方式:计算机平台,程序设计语言,开发环境,开发方式,编写程序代码等。对于森林资源管理系统的开发选择的是PC计算机,Windows平台,C++程序设计语言,Visual C++ 2010开发环境,MFC应用程序框架,ArcGIS Engine 10.1地理信息系统软件组件产品进行二次集成应用软件开发。
2.3.1开发工具与方式概述
PC是一种十分流行和广泛使用的电子计算机,用户量最大。Windows操作系统是一种图形化的视窗操作系统,是PC上的主流操作系统,受广大用户喜爱,极具商业价值。C++是一种面向对象的程序设计语言,十分灵活和流行。Visual C++是可视化的C++开发环境,Visual C++2010是Visual C++的一个版本,它是Visual Studio 2010集成软件开发环境的重要组成部分,Visual Studio 2010还包括像VB,C#,J++,F#等语言的开发环境。
在Visual C++2010环境中,可以使用的C++类库有标准的C,C++函数库,标准模板库(STL),还有Windows类库,如MFC(微软基础类库Microsoft Foundation Class),ATL(活动模板库ActiveX Template Library),WTL(视窗模板库,Windows Template Library)。
MFC作为Windows环境下的类库,以类库为基础它又是一种程序开发框架,可以方便开发者快速构建大型的,复杂的Windows应用软件。本次的森林资源管理信息系统使用MFC应用程序框架[6]。
本次的应用程序开发方式是二次集成组件开发方式,用MFC构建主体的应用程序框架,并在其中引入并使用ArcGIS Engine 10.1地理信息系统组件软件产品。ArcGIS Engine 10.1只是ArcGIS Engine的一个版本,比起先前的版本,它的功能得到了增强。
2.3.2应用程序框架的建立与ArcGIS Engine的引入
应用程序的框架由4个对象构成,它们分别是应用程序对象,主帧窗口对象,文档对象,视图对象。在Visual C++2010中使用MFC单文档应用程序向导工具可以很快生成4个对象各自的类,这4个类分别继承于CWinAppEx,CFrameWndEx,CDocument,CformView。在2010版本中,这4个类较之先前的版本得到了增强和扩展。在这里可以称应用程序为扩展应用程序,主帧窗口为扩展主帧窗口,文档和视图不变。在程序加载运行的过程中,这4个对象被先后创建(应用程序静态创建,其余都动态创建)作为整个应用软件的框架,管理所有的应用程序资源。
ESRI公司完成了对地理信息系统的需求分析,系统设计,实现与测试,它将整个地理信息系统问题域分解为有限的对象,最终这些对象被实现为组件,ArcGIS Engine就是这样的组件产品。要在用Visual C++ 2010开发的应用程序中使用ArcGIS Engine 10.1,就得在应用程序的源文件中引入ArcGIS Engine 10.1的组件库(组件的集合)。为使用ArcGIS Engine 10.1中的地图控件MapControl,三维地图显示控件ScanControl、GlobleControl,制图控件PageLayoutControl,工具条控件ToolbarControl,内容表控件TOCControl等需要引入多个组件库(组件库之间有关联),源代码为:
//stdafx.h
#import “libid:6FCCEDE0-179D-4D12-B586-58C88D26CA78” no_namespace raw_interfaces_only no_implementation rename(“esriProductCode”,“esriVersionProductCode”)
#import“esrisystem.olb” raw_interfaces_only raw_native_types no_namespace named_guids exclude( “OLE_HANDLE”,“OLE_COLOR”,“UINT_PTR”)rename(“IProgressDialog”,“esriIProgressDialog”)
#import“esrisystemui.olb”raw_interfaces_only raw_native_types no_namespace named_guids exclude( “OLE_HANDLE”,“OLE_COLOR”,“UINT_PTR” )rename(“IProgressDialog”,“esriIProgressDialog”)rename(“ICommand”,“esriICommand”)
#import“esrigeometry.olb”raw_interfaces_only raw_native_types no_namespace named_guids exclude( “OLE_HANDLE”,“OLE_COLOR”,“UINT_PTR” )
#import“esrigeodatabase.olb”raw_interfaces_only raw_native_types no_namespace named_guids exclude( “OLE_HANDLE”,“OLE_COLOR”,“UINT_PTR” )rename(“IRow”,“esriIRow”)rename(“ICursor”,“esriICursor”)
#import“esridisplay.olb”raw_interfaces_only raw_native_types no_namespace named_guids exclude( “OLE_HANDLE”,“OLE_COLOR”,“UINT_PTR” )
#import“esricarto.olb”raw_interfaces_only raw_native_types no_namespace named_guids exclude( “OLE_HANDLE”,“OLE_COLOR”,“UINT_PTR” )rename(“ITableDefinition”,“esriITableDefinition”)
#import“esricontrols.olb” raw_interfaces_only raw_native_types no_namespace named_guids exclude(“OLE_COLOR”,“OLE_HANDLE”)
组件库的引入是通过import语句实现的,import语言是Visual C++对C++的扩展,当然在引入组件库之前得先设置好Visual C++工程项目的编译环境:预编译符号,库文件的位置设置等。
完成组件库的引入后,就可以设计应用程序的主界面,同时也可以在主程序框架中使用组件库中的组件、控件。最终应用程序框架使用ArcEngine组件、控件,运行的主界面如图5所示。
图5 应用程序框架的表示 Fig.5 Representation of the application framework
应用程序框架的主界面采用的是Microsoft Office 2007蓝色背景主题风格,这样的界面简洁,而且操作方面,用户可以根据自己的需求配置工具栏,菜单栏。这种主题风格的界面实际上就是4个主要的对象和ArcEngine控件的表示(或者说是用户接口),其中比较基础的就是扩展应用程序对象和扩展主帧窗口对象。
2.3.3主要系统功能的实现
由于在应用程序框架中引入了ArcEngine10.1的控件(它们关联了许多的组件),通过这些控件、组件,森林资源管理信息系统的编码实现变的比较容易和快速。
地图显示功能主要是由几何对象(Geometry)、符号对象(Symbol)、标注对象(Label)、渲染对象(Renderer)、图层对象(Layer)、地图对象(Map)、显示对象(Display)实现的。用户通过图形用户界面(地图控件)可以进行的操作有:打开地图数据,地图的放大、缩小、漫游,图层管理。关键的程序代码如下:
//控件包装类对象定义为视图对象的成员数据
CMapcontrol1 m_MapCtl;
CToccontrol1 m_TOC;
CToolbarcontrol1 m_MapTool;
//视图对象的OnInitialUpdate函数成员中对地图控件的初始操作
CWnd *pWndCal=GetDlgItem(IDC_MAPCONTROL1);
LPUNKNOWN pUnk=pWndCal->GetControlUnknown();
pUnk->QueryInterface(IID_IMapControl2,(LPVOID*)&m_ipMapControl);
m_ipMapControl->get_Map(&m_ipMap);
LPDISPATCH pDisp=m_MapCtl.getDispatch();
m_TOC.SetBuddyControl(pDisp);
m_MapTool.SetBuddyControl(pDisp);
//视图对象的OnSize成员函数中控制地图控件的显示
CWnd *MapCtl=GetDlgItem(IDC_MAPCONTROL1);
CWnd *TOCCtl=GetDlgItem(IDC_TOCCONTROL1);
CWnd *ToolBarCtl=GetDlgItem(IDC_TOOLBARCONTROL1);
if(MapCtl)
{
CRect rectMap,rectTOC,rectToolBar;
MapCtl->GetWindowRect(&rectMap);
TOCCtl->GetWindowRect(&rectTOC);
ToolBarCtl->GetWindowRect(&rectToolBar);
rectTOC.SetRect(0,0,200,cy);
rectMap.SetRect(200,30,cx,cy);
rectToolBar.SetRect(200,0,cx,30);
TOCCtl->MoveWindow(0,0,rectTOC.Width(),rectTOC.Height());
MapCtl->MoveWindow(200,30,rectMap.Width(),rectMap.Height());
ToolBarCtl->MoveWindow(200,0,rectToolBar.Width(),rectToolBar.Height());
}
其中热林中心4个实验场的分布图显示如图6所示。
其他的每一种功能:地图编辑功能,地图查询、统计功能,地图分析功能都是通过地图控件、内容表控件、工具条控件、三维显示控件、制图控件以及与它们关联的组件实现的,只是它们需要的具体控件、组件有所区别[7-13]。
图6 实验林场分布图 Fig.6 Distribution map of the experimental forest farm
3结论
由于从前人们认识的局限性,仅仅认识到森林对个人、少数人的价值,而忽视了森林的社会价值,生态价值,忽视了森林的生存和发展的需要,即它们自身追求的价值。本质上体现的是一种片面思想,对立思想,静止思想。现今的森林生态系统思想,接近自然林业,可持续发展思想取代了以前的思想,最终认识到森林具有经济价值、社会价值、生态价值。它自身也有生存、发展的需要,也追求着自身的价值。在森林资源管理信息系统开发中就运用生态系统的思想,强调综合整体性,开放性,动态性。因为森林资源管理信息系统它具有生命周期,从出生到死亡,一次次生命周期的重复,就像森林生态系统一样生存、发展着,面向对象思想、面向对象的空间数据库Geodatabase正体现这一点。
所以,本次在森林资源管理信息系统开发中,一方面更加注重了软件工程的思想理论,尤其是面向对象思想方法的使用,另外一方面采用Geodatabase模型和数据库统一存储与管理森林资源数据。由于使用Visual C++2010和ArcGIS Engine10.1进行应用程序集成二次开发难度大,所以在开发中主要采用ArcGIS Engine控件的方式进行原型开发,只形成了森林资源管理信息系统的雏型,但采用
Geodatabase模型和数据库,Visual C++2010和ArcGIS Engine 10.1确实是一次有益的探索,当然也需要更多的研究和尝试。
【参考文献】
[1]秦琳.基于ArcSDE和Geodatabase的森林空间数据库构建研究[J].林业调查规划,2010,35(2):85-88.
[2]祝国祥,许辉.Excel与ArcGIS相结合自动编写森林资源规划设计调查小班号方法初探[J].四川林业科技,2011,32(4):123-125.
[3]史嘉权.数据库系统概论[M].北京:清华大学出版社,2006:10-55.
[4]刘忠诚,张学勇,蒋宇,等.基于GIS的林地“一张图”在森林资源管理中的应用[J].四川林业科技,2013,34(4):104-106.
[5]牛丽平,郭新志,宋强,等.UML面向对象设计与分析基础教程[M].北京:清华大学出版社,2007:7-68.
[6]Jeff Prosise.MFC Windows 程序设计(第2班)[M].北京:清华大学出版社,2007:1-40.
[7]许洋,刘兆刚,赵颖慧,等.基于GIS 的帽儿山林场数字化管理信息系统构建[J].森林工程,2009,25(3):115-119.
[8]何政伟,黄润秋,陈兵,等.林业信息系统体系构建分析[J].成都理工大学学报,2004,31(1):81-85.
[9]刘足良.县级林业综合地理信息系统的建立和应用实践——以浙江省缙云县为例[J].华东森林经理,2013,27(1):57-62.
[10]周洪泽,高心丹,任广宇,等.现有林经营管理系统的技术框架与GIS外壳的研建[J].东北林业大学学报,2000,28(5):35-39.
[11]梁源川,赵颖慧,李凤日,等.组件开发式森林资源GIS中的数据更新[J].东北林业大学学报,2006,34(3):84-86.
[12]蒋汪洋,罗传文,孙海洪,等.基于ArcEngine的帽儿山林场GIS开发系统[J].东北林业大学学报,2010,38(10):115-118.
[13]李超,罗传文.基于ArcGIS Engine的森林资源管理系统的设计与实现[J].森林工程,2013,29(1):15-20.
[责任编辑:刘美爽]