APP下载

基于AO的土地规划表格更新程序设计与应用:以重庆市云阳县乡(镇)级土地利用总体规划为例

2012-11-22王晓蒙杨庆媛刘光鹏

中国土地科学 2012年8期
关键词:基本农田表格用地

王晓蒙,杨庆媛,刘光鹏

(西南大学地理科学学院,重庆400715)

根据土地利用总体规划(简称“土地规划”)编制规程[1]的要求,规划文本、规划图件、规划数据库等成果材料必须保持图、数的一致。土地规划编制周期长,期间地方用地需求和规划编制要求的变化都会导致规划调整,规划成果需同步更新,因此成果维护成本较大,特别是规划数据库中规划表格的更新会耗费大量时间,为增强土地规划实时性以适应用地需求和土地政策的变化,在编制过程中需要对规划成果进行实时更新。而规划成果更新过程繁琐,特别是规划表格更新,大量的数字统计操作不仅耗时,还会产生难以排查的统计错误进而影响最终规划成果的质量。针对规划表格更新频繁、过程繁琐的特点,本文基于AO对ArcMap进行扩展,实现规划表格快速更新程序,简化并统一更新流程。

规划表格在规划数据库中体现为非空间要素,是对整个规划编制的整体反映,概括了各类规划要素的情况,是规划编制的重要成果材料。规划表格更新需大量统计工作,过程繁琐,亟需一种规划表格快速更新方法。

ArcObjects(简称“AO”)是ArcGIS平台下的一套组件集,能够根据需求对ArcGIS软件进行扩展实现特定的功能,例如根据土地规划编制制图要求进行制图功能扩展[2]、基于AO的经济统计时空分析模块[3]、基于AO的区域环境污染源分析功能[4]等。本文根据国土资源部和重庆市对本轮乡镇土地利用总体规划编制的要求,解析规划数据库建设过程,基于AO对ArcGIS进行功能扩展,使得规划表格能够根据空间要素快速更新,为整个规划编制节省大量时间。

1 程序设计思路和开发环境

1.1 程序设计思路

规划表格的数据来源于对规划数据库空间要素的分类统计。本文首先通过对比分析确定规划表格与空间要素的对应关系,然后基于AO对ArcGIS进行扩展,实现根据空间要素快速更新规划表格的功能(图1)。

图1 程序设计思路Fig.1 Program design ideas

1.2 数据来源与开发环境

研究所用数据来源于重庆市云阳县乡级土地利用总体规划基础数据。本文基于Microsoft.NET Framework 2.0和ArcGISDesktop SDK for the Microsoft.NET Framework等开发环境,利用Microsoft Visual C#2008 Express Edition工具对ArcGIS 9.3进行功能扩展。

1.3 数据库选择

ArcGIS地理数据库包括三种:文件地理数据库、个人地理数据库和ArcSDE地理数据库。文件地理数据库基于文件管理系统,管理简洁、直观,单表支持1TB数据存储量;个人地理数据库是基于Microsoft Access数据库搭建,借助Microsoft Office平台可以直接操作,但只支持2GB数据存储量;ArcSDE地理数据库适合大型系统开发且需要第三方数据库引擎支持,例如与SQL Server的集成开发[5]。根据乡镇规划实际情况,空间数据适合选择数据存储量较大的文件型地理数据库,规划表格适合选择操作简便的个人地理数据库。

2 规划表格快速更新程序

2.1 规划表格结构分析

规划数据库空间要素与规划表格相互关联,根据建库标准[6-7]解析两者的对应关系,为规划表格快速更新提供实现途径。进一步分析,土地利用结构调整表、新增建设用地指标控制表、土地整治规划表可以通过规划期间各类用地平衡表间按计算得到,因此可以将数据获取算法简化(图2)。

2.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)填充基本农田调整分析表。

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);

3 应用与实践

3.1 软件的使用

以重庆市云阳县人和镇规划表格更新为例对软件使用方法进行说明:

(1)软件安装。通过.Net平台下的RegAsm工具将编译完成的程序注册为ArcGIS组件,然后打开ArcMap添加自定义工具栏,选择工具弹出规划表格更新程序界面。(2)数据准备。完成各项规划要素编辑,完善数据库空间要素,确保各项要素命名规范。(3)更新表格。根据软件提示设置数据库和规划表格路径,选择需要更新的表格进行更新操作。(4)成果检验。为确保规划表格更新正确,还需要对规划表格数据进行检验,确保规划表格各表与数据库空间要素保持一致。

3.2 获取的成效

以往规划表格更新时先从数据库导出数据,借助Excel等软件对数据进行整理、统计,然后将数据导入到规划表格。Excel只能实现一部分统计工作的自动化,而且数据的导入、导出、整理会消耗大量的时间。云阳县有41个乡镇,每个乡镇分别有8个表格。特别是各类用地平衡表,根据地类的细化程度需要上百个统计数据,过程繁琐,人为统计错误也较普遍,直接影响最终成果的质量和进度。

本文实现了数据导入、导出、统计自动化,简化并统一了数据更新流程,使得规划表格数据更新更加快捷,成果检验和错误的排查也更加容易,大大节省了规划成果维护时间。对云阳县41个乡镇规划表格更新实践中,采用程序更新,只需要简单的几个操作就能完成,节约80%以上的操作时间。虽然投入了一定的开发成本,但对以后规划成果的维护起到了重要的作用。

4 结论与建议

本文通过重庆市云阳县乡镇土地利用总体规划编制工作的实践证明,规划表格更新程序只需要几个简单操作就能生成格式统一的规划表格,而绝大部分工作量转移到程序的开发和维护,程序的开发和维护时间也远远低于传统的一个区县的规划表格的一次更新所消耗的时间。通过实践完善的规划表格更新程序,可以方便的应用于其他区县的规划表格更新工作,进而为土地规划编制节省更多的时间。

规划表格更新程序大体上实现了规划表格的快速更新功能,在实际应用中还可以进一步完善:(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.

猜你喜欢

基本农田表格用地
《现代临床医学》来稿表格要求
山东省基本农田保护政策研究
永久基本农田集中区域“禁废”
统计表格的要求
永久基本农田储备区数据库建设及应用
履历表格这样填
济宁市城乡建设用地增减挂钩政策实施评价
表格图的妙用
河南划定永久基本农田超1亿亩
城乡建设用地增减挂钩政策的演变