姜黎黎
(辽宁省林业调查规划监测院,沈阳 110122)
森林采伐限额制度是《森林法》确立的一项重要的法律制度。森林采伐限额编制是以保护发展森林资源、改善生态环境和推进生态文明、建设美丽中国为宗旨,以森林可持续经营理论为依据,以培育健康、稳定、高效的森林生态系统和提供更多更好的优质林产品为目标。编制限额和实施限额的目的是不断增加森林资源数量和提升森林资源质量,稳步增强森林生态系统的整体功能。森林合理年采伐量测算是森林采伐限额编制的重点内容、核心内容,如何科学地测算采伐限额主伐合理年伐量,将决定着编限单位森林采伐限额编制的成果质量和准确性,意义十分重大[1]。
辽宁省十四五森林采伐限额编制,以森林资源管理“一张图”年度更新成果为基础,严格按照采伐限额的编制原则,区分不同森林类别、树种、林分起源和经营目标,以促进森林结构调整和提高林分质量为目的,合理年采伐量测算是辽宁省“十四五”森林采伐限额编制的重中之重。为提高合理年采伐量测算效率和测算准确性,研究探讨了根据国家林草局《关于编制“十四五”期间年森林采伐限额编制工作的通知》(林资发[2019]99 号)的要求,结合辽宁省实际,充分利用国家林草局下发的森林合理年伐量测算系统测算合理年采伐量,通过Py-thon 编写程序实现森林合理年采伐量测算数据提取及测算方法。
利用Python 的Tkinter 模块,设计工具界面,主要使用了Entry、Button、Label 等控件,如图1。
图1
数据库是测算数据的存储和提取的容器,数据库中一共需要两张数据表:测算数据小班表,测算数据中间表。测算数据小班表用来存储导入的小班表(Excel 格式),测算数据中间表用来存储测算数据小班表标准化处理后的结果,也是数据提取的基础表。
将各编限单位按照编限要求填写好编限单位名称、编限单位代码、是否参与编限、编限权属的小班序列表导入到Access 数据库中的测算数据小班表中。主要是使用Python 的xlrd 模块读取Excel 文件,用pypyodbc 模块写入Access 数据库。xlrd 是Py-thon 读取Excel 的扩展模块,可以实现指定表单、指定单元格的读取。pypyodbc 是一个Python ODBC 库,具有极大的兼容性、可嵌入性和代码移植性,可在多平台下运行。
将测算数据小班表标准化处理,生成数据中间表。
对数据中间表划分编限类型。
3.3.1 编限类型分类
根据国家林草局下发的森林合理年伐量测算系统需要的6 张数据表,对参与编限的森林资源数据进行编限类型划分,一共划分为7 个大类型:一般用材林主伐、短轮伐用材林主伐、公益林更新采伐、抚育采伐、低产(效)林改造、其他采伐、不参与编限,具体划分情况如表1。
表1 森林资源数据编限类型划分
3.3.2 确定编限类型划分条件
根据《森林经营技术规程》DB21/T 706—2013结合辽宁省森林经营实际,确定各编限类型的划分条件,让每个参与编限测算的小班数据都能准确的划分编限类型。
3.3.3 使用Python+pypyodbc,利用SQL 的UPDATE语句对数据中间表划分编限类型。
如公益林生态疏伐的划分语句为:
UPDATE XIAOBAN SET编限类型=′44′WHERE森林类别代码in(′1′,′3′,′4′)And 龄组代码=′2′And 郁闭度>=0.8
按照森林合理年伐量测算系统的要求提取需要的测算数据表,以一般用材林主伐为例(即01.txt),如下:
SELECT * FROM (SELECT 编限单位代码,′233′as 林种代码,szdm,numb,起源代码,林木权属,
ROUND(SUM(IIF(龄组代码=′1′,面积,0)),2) AS幼龄林面积,SUM(IIF(龄组代码=′1′,小班蓄积,0))AS 幼龄林蓄积,
ROUND(SUM(IIF(龄组代码=′2′,面积,0)),2) AS中龄林面积,SUM(IIF(龄组代码=′2′,小班蓄积,0))AS 中龄林蓄积,
ROUND(SUM(IIF(龄组代码=′3′,面积,0)),2) AS近熟林面积,SUM(IIF(龄组代码=′3′,小班蓄积,0))AS 近熟林蓄积,
ROUND(SUM(IIF(龄组代码=′4′,面积,0)),2) AS成熟林面积,SUM(IIF(龄组代码=′4′,小班蓄积,0))AS 成熟林蓄积,
ROUND(SUM(IIF(龄组代码=′5′,面积,0)),2) AS过熟林面积,SUM(IIF(龄组代码=′5′,小班蓄积,0))AS 过熟林蓄积,TZMB
FROM (SELECT 编限单位代码,(select code from codetable where name=trim(优势树种)&起源代码)AS szdm,(select num from codetable where name=trim(优势树种) &起源代码) AS numb,(select mubiao from codetable where name=trim(优势树种)&起源代码)AS tzmb,地类代码,森林类别代码,起源代码,林种代码,郁闭度,龄组代码,面积,小班蓄积,林木权属FROM XIAOBAN WHERE 编限类型in (′10′,′41′,′42′) AND 林种代码in (′233′) AND 起源代码=′2′) GROUP BY 编限单位代码,林木权属,起源代码,szdm,numb,TZMB)
WHERE 幼龄林蓄积+中龄林蓄积+近熟林蓄积+成熟林蓄积+过熟林蓄积>0
使用SQL 多表嵌套查询语句,利用IIF、SUM 函数等提取一般用材林主伐测算数据,最后一个WHERE条件很重要,经过测试发现,如果符合一般用材林主伐条件的某树种,幼龄林蓄积+中龄林蓄积+近熟林蓄积+成熟林蓄积+过熟林蓄积=0的情况下,导入森林合理年伐量测算系统会报错,导致导入失败,所以必须通过WHERE 条件筛选掉等于0的情况。
使用Python 自带的I/O 接口,利用for 循环构建函数逐行读取提取结果并导出为文本文件(01-06.txt)。代码如下:
将导出的文本文件(01-06.txt),导入到森林合理年伐量测算系统中进行测算,计算出该单位的合理年伐量。
综上所述,通过该方法,实现森林合理年采伐量测算数据的一键提取,结合森林合理年伐量测算系统的批量测算,极大地提高了辽宁省“十四五”森林合理年采伐量测算的工作效率,最大程度降低新冠疫情对辽宁省“十四五”森林采伐限额编制工作的影响。