姜黎黎
(遼寧省林業(yè)調(diào)查規(guī)劃監(jiān)測院,沈陽 110122)
森林采伐限額制度是《森林法》確立的一項重要的法律制度。森林采伐限額編制是以保護發(fā)展森林資源、改善生態(tài)環(huán)境和推進生態(tài)文明、建設美麗中國為宗旨,以森林可持續(xù)經(jīng)營理論為依據(jù),以培育健康、穩(wěn)定、高效的森林生態(tài)系統(tǒng)和提供更多更好的優(yōu)質林產(chǎn)品為目標。編制限額和實施限額的目的是不斷增加森林資源數(shù)量和提升森林資源質量,穩(wěn)步增強森林生態(tài)系統(tǒng)的整體功能。森林合理年采伐量測算是森林采伐限額編制的重點內(nèi)容、核心內(nèi)容,如何科學地測算采伐限額主伐合理年伐量,將決定著編限單位森林采伐限額編制的成果質量和準確性,意義十分重大[1]。
遼寧省十四五森林采伐限額編制,以森林資源管理“一張圖”年度更新成果為基礎,嚴格按照采伐限額的編制原則,區(qū)分不同森林類別、樹種、林分起源和經(jīng)營目標,以促進森林結構調(diào)整和提高林分質量為目的,合理年采伐量測算是遼寧省“十四五”森林采伐限額編制的重中之重。為提高合理年采伐量測算效率和測算準確性,研究探討了根據(jù)國家林草局《關于編制“十四五”期間年森林采伐限額編制工作的通知》(林資發(fā)[2019]99 號)的要求,結合遼寧省實際,充分利用國家林草局下發(fā)的森林合理年伐量測算系統(tǒng)測算合理年采伐量,通過Py-thon 編寫程序實現(xiàn)森林合理年采伐量測算數(shù)據(jù)提取及測算方法。
利用Python 的Tkinter 模塊,設計工具界面,主要使用了Entry、Button、Label 等控件,如圖1。
圖1
數(shù)據(jù)庫是測算數(shù)據(jù)的存儲和提取的容器,數(shù)據(jù)庫中一共需要兩張數(shù)據(jù)表:測算數(shù)據(jù)小班表,測算數(shù)據(jù)中間表。測算數(shù)據(jù)小班表用來存儲導入的小班表(Excel 格式),測算數(shù)據(jù)中間表用來存儲測算數(shù)據(jù)小班表標準化處理后的結果,也是數(shù)據(jù)提取的基礎表。
將各編限單位按照編限要求填寫好編限單位名稱、編限單位代碼、是否參與編限、編限權屬的小班序列表導入到Access 數(shù)據(jù)庫中的測算數(shù)據(jù)小班表中。主要是使用Python 的xlrd 模塊讀取Excel 文件,用pypyodbc 模塊寫入Access 數(shù)據(jù)庫。xlrd 是Py-thon 讀取Excel 的擴展模塊,可以實現(xiàn)指定表單、指定單元格的讀取。pypyodbc 是一個Python ODBC 庫,具有極大的兼容性、可嵌入性和代碼移植性,可在多平臺下運行。
將測算數(shù)據(jù)小班表標準化處理,生成數(shù)據(jù)中間表。
對數(shù)據(jù)中間表劃分編限類型。
3.3.1 編限類型分類
根據(jù)國家林草局下發(fā)的森林合理年伐量測算系統(tǒng)需要的6 張數(shù)據(jù)表,對參與編限的森林資源數(shù)據(jù)進行編限類型劃分,一共劃分為7 個大類型:一般用材林主伐、短輪伐用材林主伐、公益林更新采伐、撫育采伐、低產(chǎn)(效)林改造、其他采伐、不參與編限,具體劃分情況如表1。
表1 森林資源數(shù)據(jù)編限類型劃分
3.3.2 確定編限類型劃分條件
根據(jù)《森林經(jīng)營技術規(guī)程》DB21/T 706—2013結合遼寧省森林經(jīng)營實際,確定各編限類型的劃分條件,讓每個參與編限測算的小班數(shù)據(jù)都能準確的劃分編限類型。
3.3.3 使用Python+pypyodbc,利用SQL 的UPDATE語句對數(shù)據(jù)中間表劃分編限類型。
如公益林生態(tài)疏伐的劃分語句為:
UPDATE XIAOBAN SET編限類型=′44′WHERE森林類別代碼in(′1′,′3′,′4′)And 齡組代碼=′2′And 郁閉度>=0.8
按照森林合理年伐量測算系統(tǒng)的要求提取需要的測算數(shù)據(jù)表,以一般用材林主伐為例(即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(優(yōu)勢樹種)&起源代碼)AS szdm,(select num from codetable where name=trim(優(yōu)勢樹種) &起源代碼) AS numb,(select mubiao from codetable where name=trim(優(yōu)勢樹種)&起源代碼)AS tzmb,地類代碼,森林類別代碼,起源代碼,林種代碼,郁閉度,齡組代碼,面積,小班蓄積,林木權屬FROM XIAOBAN WHERE 編限類型in (′10′,′41′,′42′) AND 林種代碼in (′233′) AND 起源代碼=′2′) GROUP BY 編限單位代碼,林木權屬,起源代碼,szdm,numb,TZMB)
WHERE 幼齡林蓄積+中齡林蓄積+近熟林蓄積+成熟林蓄積+過熟林蓄積>0
使用SQL 多表嵌套查詢語句,利用IIF、SUM 函數(shù)等提取一般用材林主伐測算數(shù)據(jù),最后一個WHERE條件很重要,經(jīng)過測試發(fā)現(xiàn),如果符合一般用材林主伐條件的某樹種,幼齡林蓄積+中齡林蓄積+近熟林蓄積+成熟林蓄積+過熟林蓄積=0的情況下,導入森林合理年伐量測算系統(tǒng)會報錯,導致導入失敗,所以必須通過WHERE 條件篩選掉等于0的情況。
使用Python 自帶的I/O 接口,利用for 循環(huán)構建函數(shù)逐行讀取提取結果并導出為文本文件(01-06.txt)。代碼如下:
將導出的文本文件(01-06.txt),導入到森林合理年伐量測算系統(tǒng)中進行測算,計算出該單位的合理年伐量。
綜上所述,通過該方法,實現(xiàn)森林合理年采伐量測算數(shù)據(jù)的一鍵提取,結合森林合理年伐量測算系統(tǒng)的批量測算,極大地提高了遼寧省“十四五”森林合理年采伐量測算的工作效率,最大程度降低新冠疫情對遼寧省“十四五”森林采伐限額編制工作的影響。