王曉蒙,楊慶媛,劉光鵬
(西南大學地理科學學院,重慶400715)
根據土地利用總體規劃(簡稱“土地規劃”)編制規程[1]的要求,規劃文本、規劃圖件、規劃數據庫等成果材料必須保持圖、數的一致。土地規劃編制周期長,期間地方用地需求和規劃編制要求的變化都會導致規劃調整,規劃成果需同步更新,因此成果維護成本較大,特別是規劃數據庫中規劃表格的更新會耗費大量時間,為增強土地規劃實時性以適應用地需求和土地政策的變化,在編制過程中需要對規劃成果進行實時更新。而規劃成果更新過程繁瑣,特別是規劃表格更新,大量的數字統計操作不僅耗時,還會產生難以排查的統計錯誤進而影響最終規劃成果的質量。針對規劃表格更新頻繁、過程繁瑣的特點,本文基于AO對ArcMap進行擴展,實現規劃表格快速更新程序,簡化并統一更新流程。
規劃表格在規劃數據庫中體現為非空間要素,是對整個規劃編制的整體反映,概括了各類規劃要素的情況,是規劃編制的重要成果材料。規劃表格更新需大量統計工作,過程繁瑣,亟需一種規劃表格快速更新方法。
ArcObjects(簡稱“AO”)是ArcGIS平臺下的一套組件集,能夠根據需求對ArcGIS軟件進行擴展實現特定的功能,例如根據土地規劃編制制圖要求進行制圖功能擴展[2]、基于AO的經濟統計時空分析模塊[3]、基于AO的區域環境污染源分析功能[4]等。本文根據國土資源部和重慶市對本輪鄉鎮土地利用總體規劃編制的要求,解析規劃數據庫建設過程,基于AO對ArcGIS進行功能擴展,使得規劃表格能夠根據空間要素快速更新,為整個規劃編制節省大量時間。
規劃表格的數據來源于對規劃數據庫空間要素的分類統計。本文首先通過對比分析確定規劃表格與空間要素的對應關系,然后基于AO對ArcGIS進行擴展,實現根據空間要素快速更新規劃表格的功能(圖1)。

圖1 程序設計思路Fig.1 Program design ideas
研究所用數據來源于重慶市云陽縣鄉級土地利用總體規劃基礎數據。本文基于Microsoft.NET Framework 2.0和ArcGISDesktop SDK for the Microsoft.NET Framework等開發環境,利用Microsoft Visual C#2008 Express Edition工具對ArcGIS 9.3進行功能擴展。
ArcGIS地理數據庫包括三種:文件地理數據庫、個人地理數據庫和ArcSDE地理數據庫。文件地理數據庫基于文件管理系統,管理簡潔、直觀,單表支持1TB數據存儲量;個人地理數據庫是基于Microsoft Access數據庫搭建,借助Microsoft Office平臺可以直接操作,但只支持2GB數據存儲量;ArcSDE地理數據庫適合大型系統開發且需要第三方數據庫引擎支持,例如與SQL Server的集成開發[5]。根據鄉鎮規劃實際情況,空間數據適合選擇數據存儲量較大的文件型地理數據庫,規劃表格適合選擇操作簡便的個人地理數據庫。
規劃數據庫空間要素與規劃表格相互關聯,根據建庫標準[6-7]解析兩者的對應關系,為規劃表格快速更新提供實現途徑。進一步分析,土地利用結構調整表、新增建設用地指標控制表、土地整治規劃表可以通過規劃期間各類用地平衡表間按計算得到,因此可以將數據獲取算法簡化(圖2)。
2.2.1 規劃期間各類用地平衡表更新 規劃期間各類用地平衡表(簡稱“平衡表”)可以通過對土地規劃地類要素分類統計進行更新。根據平衡表地類設置,二級地類或三級地類數據可以直接統計,例如耕地、農村居民點用地等;一級地類數據可以通過統計其子類間接得到,例如農用地、建設用地等。直接統計時,首先根據轉換關系設置篩選條件,例如篩選出基期地類是旱地或水田且期末地類是農村居民點用地的所有要素;然后統計出規劃地類面積并將其更新到平衡表對應的單元格,例如“耕地調整至農村居民點用地”(圖3)。
平衡表更新順序為各類用地調整地類面積、各地類規劃基期面積、各地類規劃目標年面積、各類用地規劃期內減少、各類用地規劃期內增加、各類用地規劃期凈增減。

圖3 土地規劃地類與平衡表對應關系Fig.3 The correspondence between TDGHDL and GHQJGLYDPHB
2.2.2 新增建設用地指標控制表更新 新增建設用地指標控制表(簡稱“控制表”)包含近期、遠期和規劃期三組指標,每組指標各包含新增建設用地、建設占用農用地、建設占用耕地三個指標。首先通過平衡表獲取規劃期的指標,例如農村居民點用地的新增建設用地、建設占用農用地、建設占用耕地3個指標分別對應平衡表中農村居民點用地的規劃期內增加、農用地調整至農村居民點、耕地調整至農村居民點3個單元格(圖4)。近期和遠期指標可以根據預設規則間接獲取,例如對規劃指標按比例計算獲取。
2.2.3 土地整治規劃表更新 土地整治規劃表(簡稱“整治表”)包括土地整理、土地復墾、土地開發3組指標,分別統計土地整治產生的各地類新增面積。根據數據庫標準,土地整理包括對農田、農村居民點的整理,土地復墾主要是對工礦、道路廢棄地的復墾,而土地開發主要對荒地、灘涂等地類的開發。先由土地整治類型判斷各地類轉換關系,再通過平衡表獲取相應數據更新到整治表,例如土地整理中耕地的增加主要通過其他農用地和農村居民點用地的轉換,因此平衡表中其他農用地和農村居民點用地調整至耕地之和就是整治表中土地整理調整至耕地的面積(圖5)。
2.2.4 土地利用結構調整表更新 土地利用結構調整表(簡稱“結構表”)主要反映各地類規劃期內面積變化情況,包括基期年、近期目標年、規劃目標年3組指標。首先按基期地類、規劃地類對土地規劃地類分類統計得到各地類的基期年面積和規劃目標年面積,然后根據預設規則(例如按比例)計算出各地類的近期目標年面積。
2.2.5 耕地保有量、基本農田情況表更新 耕地保有量、基本農田情況表(簡稱“耕地情況表”)包括規劃近期、規劃期、規劃期年均增減3組指標。首先通過平衡表更新規劃期的耕地增減情況,然后按預設規則更新規劃近期的數據,最后通過規劃期和規劃期限計算規劃期年均增減的指標。由于平衡表不涉及基本農田信息,因此表中的基本農田保護面積需要根據土地規劃地類要素類進行更新。

圖4 平衡表與控制表對應關系Fig.4 The correspondence between XZJSYDZBKZB and GHQJGLYDPHB

圖5 平衡表與整治表對應關系Fig.5 The correspondence between TDZZGHB and GHQJGLYDPHB
2.2.6 重點建設項目用地規劃表更新 重點建設項目用地規劃表(簡稱“項目表”)與數據庫空間要素規劃重點建設項目(MZZDJSXM、XZZDJSXM、DZZDJSXM)基本一致。因此更新時,首先刪除表中所有項,然后分別從面狀、線狀、點狀重點建設項目等空間要素中讀取項目信息填充項目表。
2.2.7 土地用途分區面積統計表更新 根據要求,遍歷土地用途區要素類,按行政村分類統計出各類用途分區面積。
2.2.8 基本農田調整分析表更新 基本農田調整分析表可以通過規劃基本農田調整要素分類匯總進行更新,具體步驟為:(1)遍歷規劃基本農田調整要素類,統計出涉及的行政村;(2)按行政村分類統計基期年基本農田面積、規劃目標年基本農田面積、調入面積、調出面積等信息;(3)填充基本農田調整分析表。
規劃表格的更新一般包括數據庫訪問、規劃表格初始化、數據分類統計、規劃表格更新4個步驟。首先訪問數據庫,對規劃表格進行遍歷,將規劃表格初始化避免舊數據對更新的影響;然后對數據庫空間要素進行分類統計;最后將統計結果更新到規劃表格。
2.3.1 數據庫訪問 規劃表格更新過程中,需要對數據庫進行查找、修改、刪除、插入和單元格運算等操作。基于AO對文件型地理數據庫和Access數據庫的訪問途徑基本一致,主要包括兩種:通過IApplication、IMxDocument、IMap等接口訪問圖層,通過IWorkspace接口訪問數據庫。本文通過IWorkspace接口對ArcGIS數據庫進行訪問。
訪問數據庫時,首先通過Activator類的CreateInstance方法動態創建對應的WorkspaceFactory實例,然后通過IWorkspaceFactory的OpenFromFile方法根據數據庫路徑創建FeatureWorkspace實例,最后通過IFeatureWorkspace接口的OpenFeatureClass、OpenTable方法訪問要素類或表。例如訪問重慶市云陽縣人和鎮鎮級數據庫中的“TDGHDL”要素類算法如下:
Type t=Type.Get Type From Prog ID(“esriDataSourcesGDB.File GDBWorkspace Factory”);
IWorkspace Factorywf=(IWorkspace Factory)Activator.CreateInstance(t);
String path=@“ G:人和鎮 5002351342003G20052020500235134000.gdb”;
IFeature WorkspacepFeature Workspace=wf.Open FromFile(path,0);
IFeature Class pFeature Class=pFeature Workspace.Open Feature Class(“TDGHDL”);
2.3.2 規劃表格初始化 規劃表格更新前需要進行初始化清除舊數據,對于格式固定的表格,例如平衡表等,可將所有單元格賦空值或零,對于條目數動態變化的表格,例如項目表,需要刪除所有行。可以通過ITable接口的DeleteSearchedRows方法進行刪除操作。
將需要更新單元格清零,需要通過ITable接口的Update方法返回可編輯的游標對象,再通過ICursor接口的NextRow方法逐行對單元格清零。以平衡表為例,將規劃基期面積這列單元格清零:
ICursor pCursor=pTable.Update(null,false);
IRowpRow=ICursor.NextRow();
While(pRow!=null)
{
pRow.set_Value(pTable.FindField(“GHJQMJ”),0);
IRowpRow=ICursor.NextRow();
}
2.3.3 數據分類統計 規劃表格更新需要大量統計工作,AO中IDataStatistics和IStatisticsResults接口提供了求和、求平均值、求最值等統計功能。統計時,先通過IDataStatistics接口的Cursor屬性和Field屬性設置統計范圍和統計字段并通過Statistics屬性獲取統計結果對象;然后通過IStatisticsResults接口的Sum等屬性返回統計結果。以查詢基本農田面積為例,從“TDGHDL”要素類中按“SFHRJBNT”字段篩選出基本農田,再按“GHDLMJ”字段統計出基本農田面積:
IField pField=pFeatureClass.Fields.get_Field(pFeatureClass.FindField(“GHDLMJ”));
pQueryFilter.WhereClause=“”“+”SFHRJBNT“+”“=”+“‘Y’”;
IFeatureCursor pFeatureCursor=pFeatureClass.Search(pQueryFilter,false);
IDataStatistics pDataStatistics=new DataStatisticsClass();
pDataStatistics.Field=pField.Name;
pDataStatistics.Cursor=pFeatureCursor;
IStatisticsResults pStatisticsResults=pDataStatistics.Statistics;
Double JBNTMJ=pStatisticsResults.Sum;
2.3.4 規劃表格更新 對固定格式的表格更新,需要對指定單元格進行修改,首先通過ITable接口的Update方法返回可編輯的游標對象,然后通過IRow接口的Value屬性修改單元格。例如將統計“TDGHDL”的基本農田面積更新到規劃表格“GDBYLJBNTQKB”的近期基本農田保護面積中:
pQueryFilter.WhereClause=“”“+”QXLXDM“+”“=”+“‘01’”;
pCursor=pTable.Update(pQueryFilter,false);
IRow pRow=pCursor.NextRow();
pRow.set_Value(pTable.FindField(“JBNTBHMJ”),JBNTMJ);
對條目數動態變化的表格,需要通過插入行來進行更新。首先通過ITable接口的Insert方法返回可進行插入操作的游標對象,然后通過CreateRowBuffer方法創建RowBuffer對象并填充相應數據,最后將RowBuffer對象通過InsertRow方法插入表格。例如重點建設項目用地規劃表,若項目數量進行調整,表格格式也會調整,因此在更新此表時,先將舊表的所有項刪除,然后逐項插入新項,這樣可以避免重復項的出現,算法如下:
pTable.DeleteSearchedRows(null);
ICursor pCursor=pTable.Insert(true);
IFeatureCursor pFeatureCursor=pFeatureClass.Search(null,false);
IFeature pFeature=pFeatureCursor.NextFeature();
IRowBuffer pRowBuffer=pTable.CreateRowBuffer();
string XZQDM=pFeature.get_Value(pFeatureClass.FindField(“XZQDM”));
pRowBuffer.set_Value(pTable.FindField(“XZQDM”),XZQDM);
pCursor.InsertRow(pRowBuffer);
以重慶市云陽縣人和鎮規劃表格更新為例對軟件使用方法進行說明:
(1)軟件安裝。通過.Net平臺下的RegAsm工具將編譯完成的程序注冊為ArcGIS組件,然后打開ArcMap添加自定義工具欄,選擇工具彈出規劃表格更新程序界面。(2)數據準備。完成各項規劃要素編輯,完善數據庫空間要素,確保各項要素命名規范。(3)更新表格。根據軟件提示設置數據庫和規劃表格路徑,選擇需要更新的表格進行更新操作。(4)成果檢驗。為確保規劃表格更新正確,還需要對規劃表格數據進行檢驗,確保規劃表格各表與數據庫空間要素保持一致。
以往規劃表格更新時先從數據庫導出數據,借助Excel等軟件對數據進行整理、統計,然后將數據導入到規劃表格。Excel只能實現一部分統計工作的自動化,而且數據的導入、導出、整理會消耗大量的時間。云陽縣有41個鄉鎮,每個鄉鎮分別有8個表格。特別是各類用地平衡表,根據地類的細化程度需要上百個統計數據,過程繁瑣,人為統計錯誤也較普遍,直接影響最終成果的質量和進度。
本文實現了數據導入、導出、統計自動化,簡化并統一了數據更新流程,使得規劃表格數據更新更加快捷,成果檢驗和錯誤的排查也更加容易,大大節省了規劃成果維護時間。對云陽縣41個鄉鎮規劃表格更新實踐中,采用程序更新,只需要簡單的幾個操作就能完成,節約80%以上的操作時間。雖然投入了一定的開發成本,但對以后規劃成果的維護起到了重要的作用。
本文通過重慶市云陽縣鄉鎮土地利用總體規劃編制工作的實踐證明,規劃表格更新程序只需要幾個簡單操作就能生成格式統一的規劃表格,而絕大部分工作量轉移到程序的開發和維護,程序的開發和維護時間也遠遠低于傳統的一個區縣的規劃表格的一次更新所消耗的時間。通過實踐完善的規劃表格更新程序,可以方便的應用于其他區縣的規劃表格更新工作,進而為土地規劃編制節省更多的時間。
規劃表格更新程序大體上實現了規劃表格的快速更新功能,在實際應用中還可以進一步完善:(1)在實踐中完善程序邏輯,提高程序的可靠性;(2)增加輸入數據的規范性判斷功能,提高程序的安全性減少程序崩潰幾率;(3)由于數據庫中規劃表格與文本中規劃表格格式上的不同,可以結合Micro Office提供的應用接口實現規劃文本中表格的自動生成。
(References):
[1]鄉(鎮)土地利用總體規劃編制規程[S].國土資源部,2010.
[2]王曉蒙,楊慶媛,藏波.基于ArcObjects的方里網制作程序設計與應用[J].中國土地科學,2011,25(9):83-89.
[3]張傳才,孔云峰,宋承運.基于ArcObjects的經濟統計時空分析模塊功能分析與設計[J].地理與地理信息科學,2010,26(1):81-85.
[4]鄒強張,文君,武鋒強.基于ArcObjects的區域環境污染源分析評價系統[J].環境科學與技術,2011,34(10):186-190.
[5]于靜,蔡文婷,李曉松.基于ArcSDE和SQL Server 2005的城鄉動態檢測集成數據庫的構建——以義烏城鄉動態檢測集成數據庫為例[J].城市發展研究,2010,17(11):61-65.
[6]鄉(鎮)土地利用總體規劃數據庫標準[S].國土資源部,2010.
[7]重慶市鄉(鎮)級土地利用總體規劃數據庫標準(試行)[S].重慶市國土資源和房屋管理局,2010.