刘建民
(岳阳县林业局,湖南 岳阳 414100)
基于C++的全国通用林木蓄积自动化计算的研究
刘建民
(岳阳县林业局,湖南 岳阳 414100)
在分析研究当前全国各省现行材积模型的基础上,采用C++编程语言,实现了立木材积模型的自动筛选与蓄积求算,同时软件能够适应各省地方标准,也具备适应多种复杂情况下的数据采集要求。
C++;林木蓄积;立木材积模型;自动化
2010年国家林业局启动中央财政补贴森林抚育项目以来,各地抚育间伐计划任务大增,由于时段集中,样地计算量大,使得项目管理工作量大增。为了实现林业办公自动化工作,各省在这方面做了大量有益的偿试,比如河南应用推广的“河南省营造林作业设计系统”,但是由于软件只能应用于某一地区、或是某一类型的蓄积计算,限制了软件的应用范围,因此有必要开发一个通用的标准地计算类软件,其中最基础的工作,则是林木蓄积自动化计算。而现有的林木蓄积计算类软件大多是针对一个地区开发的,缺少通用性,也造成了大量的重复劳动[1-3]。
立木材积模型,又称立木材积式。七十年代中,我国集中整理编制了全国32个针叶树种,21个阔叶树种的大区性二元立木材积模型,农林部于1977年以部颁标准LY 208—1977颁布使用[4]。之后,全国有33个省编制了一元立木材积表、二元立木材积表,涉及76个树种组,也有1~3个省编制了树高级立木材积表[5-6]。同时由于长时间的森林演替及采伐、经营措施的改善,使得现有森林与原来取样的森林所处的自然环境条件产生了巨大的差异,导致材积模型应用误差,因此先后有些省份更新了各树种组的材积数学模型。比如贵州省2011—2012更新了多种树种组的二元立木材积表、地径材积表、相对树高曲线表[7-12],四川省2012年更新了柳杉二元立木材积表[13],也有一个树种单个品种使用不同的参数计算立木蓄积的情况,比如桉树与杨树[14]。所有这些材积数学模型及材积数表的多样性,模型使用的时效性,及各种限制条件,涉及到材积模型筛选的自动化,是当前建立一个是通用林木蓄积自动计算功能最需要解决的难题。
一元立木材积模型(如表1所示)是一种以胸径为自变量的蓄积计算模型,它建立的生物学基础是胸径与树高之间的生物相关关系。在进行标准地测量时,一般只需测量每株立木的胸径,及标准地中2~3株平均胸径立木的树高即可。缺点是,由于不同的立地条件,小气候因素,人为经营技术措施等对林木生长的影响[15],胸径相同的林木,树高变幅也很大,因此一元材积模型一般只在一定区域内使用[16-17],多应用于无相应树种的二元材积模型的地区。
表1 常用一元材积模型[4]序号材积方程 提出者1V=a0+a1d2科泊斯基2V=a0da1伯克霍特3V=a0(a1+a2d)a3[a4+a5(a1+a2d)+a6(a1+a2d)2]a7河南式4V=a0(a1+a2d)a3[a4+a5(a6+a7d)]a8湖北式5V=a0(a1+a2d)a3[a4+a5Lnd]a6湖北式6V=a0+a1d+a2d2+a3d3三项式7V=a0(a1+a2d+a3da4)a5欧美杨一元根径材积8V=a0(a1d)a2[a3+a4(a5+a6d)]a7山本式
二元材积模型(如表2所示)由于增加了树高这个变量,则可以大大提高材积表的精度[18]。为了提高二元材积模型的精度,国内外很多专家学者先后提出了很多二元材积模型,比如山本和藏(1918),迈耶(Meyer,W.H.1949),纳斯伦德(Naslund,M.1947),孟宪宇(1982)等都提出了精度较高的多元非线性模型[19],骆期邦等[20](1992)在山本和藏的基础上提出的可变参数二元材积模型在湖南省,广西省、贵州省[7,11]等多地方得到了应用。在标准地调查中,除了要测量每株立木的胸径外,外要分别针标准地中每个树种分别测量15~20株立木的胸径与相应的树高,然后绘制树高曲线表,再然后我们就能够通过每个树种的树高曲线表,根据各径阶的值,在图中查找出这个径阶相应的条件平均高。一般而言,利用二元立木材积模型计算的林分蓄积精度最高,但是其标准地调查的外业工作量最大。缺点:一是不能直接利用调查数据进行伐后样地的调查,二是实际测量精度会因为树高测量误差有所降低。
其考虑到了一元材积模型的工作量小的优点,又考虑到了各种因素对林分造成的影响,照顾到了二元材积模型估测精度的优点。因此在无相应树种的二元材积模型的地区,可优先考虑树高级材积模型,其次再考虑一元材积模型。
表2 常用二元材积模型序号材积方程 提出者1V=a0+a1d+a2d2+a3dh+a4d2h+a5h迈 耶(1949)2V=a0+a1d+a2d2+a3dh+a4d2h迈 耶(1949)3V=a0+a1d2h+a2d3h+a3d2+a4d2hlgd孟宪宇(1982)4V=a0+a1d2+a2d2h+a3h+a4dh2孟宪宇(1982)5V=a0da1e(a2h-a3/h)寺崎渡(1920)6V=a0+a1d2h+a2d3h+a3d2hlgh孟宪宇(1982)7V=a0da1ha2山本和藏(1918)8V=a0+a1d2h斯泊尔(1952)9V=d2(a0+a1h)奥盖亚(1968)10V=d2h/(a0+a1d)高田和彥(1958)11V=a0da1h(3-a2)德威特(1937)12V=a0(hd)a1d2h松柏尔(1948)13V=a0(d2h)a1斯泊尔(1952)14V=a0d2h+a1d3h+a2d2hlgd赵克升、周沛村等(1973)15V=a0d2h+a1d3h+a2d2+a3d2hlgd赵克升(1974)16V=a0d2h斯泊尔(1952)17V=a0d2e(a1+a2/h)寺崎渡(1920)18V=a0da1+a2a3d+a4h()()ha5+a6a7d+a8h()()骆期邦、宁辉等(1992)[20]19V=a0(a1+a2d)a3ha4河南式
地径材积模型是通过伐根直径(地径或根径)估测林木蓄积的一种计算方法,其实质也是一元材积模型。有的地区以距地面0.1 m高处的树干直径(简称地径)[8,10],有的地区以树根与树干结合部位的直径(简称根径)[24-26]为计算依据,而略有不同。
在林木被采伐后,采伐木的胸径与树高无法实测的情况下,一般只能通过测量被采伐木伐桩的直径,在一定误差范围内估测被伐林木蓄积。它是核查森林采伐量、进行伐区检查验收的依据之一,在处理盗伐、滥伐林木案件中可以起到定性量刑的作用[27]。因此地径材积模型主要应用于被采伐木的蓄积测算。
地径—胸径回归模型:伐后被采伐木的测量中,在没有地径材积模型情况下,一般可以通过地径—胸径回归模型,由地径求算胸径,再然后应用一元材积模型求算立木蓄积。地径到胸径的换算式一般应用于伐后,采伐木的求积。
胸径—树高回归模型:用于求算某个胸径的树高,然后利用二元材积模型求算蓄积。
以上6个模型分类可以看出树高级立木材积模型、地径材积模型、地径—胸径回归模型、胸径—树高回归模型都是一元数学模型,相对树高曲线模型为三元数学模型。
在不同的地区,由于气候、土壤立地等自然条件的不同使得即使是同一树种,在不同地区材积计算模型的参数也不相同,比如黑龙江国有林区根径胸径回归模型[26],全省将国有林区划划分为小兴安岭北坡、小兴安岭南坡、完达山林区、张广才岭林区4个区域,其中每个区域包括数量不等的林业局,同一树种4个林区参数各不相同。也有一些地区与行政县域有自己专用的材积模型。为了应对各种复杂情况,可以将材积模型的应用范围按南北方、林业大区、省、市、县五级(按6位行政代码)方式进行使用范围限定。在进行材积式筛选的时候按照县级、市级、省级、林业大区、南北方的优先级顺序进行。
一般而言,各地区会根据针阔叶类型、树种组、树种、品种的划分详细程度不同,分别建立各自的材积数学模型,比如杉木分类比较简单,常按树种组作为划分单位建立材积模型[7],而杨树材积模型分类比较复杂,在湖北省[28]、河南省[29]只颁布了杨树组的材积模型,而在河北省则以品种或品种类作为材积模型使用的选择依据,分为北京杨、加拿大杨(含沙兰杨)、毛白杨、速生杨(包括107号杨、108号杨、中林46号杨、波兰杨、廊坊杨、山海关杨等)、青杨(包括小叶杨、青杨、二青杨等河北本土品种)5个杨树材积模型[14]。
为了适应材积模型受树种、品种限制的复杂性,我们对树名的ID进行了如下的限定:一是树名的ID最长由“XXXNNMMM”7位数字组成,X表示树种组代码、N表示树种代码、M表示品种(类)代码,针阔叶类型用另外的数据表示;二是树名的选择按ID长度来确定优先级顺序,比如品种(类)﹥树种﹥树种组。
由于各地区标准的更替,使得各类材积模型存在使用时间限制的问题,符合使用时间段的模型则可以入选。
每一个材积模型的建立,总在某个方面存在一个取样范围(比如胸径、树高)[14,28],只是对这个范围数据的仿真与回归,因此可用胸径下限或上限表示,如果没有明确限制使用范围时用0表示。
另外模型筛选在树高级、林分起源等方面的限制,也采取符合则可以入选的原则。
对于一株被测木(CFTreeVisual),我们可以通过上一节的模型筛选方法,筛选出蓄积(含二元式、一元式地径式等)、树高、胸径计算公式,保存在公式表类“CFunctionTable”中备用,并以其CalcM()成员函数完成蓄积计算功能。程序执行时,依据被测木所能提供直径(dD)与树高(dH_Meas)取值、及筛选出的备用公式,进行最适合公式取舍与优化。当dD大于零时,表示数据为胸径值,则执行CalcM1模块与CalcM2_1模块;当dD小于零时,则执行CalcM3模块与CalcM4模块。各模块的具体意义在“相关流程图”一节具体说明。
class CFunctionTable{
public:
CFCutFunction* mpfM_2;
CFCutFunction* mpfM_D130;
CFCutFunction* mpfM_D10;
CFCutFunction* mpfH_D130;
CFCutFunction* mpfH_D10;
CFCutFunction* mpfH_RH;
CFCutFunction* mpfD;
};
void CFunctionTable::CalcM(const CFPlant& fp,
CFTreeVisual& ftv,double dLotAvD130,
double dLotAvH){
ftv.mCube=0;
double dH_Meas;//树高测量值
double dH_Second;
double dD,dM=0;
if(fp.IsError()) return false;
dH_Meas=ftv.GetH_Measure();
dH_Second=ftv.GetH_Normal();
dD=ftv.GetD_Measure();
if(dD==0) return false;//地径/胸径不能为零
if(dD >0){
if(ftv.GetD_130()>0)dD=ftv.GetD_130();
if(dH_Meas>0){
dM=CalcM1(dD,dH_Meas);
}else{
dM=CalcM2_1(dD,dLotAvD130,dLotAvH,dH_Second);
}
}else{//D<0
dM=(dH_Meas <=0) ?CalcM3(dD,0) :CalcM4(dD,dH_Meas);
}
//(省略…)
}
通用林木蓄积自动化计算涉及到两个数据库,一是公式名数据库(见表3),用于管理当前国内外学者发表的各类数学模型;二是公式参数数据库(见表4),用于管理部颁,及各地区颁布的材积标准中的模型参数。
表3 公式名数据库结构字段名数据类型说明编号整型公式名文本公式的名称公式ID整型一般用4位数表示形如“XYNN”发表年度整型公式作者的发表年度自变量数整型公式中自变量类型的个数参数个数整型公式中参数个数备注文本公式引用参考来源
表4 公式参数数据库结构字段名数据型说明编号整型公式序号用途ID整型用二位数表示,其中十位数,表示公式主要用途。各值分别如下:02求胸径,10求蓄积,11求蓄积(胸径式),12求蓄积(地径式),13求蓄积(二元式),20求全高,24相对树高式求全高地区ID长整型1~6位整数,表示公式使用的行政区域或中国林业区划地域范围。起源整型林分起源D下限双精度公式参数的胸径使用范围D上限双精度公式参数的胸径使用范围树高级整型公式参数的树高级使用范围公式名文本公式的名称,如山本式,起标识作用公式ID 整型 命名规范参见“公式名数据库结构”表参数列表 文本 各公式的参数列表,按参数在数学模型中出现的顺序依次排列发布年月长整型公式发表的年月年月上限长整型公式的使用时间上限备注文本公式的来源说明 注:本数据库中,0值表示无限制,-1值表示本字段不作为本条公式的筛选条件
公式描述类为CFCutFunction,包含本条公式的应用范围,其中的CFCutFunctionBase为实际的公式,包含公式计算式结构与参数集。
class CFCutFunction{
public:
long mlIndex; //序号
CFCutFunctionBase* mpFB;//公式
long mlRegionID; //地区ID
long mlPlantID; //树名ID
long mlYearMonMin; //发布年月
long mlYearMonMax; //年月上限
double mdDiaMin; //可应用的最小D
double mdDiaMax; //可应用的最大D
int miHighClass; //树高级
fctFuncPurposeType mePurpose;//求算目标
fctEnvironmentType mEnvi; //环境类型
fctOriginOfStandType mOriT;//起源
};
树描述类为CFTreeVisual,其成员函数Cal_DHMW()完成公式查找,及蓄积计算。
void CFTreeVisual::Cal_DHMW(const CFPlant& fp,
double dLotAverD,double dLotAvH){
CFunctionTable FuncTbl;
gpLstFunc->QueryFunc(gULic.GetCountyID(),fp,(long)giYear*100+giMonth,
mD_Measure,mH_Measure,FuncTbl);
FuncTbl.CalcM(fp,*this,dLotAverD,dLotAvH);
}
通过检查CFunctionTable的mpfM_2,是否存在二元材积公式,如果存在则计算二元材积公式,如果不存在则计算一元材积公式(如图1所示)。
图1 二元材积计算模块(CalcM1)
三元材积计算模块即相对树高曲线模型与二元材积模型的结合算法。通过检查CFunctionTable的mpfH_RH,是否存在相对树—高曲线式,存在时,根据林分平均胸径与树高计算出本径阶的相对树高dH,然后执行CalcM1模块;不存在时,执行CalcM2_2模块(如图2所示)。
图2 三元材积计算模块(CalcM2_1)
通过检查CFunctionTable的mpfM_D130,存在时,执行一元材积公式;不存在时,通过dH_Second判断,由胸径—树高回归模型估算树高,执行CalcM1模块(如图3所示)。
图3 一元材积式模块(CalcM2_2)
通过检查CFunctionTable的mpfM_D130,存在时,执行地径材积公式;否则执行地径—胸径公式估算胸径,然后执行CalcM2_2模块(如图4所示)。
图4 地径材积模块1(CalcM3)
通过检查CFunctionTable的mpfM_D130,存在时,执行地径材积公式;否则执行地径—胸径公式估算胸径,然后执行CalcM1模块,如果估算的胸径不存在则执行CalcM2_2模块(如图5所示)。
图5 地径材积模块2(CalcM4)
我们在VC++平台开发的《森林抚育项目管理软件》HNFYSoft中集成了本文中提到的蓄积计算自动化功能,使用软件能够根据各地区提供的多种材积模型的复杂情况,及各种工作环境,自动选择适合的材积模型进行林分蓄积量的求算。
[1] 吴光明,蒋绍军,李谋勇.伐区调查设计Excel通用模板的制作与应用[J].河南林业科技,2008,28(3):46-48
[2] 王建新.浅谈Excel软件在伐区调查设计中的应用[J].新疆林业,2002,3:39-40.
[3] 邓玉明.Excel软件在林木采伐作业设计角规样地中的应用[J].湖南林业科技,2015,42(3):76-84.
[4] 北京林业大学.测树学[M].北京:中国林业出版社,1987.
[5] 胡杏飞,李文斗,毛行元.我国林业基础数表的历史发展、现状和对策措施[J].华东森林经理,2008,22(2):45-48.
[6] 俞维贤,费成明,胡忠铮,等.DB23/T482—1998黑龙江主要树种树高级立木材积表[S]. 哈尔滨:黑龙江省技术监督局,1998.
[7] 夏忠胜,朱松,罗洪章,等.DB52/T702—2011 杉木二元立木材积表[S].贵阳:贵州省质量技术监督局,2011.
[8] 夏忠胜,朱松,罗洪章,等.DB52/T704—2011 杉木地径材积表[S].贵阳:贵州省质量技术监督局,2011
[9] 夏忠胜,朱松,罗洪章,等.DB52/T710—2011 杉木相对树高曲线表[S].贵阳:贵州省质量技术监督局,2011.
[10] 夏忠胜,朱松,罗洪章,等.DB52/T767—2012 华山松地径材积表[S].贵阳:贵州省质量技术监督局,2012.
[11] 夏忠胜,朱松,罗洪章,等.DB52/T768—2012 华山松二元立木材积表[S].贵阳:贵州省质量技术监督局,2012.
[12] 夏忠胜,朱松,罗洪章,等.DB52/T771—2012 华山松相对树高曲线表[S].贵阳:贵州省质量技术监督局,2012.
[13] 杨洪国,曹昌楷,林江,等.DB51/T1462—2012 柳杉二元立木材积表、单木出材率表[S].成都:四川省质量技术监督局,2012.
[14] 滕起和,张洪泉,史军海,等.DB13/T1147—2009河北省杨树立木材积计算规范[S].石家庄:河北省质量技术监督局,2009.
[15] 李希菲,唐守正,袁国仁,等.自动调控树高曲线和一元立木材积模型[J].林业科学研究,1994,7(5):512-518.
[16] 汪丽,崔彤.林分调查中蓄积量测定方法的探讨[J].内蒙古林业调查设计,2013,36(1):56-57.
[17] 张志伟,亢新刚,杨华,等.长白山3个主要针叶树种材积方程的研究[J].西北林学院学报,2010,25(4):144-15.
[18] 杨龙,殷有,房长有,等.辽宁朝阳地区杨树二元材积表与一元材积表的比较[J].沈阳农业大学学报,2002,33(1):51-52.
[19] 曾永祥.木荷二元材积表的研制[J].福建林业科技,2006,33(2):20-23.
[20] 骆期邦,宁辉,贺东北,等.二元立木材积动态模型研究[J].林业科学研究,1992,5(3):263-270.
[21] 陈启元,舒扬.黔东南州杉木树高级一元活立木材积式研究[J].贵州农业科,2009,37(9):181-184.
[22] 骆期邦,吴志德.相对树高曲线模型的研究和应用[J].中南林业调查规划,1995,14(2):1-8.
[23] 骆期邦,曾伟生,彭长清.可变参数相对树高曲线模型及其应用研究[J].林业科学,1997,33(3):203-210.
[24] 杨占,骆崇云,钟志岩,等.DB21/T1268—2012 根径—胸径、地径—胸径对照表:阔叶树[S].沈阳:辽宁省质量技术监督局,2012.
[25] 尹小康,杨胜涛,高振寰.DB23/T982—2005 市县林区根径材积表[S]. 哈尔滨:黑龙江省质量技术监督局,2005.
[26] 李志海,李忠,崔玉柱,等.DB23/T989—2005 国有林区根径材积便查表[S].哈尔滨:黑龙江省质量技术监督局,2005.
[27] 李凤山,周青,屈志勇,等.贵州省柏木立木一元地径材积表的编制[J].四川林勘设计,2000(3):53-57.
[28] 胡必平,田华,李武,等.DB42/T302—2005 杨树立木材积表[S].武汉:湖北省质量技术监督局,2005.
[29] 夏丰吕,黄强,张慧,等.DB41/T415—2005 欧美杨立木材积及出材率表[S].郑州:河南省质量技术监督局,2005.
ResearchontheAutomaticCalculationofTreeVolumeAllAroundChinaBasedonC++
LIU Jianmin
(Forestry Bureau of Yueyang County,Yueyang 414100,Hunan,China)
With the basis of analysis on current volume models of each provinces in China,used C++ programming language,realized the automatic selection of volume models and calculation. At the same time,the software can adapt to each provincial standard,and also adapt to various complex requirements of the data collection.
C++;tree volume;tree volume model;automation
2015—06—10
2015—07—20
刘建民(1973—),男,湖南省岳阳县人,工程师,主要从事营造林、资源调查。
TP 392;S758.5+1
A
1003—6075(2015)03—0022—07
10.16166/j.cnki.cn43—1095.2015.03.006