李娜,张永玉,王波,王金贵,贾华峰
(山东正元地理信息工程有限责任公司,山东济南 250101)
随着城市建设的不断发展,城市规划数据将不断更新,数据库的时效性是系统保持活力的保障,利用版本进行数据更新审批操作,能够保证数据库不被随意改动,且能够完成数据审批未通过时的更新回滚。
版本是整个数据库的副本,但不是数据库的复制,能够保存数据库的更新变化,在ArcSDE的数据库中,通过存储数据库的变化内容,实现数据库多版本并存。一个Geodatabase能够有很多Version,但数据库中只保存一套 Tables 和 Feature Classes[1]。
Versioning使得多个用户能够同时编辑一个Geodatabase,不用去复制数据库或者锁定数据库;用户在选定的版本中可对数据进行长时间的编辑,不影响其他用户的操作,可解决多用户并发操作和长事务处理问题。
ArcSDE版本按树状结构组织,最高版本是“Defatllt”版本,反映数据库当前状态,其他版本均为其子版本,各子版本只保存对数据库的修改,且更新修改必须向Default版本提交后才能生效。
城市规划数据需要更新的数据主要包括:
(1)规划图库
规划图库是指规划数据成图,主要包括总体规划图、控制规划图、修建规划图等。
(2)红线图库
红线图库是指各种红线数据,主要包括用地红线、范围红线、建筑红线、道路红线、市政红线等[2]。
规划管理部门所拥有的规划及基础地形数据,均为按照标准制定的CAD数据,针对个别不规范CAD数据需进行预先处理。规划数据主要包括控制性规划、修建性规划以及总体性规划的线、面数据,地形数据主要是测绘外业形成的地形图。
3.2.1 CAD数据检查
(1)图形数据分层正确性检查:确保图层划分标准化。
(2)图层命名规范性检查。
(3)图形拓扑检查。
在图中包含了几种需要纠正的图形情况:线交叉、节点未闭合的情况是属于几何裂缝;中间无节点的情况是指两线交叉但没有交点,称为T形线;悬挂线是指不属于某个实体的多条线。对于较小的几何裂缝只要用捕捉方式连接节点即可[4]。逻辑裂缝是指某一空间实体的组成元素位于不同图层,看似一个整体,实际存在逻辑错误,这种情况通过分层查看的方法可以检查出来。
图1 图层拓扑错误示意
3.2.2 数据预处理
(1)图层转换
转换CAD中存放错误图层的数据。
(2)图层筛选
删除无用图层,只留下需要更新的图层。主要包括:道路中线、道路红线、道路缘石线、道路绿化带、规划范围线等线层数据和规划用地地块线图层。
(3)根据填充图层生成地块边界线
有些CAD数据只有图案填充,没有边界线,这时就需要重新生成边界线,利用CAD重新创建边界。
(4)图形闭合处理
利用AutoCAD的Pedit命令,将选择的待合并的多条线段(或全选)进行闭合处理。
(5)T形线处理
打断线并添加交点。
城市规划数据更新入库操作,即将经过拓扑检查后的外业CAD数据,导入数据库的过程。数据入库的过程[3]一般需要经过如下步骤:
(1)版本的选定
为了保护原有数据库不被随意改动,有效控制城市规划数据审批流程,只有经过领导审批通过的数据,才最终更新到现有数据库中,在数据更新操作之前,定义权限版本,负责更新数据的工作人员,仅限于在选定版本中修改数据库,对于现有数据即最高级Default版本数据不能直接修改。
(2)更新范围确定
更新由规划管理部门提供或根据给定的CAD图划定,一般采用闭合曲线的形式,将其以Feature形式保存到数据库或存储到公共变量,以便作为原图裁剪的边界线。
(3)原数据库数据的裁剪和删除
城市规划数据分为点、线、面数据,点数据最简单,这里详细介绍线、面的裁剪。在规划更新的范围内,一般较少涉及面被裁断的情况,但线数据一般指道路中线、道路红线数据,一般都会有裁断,可以根据实际情况选择是否将Feature裁断。裁剪和删除的主要功能代码如下:
(4)CAD数据导入SDE数据库
为了防止将CAD中的闭合线数据作为面数据入库,将城市规划数据分为线数据和面数据分别入库,线数据入库时,线层上的闭合数据将被自动读取为面,需要转换为线,如下面代码所示:
对于面数据,只需要读取CAD数据的Polygon即可,数据入库的同时,将所在图层及分类信息存储到数据库,以方便数据的符号化显示。
图2 裁切原图后的效果
图3 CAD更新入库后的效果
(5)Feature类拓扑关系处理及数据接边处理
数据在导入数据库时先放任拓扑错误的产生,然后再对导入的数据进行拓扑检查,常见的拓扑错误有地物重叠、压盖、交叉等,采用ArcGIS的空间分析接口esriSpatialRelEnum中的拓扑类型对数据进行拓扑处理。
esriSpatialRelEnum接口中空间关系的类型主要有esriSpatialRelContains、esriSpatialRelCrosses、esriSpatial-RelEnvelopeIntersects、esriSpatialRelIntersects、esriSpatialRelOverlaps、esriSpatialRelRelation、esriSpatialRelTouches、esriSpatialRelWithin;利用这些关系的判断,使用IToplogicalOperator接口分别对不同的拓扑错误进行处理,如进行Difference运算,可以实现图形的求差,进行Intersect运算实现求交集,进行Union运算对图形合并,进行Clip运算对图形进行裁剪。
对于多图形压盖的拓扑错误,采用按照面积大小依次抠除的方式,对面进行裁剪。对于线拓扑错误,程序处理仅能够实现容差内数据的裁剪。
图形接边也是数据入库后的一个重要组成部分,对图形边界两侧的数据,程序设定容差,对于相同属性的地物进行合并运算,并相应添加和修改节点,但不能处理所有接边问题,对于较复杂的接边,需要人工干预,实现属性的对接及图形接边。
在特定版本上更新的数据不能直接更新到现势库,必须通过提交审批通过后,通过版本压缩提交实现现势数据更新。
需要修改数据的人员可以建立Default版本的子版本,或者由管理员赋予权限的版本列表中选定。版本列表显示版本的父子关系,版本压缩提交时,均将更新提交到其父版本。
为实现城市规划数据的更新审批,对于审批流程中的不同角色,需要设置不同的操作权限,如版本数据的查看、编辑、提交、审批等操作,均需要授权才能够行使。操作者只能在权限范围内操作版本数据[5]。
规划局数据更新审批的流程一般定义为:数据更新人员→科长审批→分管局长审批→局长审批→确认入库。
图4 数据更新流程定义
更新流程定义好后,就可以启动流程,进行数据更新审批操作。数据更新至工作库后,即自动添加到代办箱的待提交数据中,提交了的数据即进入待审批数据中,审批通过了的数据进入待正式入库数据中,审批未通过的,进入待重新入库数据中。
用户在某版本上所做的修改工作,经过各项审批后,可以通过提交到Default版本后生效,这就完成了数据更新及审批入库的操作。
多用户并发操作时,如果多个用户对同一空间要素进行了不同的更新,则会使得版本更新提交时产生冲突。版本协调和提交使用的方法为:IVersionEdit下的 Reconcile("SDE.DEFAULT")和 Post("SDE.DEFAULT");版本提交冲突的获取接口为:IConflictClass,系统中将所有版本修改提交到Default版本[6]。
文章将数据更新版本与流程相结合,详细阐述了城市规划数据基于版本的更新及审批过程,为数据的更新入库、接边以及审批流程提供了一种新的操作手段。
[1]邹时林,陈红华,谢刚生等.基于ArcSDE的版本管理与历史回溯设计与实现[J].东华理工大学学报(自然科学版),200812,31(4):357 ~360
[2]刘俊亮,刘传立.城市规划地理信息系统的设计与开发[J].科技情报开发与经,2006,16(10):236 ~237
[3]陆剑峰,张浩.数据仓库数据更新的研究及基于Oracle数据库的开发与应用[J].计算机工程与应用,2006.26:168~172
[4]朱宏斌,陆海英等.城市基础地理信息数据库更新方案研究[J].测绘通报,2011(1):25~27
[5]都玉水,周刚等.拓扑自动发现中数据更新策略的研究[J].北京航空航天大学学报,2004,30(1):35 ~39
[6]操震洲,李清泉.基于ArcSDE和ArcGIS Engine的版本管理系统的设计和实现[J].测绘与空间地理信息,2006,2(1):77 ~78