廣西南寧林業勘測設計院,廣西 南寧 530001
小班編號一直都是林地征占領域研究的熱點問題之一。傳統的小班編號方式遵循從北向南、從西向東的原則或者從上到下、從左到右的原則進行編號,其人工參與度高,存在較強的主觀性,工作效率低下,且容易發生錯誤[1]。而且針對線型小班,采用傳統的編號規則并不能滿足實際需要[2]。因此,如何提高小班自動編號的效率和準確度,是當前亟待解決的問題。
王曉龍等[3]提出了一種基于模型構建器的圖斑編號方法,能夠實現宗地批量自動化編號,并具有可移植性和自定義性。宋鵬陽等[4]通過編寫Python腳本,自動識別小班,并通過計算小班質心坐標,實現了對小班的自動排序編號。答星等[5]基于空間聚集原理,利用Python語言和ArcPy站點包,進行ArcGIS二次開發,解決了離散型圖斑在利用坐標位置進行自動編號時容易出現的混亂無序的問題。曹明蘭等[6]基于ArcGIS Model Builder在不破壞原圖層結構屬性的情況下實現了小班自動排序編號的功能,較好地解決了南北狹長、面積參差不齊的小班編號在視覺上的跳躍問題以及島洞型小班的編號重復問題等。宋鵬陽[7]通過調用Arcpy自動識別林地小班,并基于林班賦值小班號實現小班自動編號功能。李天塍等[8]深入探討了MapGIS小班自動編號方法,并將其應用于損毀土地的外業調查工作中。李斌[9]巧妙利用ArcGIS10.0的開發優勢與Excel2007的便捷操作,較好地實現了林業小班自動化編號。郭小波等[10]通過C#及ArcEngine組件庫開發了以圖幅為單位圖斑自動編號的程序。鄭宇志等[11]提出了簡化MBR編號法、改進錐形編號法以及遞歸分解編號法三種編號方法。楊全等[12]提出按帶狀法進行小班編號,真正意義上實現了從上到下、從左到右的小班編號。
文章針對小班編號的問題,提出了三種常用的自動編號方法,并基于.Net平臺,結合VS2012開發框架,采用ArcGIS Add-In對ArcGIS進行了二次開發,設計了小班自動編號工具可視化界面。最后,結合具體的實驗數據進行了驗證,并針對程序運行的結果,與人工小班編號方式進行對比分析,探討該工具的準確性和高效性。
ArcGIS Add-In技術作為一種新推出的開發技術,具有容易創建、便于共享、易于安裝、方便卸載、技術安全等特性,使用該技術可以極大程度上降低開發人員的學習成本。相較于Python Add-In技術,面向.NET及Java高級編程語言的開發方式可支持更多可擴展元素。C#作為一門專為.NET Framework設計的面向對象的高級編程語言,其語言簡潔、兼容性強、與Web緊密結合,更受開發者的青睞。利用.NET平臺配合ArcGIS的SDK開發包,可實現細粒度的控制ArcGIS,完成各類復雜的二次開發操作[13]。
由于傳統的小班自動編號工具極大部分是根據具體的編號規則進行二次開發,要么程序可視化界面不夠靈活,要么程序自動化程度不夠高,不能根據用戶的實際需要選擇定制,存在一定局限性?;诖?,文章提出的小班自動編號工具在保證編號準確性的前提下,根據待排序圖層要素的對應字段與線性圖層要素的對應字段分別進行排序,并根據分類字段進行歸一化處理,通過查詢計算每個小班圖斑點距離線要素起點的距離,然后按照該要素至線要素起點距離進行排序即可。根據具體實踐,實現了往返法、順序法、Z形法三種編號方式,在最大程度上實現了編號的自動化與多功能化。程序界面如圖1所示。

圖1 程序設計界面圖
(1)往返法。首先確定河流、道路等線要素的起點和終點,選擇線要素的右邊為起始邊,計算小班幾何中心到線要素起點的距離,根據距離的遠近依次進行編號,直至線要素的終點,然后以終點為起點,首末置換,同理根據距離的遠近依次進行編號。
(2)順序法。確定線要素的起點和終點,選擇線要素的右邊為起始邊,計算小班幾何中心到線要素起點的距離,根據距離的遠近依次進行編號,直至線要素的終點;然后從線要素的起點出發,以線要素的左邊為起始邊,同理,根據距離遠近依次進行編號。
(3)Z形法。確定線要素的起點和終點,不分線要素起始邊,直接計算小班幾何中心到線要素起點的距離,根據距離的遠近依次進行編號,直至線要素的終點。
根據線型小班自動編號工具的設計原理,在.NET3.5的平臺上,結合VS2012開發框架,基于ArcGIS10.2的版本進行Add-In的線型小班自動編號工具開發。該工具可根據用戶的具體需求,通過可視化界面的圖層選擇、對應字段、分類字段、排序類型、編號字段等參數選項卡來進行具體的設置和選擇,以制定符合實際用戶要求的編號規則,最終實現線型小班自動編號的過程。其具體的實現流程如圖2所示。

圖2 線型小班自動編號工具實現流程圖
實驗選取了廣西某地區林地變更整合項目的部分數據,數據投影坐標系采用3度分帶,中央經線108°,地理坐標系為GCS_China_Geodetic_Coordinate_System_2000。數據存儲在個人地理數據庫中,數據庫格式為GDB格式,內含一個面圖層AS和一個線圖層XTC。其中,面圖層AS共計圖斑34個,包含OBJECTID、SHAPE、編號、線屬性、BH、FL、面積、長度這8個字段,圖斑面積合計30935.8m2,最小圖斑面積為358.7m2,最大圖斑面積為2258.9m2;線圖層XTC共計2個要素,包含OBJECTID、SHAPE、線屬性、SHAPE_Length這4個字段,要素1長度為7295.1m,要素2長度為2853.9m。具體實驗數據概況如圖3所示。

圖3 實驗數據概況圖
(1)程序參數設置。在Arcmap中啟動插件程序,彈出線型小班自動編號程序可視化界面。根據用戶的實際項目需求,在待排序圖層選項參數下,圖層選項卡中,選擇面圖層AS,這里程序將處理面圖層中所有的小班;對應字段選擇面圖層AS中的線屬性字段,該字段的字段值為程序排序的參考初始值;分類字段選擇面圖層AS中的FL字段,該字段的字段值與線圖層XTC中的要素值相對應;選擇排序類型選項卡有順序法、往返法和Z形法三種,可根據實際需要進行選擇;編號字段選擇面圖層AS中的BH字段,該字段值用來存儲程序自動編號后的值。在線性圖層參數選項下,選擇線性圖層XTC,對應字段選擇線性圖層XTC中的線屬性字段。點擊“確定”按鈕,執行線型小班自動編號操作。
(2)程序運行結果。選擇往返法進行線型小班自動編號,設置好其他程序參數后,運行程序。根據程序運行結果,該實驗共處理了34個小班。程序運行成功后,會彈出處理完成的對話窗,并將排序結果自動保存在面圖層AS中的BH字段中。關閉對話窗,檢查程序執行后小班的編號情況,確認執行是否成功。往返法線型小班自動編號結果如圖4所示。

圖4 往返法線型小班自動編號示意圖
選擇順序法進行線型小班自動編號,其他程序參數保持不變,運行程序。程序處理完34個小班后,會彈出處理完成的對話框,并將排序結果自動保存在面圖層AS中的BH字段中。順序法線型小班自動編號結果如圖5所示。

圖5 順序法線型小班自動編號示意圖
選擇Z形法進行線型小班自動編號,其他程序參數保持不變,運行程序。待程序處理完畢,檢查自動編號成功后,關閉程序。Z形法線型小班自動編號結果如圖6所示。

圖6 Z形法線型小班自動編號示意圖
結合圖4、圖5和圖6的結果可知,基于該線型小班自動編號工具可以準確地完成該項目的小班編號工作。為驗證其科學可靠性和高效準確性,采用人工方式進行編號,并與程序運行的結果進行對比。以往返法編號的方式為方案一,以順序法編號的方式為方案二,以Z形法編號的方式為方案三,對三種方案完成這34個小班編號工作所耗費的時間、編號準確度等指標進行分析,得到三種編號方法的結果對比分析如表1所示。

表1 編號結果對比分析表
由表1可知,采用往返法進行線型小班編號時,工具耗時2s,人工耗時58s;采用順序法進行線型小班編號時,工具耗時2s,人工耗時66s;采用Z形法進行線型小班編號時,工具耗時3s,人工耗時128s。而且這三種編號方法的編號準確度均為100。由此可知,采用文章提出的方法進行線型小班自動編號,可以高效準確地完成線型小班編號工作,極大地節約了勞動成本,提高了生產效率。
文章基于.NET平臺和VS2012開發框架,設計并實現了基于ArcGIS Add-In的線型小班自動編號工具,并結合實踐數據進行分析驗證。實驗結果表明,采用文章提出的線型小班自動編號工具,極大地節約了勞動成本,保證了編號的準確性,大幅度提高了生產效率。而且針對項目的實際需要,程序設計了往返法、順序法、Z形法三種編號方法,用戶可以根據自己的需求選擇合適的編號方法完成線型小班的自動編號。但文章的實驗主要針對項目的部分數據而進行,且樣本數據只有34個小班,如果要推廣至相關行業的實際生產應用中,還需進行更多的實驗,來驗證該工具的可靠性和實用性。