謝文珠,林童新,謝榮安 ,劉桂霞
(1.廣東省地質(zhì)測(cè)繪院,廣東 廣州 510800;2.廣州市花都區(qū)地籍測(cè)量隊(duì),廣東 廣州 510800)
土地勘測(cè)定界是為自然資源管理部門提供用地審批和地籍管理的技術(shù)服務(wù)性工作,其成果的準(zhǔn)確性、規(guī)范性和科學(xué)性是自然資源管理部門土地管理的重要依據(jù)[1]。土地勘測(cè)定界面積量算內(nèi)容主要包括項(xiàng)目用地面積、項(xiàng)目用地占用基本農(nóng)田面積、用地范圍內(nèi)原不同權(quán)屬單位及不同土地利用類型面積。在量算不同權(quán)屬、不同土地利用類型面積的基礎(chǔ)上,分別以市(縣)、鄉(xiāng)(鎮(zhèn))、村(組)為單位按不同的土地利用類型進(jìn)行面積匯總,項(xiàng)目用地若占用基本農(nóng)田,則基本農(nóng)田保護(hù)區(qū)劃內(nèi)的土地和基本農(nóng)田保護(hù)區(qū)劃外的土地應(yīng)分別統(tǒng)計(jì)匯總。
目前常用的面積統(tǒng)計(jì)匯總方法是利用CASS軟件或者ArcGIS軟件將項(xiàng)目用地紅線與權(quán)屬界線、基本農(nóng)田界線及不同年份的土地利用圖斑等采用人工方式進(jìn)行土地分類面積統(tǒng)計(jì)分析。該方法存在一定的弊端,如:人工統(tǒng)計(jì)分析面積,逐一填入土地地類分類面積匯總表及集體建設(shè)用地變更情況說(shuō)明表,容易產(chǎn)生錯(cuò)漏;一旦源數(shù)據(jù)發(fā)生錯(cuò)誤,則每一步均需重新計(jì)算、重新分類統(tǒng)計(jì),工作量大;不同項(xiàng)目之間不能重復(fù)使用,可移植性差;檢查工作困難等問(wèn)題[2-3]。因此,本文利用VBA語(yǔ)言編寫了一個(gè)操作簡(jiǎn)單的應(yīng)用程序,該程序能實(shí)現(xiàn)土地勘測(cè)定界面積匯總的自動(dòng)批量化處理。
在利用ArcGIS模型構(gòu)建器(Model Builder)構(gòu)建年度土地利用現(xiàn)狀分類自動(dòng)計(jì)算面積模型的基礎(chǔ)上,使用VBA語(yǔ)言編寫程序來(lái)提取數(shù)據(jù)表格并整理數(shù)據(jù),最終自動(dòng)生成土地地類分類面積匯總表及集體建設(shè)用地變更情況說(shuō)明表。
模型構(gòu)建器Model Builder是一個(gè)用來(lái)創(chuàng)建、編輯和管理模型的應(yīng)用程序。使用Model Builder將ArcGIS中的工具串聯(lián)起來(lái),將復(fù)雜的工作流程簡(jiǎn)化為一個(gè)工具,當(dāng)保存模型時(shí),該模型將變成一個(gè)模型工具,實(shí)現(xiàn)流程重用,系統(tǒng)工具豐富,采用可視化的方式構(gòu)建數(shù)據(jù)處理工作流,基于工具箱內(nèi)的工具構(gòu)建自己的建模工具[4]。
VBA(Visual Basic for Applications)是Visual Basic的一種宏語(yǔ)言,是在其桌面應(yīng)用程序中執(zhí)行通用的自動(dòng)化(OLE)任務(wù)的編程語(yǔ)言。它與傳統(tǒng)的宏語(yǔ)言不同,傳統(tǒng)的宏語(yǔ)言不具有高級(jí)語(yǔ)言的特征,沒(méi)有面向?qū)ο蟮某绦蛟O(shè)計(jì)概念和方法,而VBA 提供了面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,提供了相當(dāng)完整的程序設(shè)計(jì)語(yǔ)言,它的編寫是以子過(guò)程和函數(shù)為單位,使用宏記錄器記錄用戶的各種操作并將其轉(zhuǎn)換為VBA 程序代碼,這樣可以容易地將日常工作轉(zhuǎn)換為VBA 程序代碼,使工作自動(dòng)化[5]。
在編寫程序前應(yīng)先收集項(xiàng)目所需要的數(shù)據(jù)資料:報(bào)批范圍數(shù)據(jù)CAD、權(quán)屬文件shp、報(bào)批所需年份土地利用現(xiàn)狀等數(shù)據(jù)資料,然后利用ArcGIS平臺(tái)的Model Builder訪問(wèn)“空間相交分析”“匯總統(tǒng)計(jì)數(shù)據(jù)”“ 篩選”“合并”等地理處理工具整合所有數(shù)據(jù)、進(jìn)行面積統(tǒng)計(jì)分析;接著利用VBA如函數(shù)Getpivotdata、Iferror等進(jìn)行二次開(kāi)發(fā)完成制作各類面積表格模板、自動(dòng)填寫表格、檢查等工作;最后創(chuàng)建操作窗口界面實(shí)現(xiàn)一鍵提取數(shù)據(jù)并整理好的數(shù)據(jù)表格。制作土地勘測(cè)定界面積匯總表自動(dòng)生成程序的流程,如圖1所示。
圖1 土地勘測(cè)定界面積匯總表自動(dòng)生成程序的流程
根據(jù)《廣東省自然資源廳關(guān)于建設(shè)用地報(bào)批地類有關(guān)問(wèn)題的通知》(粵自然資管制[2019]1439號(hào)):在建設(shè)用地報(bào)批組卷時(shí),應(yīng)按最新的年度土地利用變更調(diào)查成果(包括即將發(fā)布的“三調(diào)”成果及以“三調(diào)”為基礎(chǔ)的年度土地變更調(diào)查成果)確定報(bào)批地類。報(bào)批用地中涉及違法用地的,必須依法處理到位后,按照違法用地前的地類報(bào)批。
依上文要求,在計(jì)算過(guò)程中需要對(duì)建設(shè)用地進(jìn)行年度變更情況說(shuō)明,因此可以先收集測(cè)區(qū)報(bào)批所需年份變更調(diào)查成果,并對(duì)測(cè)區(qū)內(nèi)所有建設(shè)用地的變更情況進(jìn)行匯總制作變更數(shù)據(jù)庫(kù)。
在收集項(xiàng)目報(bào)批范圍數(shù)據(jù)CAD、權(quán)屬文件(Shapefile)格式后,利用ArcGIS平臺(tái)Model Builder工具箱中的工具搭建模型,首先對(duì)上述數(shù)據(jù)進(jìn)行整合如:統(tǒng)一數(shù)據(jù)格式、坐標(biāo)系等工作。完成坐標(biāo)系定義后再通過(guò)“相交”等工具與權(quán)屬數(shù)據(jù)、最新年度DLTB變更調(diào)查數(shù)據(jù)、最新年度XZDW變更調(diào)查數(shù)據(jù)進(jìn)行疊加分析以得到最新年度土地分類數(shù)據(jù),再利用“篩選”“相交”等工具,將范圍內(nèi)建設(shè)用地地類圖斑與變更數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行疊加分析以得到建設(shè)用地年度變更數(shù)據(jù)(即違法用地變更前地類數(shù)據(jù))。最后通過(guò)“篩選”及“擦除”工具將最新年度土地分類數(shù)據(jù)中建設(shè)用地圖斑刪除,利用“合并”工具與建設(shè)用地年度變更數(shù)據(jù)進(jìn)行合并從而得到報(bào)批所組卷時(shí)所需的匯總數(shù)據(jù)[6]。
雖然利用Model Builder搭建的面積計(jì)算模型可以很快進(jìn)行匯總,但是經(jīng)過(guò)模型計(jì)算得到的成果數(shù)據(jù)結(jié)構(gòu)比較分散且無(wú)用字段多,與土地勘測(cè)定界項(xiàng)目要求的數(shù)據(jù)表格結(jié)構(gòu)相差甚遠(yuǎn),只能經(jīng)過(guò)人工手動(dòng)慢慢整理。為了讓復(fù)雜的工作簡(jiǎn)易化,避免數(shù)據(jù)回填出現(xiàn)錯(cuò)誤,可以通過(guò)Excel表格的數(shù)據(jù)透視表工具對(duì)原始數(shù)據(jù)表格進(jìn)行重新匯總,同時(shí)使用“GetpivotData” 函數(shù)(返回存儲(chǔ)在數(shù)據(jù)透視表中的數(shù)據(jù)),通過(guò)行標(biāo)簽及列標(biāo)簽的對(duì)應(yīng)關(guān)系,將數(shù)據(jù)填充到土地分類面積表模版表格中[7-8]。
在數(shù)據(jù)自動(dòng)填充后,如果單元格中沒(méi)數(shù)據(jù)時(shí),模板表格的單元格在透視表中會(huì)顯示“#REF!”錯(cuò)誤,在此可以增加一個(gè)“Iferror” 函數(shù)(判斷數(shù)據(jù)的正確性并返回值)清理空值數(shù)據(jù),具體公式:Iferror(GETPIVOTDATA("面積",[表一數(shù)據(jù).xls]Sheet1!$A$3,"經(jīng)濟(jì)社匯",$B7,"DLBM",B$5),""),利用Iferror函數(shù)前后效果對(duì)比,如圖2所示。
圖2 利用Iferror函數(shù)前后效果對(duì)比
在完成面積計(jì)算模型及模板表格的制作等工作后,可利用VBA語(yǔ)言編寫程序來(lái)提取數(shù)據(jù)表格并整理數(shù)據(jù),編制勘測(cè)定界程序的主要工作內(nèi)容及語(yǔ)言如下:
1)制作自動(dòng)插入數(shù)據(jù)透視表匯總和成果表格整飾VBA語(yǔ)言模塊,部分代碼如下:
Sub 表1()
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=
"Database").CreatePivotTable TableDestination:="", TableName:="數(shù)據(jù)透視表1",DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
With ActiveSheet.PivotTables("數(shù)據(jù)透視表1").PivotFields("經(jīng)濟(jì)社匯總")
.Orientation=xlRowField
.Position=1
End With
With ActiveSheet.PivotTables("數(shù)據(jù)透視表1").PivotFields("權(quán)屬")
.Orientation=xlRowField
.Position=2
End With
With ActiveSheet.PivotTables("數(shù)據(jù)透視表1").PivotFields("DLBM")
.Orientation=xlColumnField
.Position=1
End With
ActiveSheet.PivotTables("數(shù)據(jù)透視表1").AddDataField ActiveSheet.PivotTables("數(shù)據(jù)透視表1" _).PivotFields("面積"), "求和項(xiàng):面積", xlSum
ActiveSheet.PivotTables("數(shù)據(jù)透視表1").PivotFields("經(jīng)濟(jì)社總").RepeatLabels=True
End Sub
2)制作程序窗體,主要代碼如下:
復(fù)制文件夾并重命名
(CreateObject("Scripting.FileSystemObject").CopyFolder"…",router "...")
刪除文件(Kill "…")
調(diào)用數(shù)據(jù)表格及模板表格 (Workbooks.Open Filename:="…")
在不同表格中調(diào)用VBA模塊(Application.Run "…")
輸出成果表格 (ActiveWorkbook.SaveAs Filename:="…")
程序最終操作界面,如圖3所示。運(yùn)行該程序,在界面中輸入項(xiàng)目號(hào),然后單擊“開(kāi)始整理面積表”按鈕,根據(jù)項(xiàng)目號(hào)對(duì)應(yīng)的項(xiàng)目所需的各個(gè)土地勘測(cè)定界面積匯總表就會(huì)按土地勘測(cè)項(xiàng)目技術(shù)要求的格式自動(dòng)生成[9-10]。
圖3 軟件操作界面
將廣清城際軌道項(xiàng)目京廣信號(hào)樓、獅嶺鎮(zhèn)軍田經(jīng)濟(jì)發(fā)展用留地、花都區(qū)大陵河三華凈水廠工程等土地勘測(cè)定界項(xiàng)目用傳統(tǒng)的方法與本文所述勘測(cè)定界程序方法進(jìn)行比對(duì),對(duì)比結(jié)果見(jiàn)表1。經(jīng)比對(duì),所有項(xiàng)目利用本程序能有效減少人工誤差,本程序一鍵生成的土地分類面積匯總表的數(shù)據(jù)精度均滿足每個(gè)項(xiàng)目的技術(shù)要求,同時(shí)本程序操作簡(jiǎn)單,所投入的人工少,工作效率高。
表1 勘界定界程序與傳統(tǒng)方法比較表
本文基于ArcGIS中Model Builder建模與編程語(yǔ)言VBA腳本二次開(kāi)發(fā)等技術(shù),設(shè)計(jì)并編寫了土地勘測(cè)定界面積匯總表自動(dòng)生成程序,并實(shí)現(xiàn)了自動(dòng)化、批量化、一體化的功能,保證了從數(shù)據(jù)采集、面積計(jì)算到表格輸出的全過(guò)程無(wú)縫對(duì)接,計(jì)算結(jié)果準(zhǔn)確。實(shí)踐證明,利用該程序可以減少人工操作,避免人工干預(yù)多造成的差錯(cuò),極大地提高了工作效率。