基于ArcSde与ArcEngine实现控制性详细规划的版本控制
2016-05-30莫忠荣
莫忠荣
【摘 要】控制性详细规划的编制、维护与管理是一项基础的、重要的、长期的任务,随着社会的快速发展和城乡一体化进程的加快,控制性详细规划的编制与审批也处于不断深化、完善与调整的过程。如何在数据库中记录其变化的过程,以及在地图显示窗口回放历史版本数据,文章通过对ArcSde中的数据存储进行详细分析,结合ArcEngine进行必要的开发,实现控制性详细规划的版本控制。
【关键词】ArcSde;ArcEngine;控制性详细规划;版本控制
【中图分类号】P208;TU984【文献标识码】A 【文章编号】1674-0688(2016)01-0050-04
0 引言
控制性详细规划是引导和控制城镇建设发展最直接的法定依据,是具体落实城市、镇总体规划各项战略部署、原则要求和规划内容的关键环节,用以指导国有土地使用权的划拨、出让和开发建设[1]。
南宁市规划局从2005年起,就开始了控制性详细规划的编制与审批,随着控制性详细规划成果的不断完善和调整,需要如实记录并管理空间数据库中控制性详细规划成果在变更、演化过程中各个阶段的状态信息,做到“编制—审批—入库—调整再入库”的全过程跟踪和备案。本文结合关系数据库管理系统(Related Database Manage System,RDBMS)、地理信息系统(Geographic Information System,GIS)等技术,利用ArcSde与ArcEngine实现对控制性详细规划——以地块图元为例的版本控制,有效地维护空间的完整性和时间的连续性。
1 ArcSde与ArcEngine功能介绍
1.1 ArcSde介绍
ArcSde是Arcgis的空间数据引擎,也称空间数据加强,采用的是客户/服务器体系结构。它是存储和管理RDBMS的多用户空间数据库。從空间数据管理的角度看,ArcSde是一个连续的空间数据模型,借助这一空间数据模型,可以实现用RDBMS管理空间数据库,改变了传统的文件系统存储方式,直接由空间数据库统一管理,提高了数据的安全性和稳定性。由于空间数据库规模的扩大、用户数量激增及用户需求的日益多样性,GIS的数据处理工作流和数据共享机制需要长事务的支持,以完成数据维护人员对空间数据的编辑修改和历史数据的回放管理。
1.2 ArcEngine介绍
ArcEngine是2004年由美国ESRI公司发布的,它提供了一系列可以在ArcGISDesktop框架之外使用的GIS组件。ArcEngine的出现对于需要使用ArcObjects的开发人员来说是一个福音,因为ArcEngine发布之前,基于ArcObjects的开发只能在庞大的ArcGIS Desktop框架下进行[2]。ArcEngine是独立的嵌入式组件,它包括核心ArcObjects的功能,是对AO中的大部分接口、类等进行封装所构成的嵌入式组件。
2 功能实现
2.1 创建空间数据库
在oracle 10g中创建一个实例名为ghsde的空间数据库,专门用以存放城乡规划数据成果,空间数据库中的每一张表对应着一个要素类(feature class),如Kmkg_poly存放的是控制性详细规划地块图元的空间数据和属性。在空间数据库中对应的表是Kmkg_poly,存放的数据和features class相同。
2.2 版本注册
在进行地块图元的编辑前,在arccatalog中对Kmkg_poly进行注册版本register as versioned(如图1所示),在上述基础上再生成历史版本控制enable archiving(如图2所示),在ghsde空间数据库中相对应地生成一个Kmkg_poly_h的表。其中,该表中有2个时间点字段,gdb_from_date记录的是对应某条记录的原始状态时间,gdb_to_date记录的是对应某条记录的修改状态时间,在历史版本回放的功能中,主要根据gdb_from_date与gdb_to_date来针对某地块图元进行检索回放。
2.3 地块图元的数据要求
为了实现控制性详细规划地块图元的版本控制,需要对地块图元进行唯一标识,即每个地块图元赋予唯一的地块编码,同时该地块编码字段要求不可空。
2.4 在空间数据库中的体现
我们以地块编码为DJIA-157为例,分别就历史版本控制表kmkg_poly_h、数据添加表A表、数据删除表Delta表进行详细说明。
2.4.1 历史版本控制表kmkg_poly_h
Select a.地块编码,a.土地使用性质代码,a.土地使用性质,a.shape.area,,a.gdb_from_date,a.gdb_to_date
from kmkg_poly_h a where a.地块编码 like 'DJIA-157',查询结果见表1。
从表1中可以看出,地块编码为DJIA-157控制性详细规划地块图元从2009年9月4日到2010年7月12日期间做了2次改动,其中2010年2月22日下午16:10:17对该地块图元四至范围界线进行了修改,2010年7月12日上午11:23:33对该地块图元的土地使用性质做了变更,由医院用地调整为行政办公用地。
当要素类注册版本以后,该表存储新增加的记录,由于DJIA-157被修改了2次,那么相应的地图操作也是做了2次数据的增加和删除操作,利用sql语句对空间数据库中的Delta表(A表\D表)查询检索,得出如表2、表3的结果。
2.4.2 数据添加表A表
select B.OBJECTID,b.地块编码,b.土地使用性质代码,b.土地使用性质from a1432 b where b.地块编码 like 'DJIA-157';从表2可以看得出来,objectid为16963和22087的记录是不同时间点新增加的数据。
2.4.3 数据删除表D表
select * from d1432 c where c.sde_deletes_
row_id in(1161,16963);从表3可以看出,objectid为1161与16963的记录是不同时间点删除的数据。
从时间点上来看,1161的记录删除与16963的记录增加对应着地块边界的修改,16963的记录删除和22087的记录增加对应着地块用地性质的修改。
2.5 功能的实现
调用kmkg_poly_h表的历史数据,具体部分代码如下:
ipFWS:= ipWorkspace as IFeatureWorkspace;
//直接查找此记录编辑操作的_H表
ipFWS.OpenFeatureClass(sFtrCls-
Name+'_H',ipFtrcls);
ipFtrly:= CoFeaturelayer.create as IF
eatureLayer;
ipFtrly._Set_FeatureClass(ipFtrcls);
ipFtrly.Set_ScaleSymbols(true);
ipFtrly.QueryInterface(IID_IGeoFea-
tureLayer,ipGeoFtrly0);
iplayer:= ipFtrly as ILayer;
wsQry:=m_strDkbmField+'='''+sDkbmVal-
ue+'''andGDB_FROM_DATE=to_date('''+GDBFR-
OMDATE+''',''yyyy-mm-dd hh24:mi:ss'')';
iplayer1: = TreeNodeInfoh(Node.Data)^.ipLayer;
if iplayer1<>nil then
begin
ipFeatLy: = iplayer1 as IFeaturel-
ayer;
ipFeatLy.QueryInterface(IID_IG-
eoFeatureLayer,ipGeoFtrly1);
if ipGeoFtrly1 <> nil then
ipGeoFtrly1.Get_Renderer(ip-
FeatRenderer);
//wsQry1: = ' 地块编码<>'''+sDkbmValue+'''';
wsQry1 := m_strDkbmField+
'<>'''+
sDkbmValue+'''';
ipFeatLy.QueryInterface(IID
_IFeatureLayerDefinition,ipFLDef1);
ipFLDef1.Set_DefinitionExpression(wsQry1);
end;
實现的版本控制视图界面如图3所示。
通过对照图3,我们可以很清晰地看出DJIA-157地块图元的历史演变过程,如果需要对2009年9月4日的图斑进行重现,直接在2009-9-4 21:22:44上点击鼠标,就可以回放图3顶端的地图窗口,其他的时间点回放也是采用类似的操作。
3 结束语
依法制定和实施控制性详细规划,是城市、镇政府的职责,是城乡规划主管部门一项重要的日常法定工作,一经批准,即对社会具有广泛的约束力,任何单位和个人不经法定程序,不得随意修改经批准的控制性详细规划。从某种意义上说,实现控制性详细规划的版本控制,一是可以根据日志功能捕捉未经批准就进行修改的恶意行为,二是可以保持数据在空间上的完整性和时间上的延续性。
参 考 文 献
[1]吴俐民,丁仁军,冯亚飞,等.城市规划信息化体系[M].成都:西南交通大学出版社,2010.
[2]李娜娜.基于ArcSDE的“数字城市”基础地理空间数据库的实现[J].科技信息,2011(8):247-248.
[3]吴志强,周晓光.基于ArcSDE和ArcEngine的管道燃气数据增量更新[J].地理信息世界,2014(2):78-83.
[责任编辑:陈泽琦]