ArcGIS Version版本编辑(自己总结的)
1.什么是版本,版本的机制如何 2.版本编辑过程演示 3.开发中的思路
4.仿照ARCMAP进行AE开发
1.什么是版本,版本的机制如何
对于版本的基础知识,我了解的也不是很全面,最初看到了大讲堂里 萝卜兔子 讲的“Geodatabase and ArcSDE系列讲座 第四部分:Versioning(版本)”感
觉介绍的很具体详细,索性偷懒借用过来!
http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3920&extra=page%3D
1
Versioning使得多个用户能够同时编辑一个Geodatabase,而不用去复制数据库或者锁定数据库。一个Geodatabase能够有很多Version,事实上不管一个Geodatabase有多少个Version,数据库中只保存一套Tables和Feature Classes。Version是对Geodatabase的快照,而不是复制。对所有版本的编辑都是保存在Delta表中的。通过创建Version,
多个用户可以同时对一个Geodatabase进行编辑,而且多个用户也可以同时编辑一个Version。
个人数据库和文件工作空间是没有版本功能的。
在ArcCatalog和ArcMap中,可以像未版本化的数据一样实现数据的查询、浏览和编辑。当用户连接一个多用户的Geodatabase时,通常需要选定连接哪个Version。
所有的ArcSDE Geodatabase均具备Default 版本,所有版本的最原始的源就是Default版本。能够通过提交更新的方式来维护和更新Default版本,也可以对其直接编辑。
用户在创建版本时,可以为版本设定访问权限。对某个版本的编辑只会应用到该版本,而某个版本中Schema的变化则会影响到所有其它的版本。一
旦停止编辑,可以将编辑结果提交到任意父版本。首先要Reconcile,即比较提交版本中的数据与父版本是否有冲突,如果有冲突则提供冲突解决办法。然后就是Post,则将编辑结果提交到父版本。
每一个Table和Feature Class包含两个Delta表:A表和D表。每次更新或者删除版本中的一个记录时,则可能对一个或者两个Delta表进行修改。一个Version包含所有的Original 表以及所有的Delta表的变化,当显示和查询一个版本时,ArcGIS是从Original表和Delta表中查找相应的信息。
对于Feature Class和Table的所有编辑,不管是位于哪个Vision中,都是保存在相同的Delta表中。因此Base中的所有行,以及A和D表的所有记录表示了Feature class和Table的所有版本的信息,任何一个版本都是这三个表的子类。
ArcGIS记录Delta表中的记录属于哪个Version的办法是:A表和D表的每一行都用State ID进行标识。当编辑一个版本时,产生一个新的State,同时产生新的一行添加到A表或者D表。一个系列的States记录了版本从Base表到当前状态,该系列称为Lineage。当你显示或者查询一个Version时,ArcGIS从版本的Lineage中得到State ID,然后从A表和D表中找到相应的信息。
当编辑Geodatabase时,Delta表的大小和State的数量都在增加,表格与State越多,每次处理时的速度就越慢,因此应该定期利用ArcCatalog中的Compress工具进行数据库压缩,利用Analyze工具实现数据库的Statistics的重建。
在进行数据库处理的时候,有三种选项:Registered As Visioned without the option to move edits to base ,registered as visioned with the option to move edits to base,not registered as versioned.
(1) Registered As Visioned without the option to move edits to base
能够实现的操作包括Undo和Redo操作、长事务编辑、为设计和工程使用命名版本、使用Geodatabase归档、使用数据库复制。
不能做的事:创建拓扑、从拓扑中添加或删除要素、添加和删除拓扑规则、创建
几何网络、从几何网络中添加或删除要素类。
(2) registered as visioned with the option to move edits to base 不能够做的事:编辑参与拓扑和几何网络的要素类、数据库归档、数据库复制
(3)not registered as versioned
是最原始的状态,能够实现复杂数据类型,包括拓扑和几何网络的编辑与更新。因为Default版本是数据库中最关键的,需要经常更新,因此需要对Default版本定期备份。
如果用户注册版本时采用的是Register with the option to save edits to the base table,编辑简单要素时,编辑的结果还是保存在Delta表中,一旦保存,则这些变化就要从Delta表转移到Base Table中,而在Delta表中不再保存编辑的结果。用户如果编辑的不是Default版本,则变化也是记录到Delta表中,Save以后,变化也依旧保留在Delta表中,然而当Reconcile和Post到Default版本以后,变化就转移到Base 表中了。如果是将版本中的变化Reconcile和Post到非Default版本,则在Delta表中依旧会保留变化信息。Register with the option to save edits to the base table的缺陷就是一旦编辑错误,不能够回退,只能够放弃整个编辑过程。这种方法主要是使得第三方应用能够在版本化的环境下执行类似Non-Version 编辑,而ArcGIS用户是不能够通过这种设置来实现Non-Version编辑的。
第三方应用(非ArcGIS软件或者非AO开发的软件)通常是只能对Base Table进行查询,不能够看到Delta表中的变化。如果将数据注册为版本化,而不选择move the edits to the base table,当用户还没有将编辑结果Reconcile和Post到Default版本时,第三方用户是无法看到其他版本的编辑情况。 Unregistered as Versioned将使得用户保留上一次Compress后的数据,而未Compress的数据则将丢失。
对于海量的、多用户的数据库,可以使用自动Reconcile和Post的功能。有两种方式可以实现:Batch Reconcile和Version Reconcile Services 在版本化编辑中,可以多个用户同时编辑一个版本中的数据,也可以多个用户同时编辑同一数据库的不同版本。这两种情况会导致以下两种冲突的发生:
(1)多个用户同时编辑一个版本中的数据:当多个用户同时编辑一个Version时,对每个用户都创建一个Edit Session,每个用户都不能看到其他用户的编辑状态,只有用户Save Edits以后,才能够看到其他用户的编辑状态。
如果多个用户同时对一个要素做了不同的操作,则会发生Conflicts,在保存编辑结果时,会出现冲突信息,则根据在Editing Options的Versioning面板上设置的Preferences来处理冲突,看应该保存哪个用户的编辑结果;
(2)如果是子版本和父版本的编辑发生冲突,则在Reconcile的时候会出现冲突信息,用户可以手动去解决冲突;如果用户正在查看的版本又被提交了新的内容,则用户只有Refresh以后,才能看到更新以后的内容。
2.版本编辑过程介绍
经过理论的了解,下面通过ARCMAP操作来介绍版本编辑过程。
注:个人数据库和文件工作空间是没有版本功能的。
首先加载SDE数据,之后……
1.建立新版本:右键添加Versioning工具,单击Creat New Version建立新Version
2.Change Version:将TOC转换为Source,右键SDE,单击ChangeVersion选项,
在弹出的窗体中选择新建立的版本名或其他版本。
3.开始编辑:注:在编辑前确保版本已注册(详细请看第一章内容)
(©tianshen2330)
4.点击Versioning工具栏的Reconcile进行版本协调,如产生冲突则弹出对话框
询问是否修改。在点击后,会有个对话框弹出,那里可以选择当前数据是根据父版本一直,
还是根据当前编辑版本一致,这里一定要注意!
5.点击Versioning工具栏的Post按钮将协调后的数据Post到Default版本
以上五个步骤在图1中已经标出,想试的可以按照步骤来。
如果你做不出版本冲突,下面我教你个绝招。
在打开DEFAULT版本后,建2个新的版本,然后分别对2个版本里的相同数据进行不同的修改,且不要执行Reconcile和post过程,保存并结束编辑。在2个版本都修改好以后,进入一个版本执行Reconcile和Post过程,将该版本的修改Post到Default版本中去。再进入另一个版本,这时执行Reconcile过程就会产生冲突。(©tianshen2330)
注意的是,当冲突协调后,如果想保持冲突不变,则千万不要执行POST和SAVE过程,直接结束编辑并不保存,这样,在下次编辑时仍然会产生冲突。在开发过程中,可以
通过这种方法反复测试冲突协调过程,百事不爽!
图二中所示的为Reconcile后数据产生冲突的协调窗口。在这里可以看到冲突数据的4种状态, Current 当前状态、 Pre-Reconcile目标版本在检测冲突之前的状态、Conflict 目标版本在冲突检测开始的时候的状态、CommonAncestor当前版本和目标版本的共同祖先。通过右键弹出的菜单,可以轻松的将当前状态转换成后面任意3种状态。
(©tianshen2330)
第三部分我会尽快发上来的!
[ 本帖最后由 tianshen2330 于 2007-11-10 00:27 编辑 ]
conflict2.jpg (158.7 KB)
图1
conflict1.jpg (179.01 KB)
图2
三 开发中的思路
由于工作的原因,自己对版本的总结只更新了两个部分就放下了。这两天
发现我的这个帖子又被从后面翻了出来,很欣慰。
决定凭记忆接着把下面没有完成的尽量补上来。过了4个月不知道还能记得多少,最近一致在弄ims的adf开发,很少弄ae的东西了,ae的环境也卸载
了,所以一些截图和代码可能会少点,有机会我再补上来吧。
下面第三部分
三 开发中的思路
在AE开发中的版本编辑过程与ARCMAP操作中的步骤相一致。通过对ARCMAP的操作我们可以轻松的掌握整个版本编辑的流程,通过流程来进行分步开发。
加载数据-转换版本-开始编辑-Reconcile过程-post过程-结束编辑
上面的过程较为粗糙,中间忽略了很多细节,如版本注册等,这些都可以在AE
给的例子中找到,我也会在下面放出例子下载。(例子都是VB的代码,如果你们用的是别的开发语言,又找不到例子,那么一定要来看VB的例子,至少你会
知道用到什么接口去实现。而且vb也很好懂!)
深知大家积分有限,我将6个例子打包发上来,如果不想花钱的话,就去ArcGIS\\DeveloperKit\\SamplesCOM\\Geodatabase 这里找吧,文件名如下:
Manage_versionsVisual_Basic Archive_with_PostVisual_Basic
Change_Current_Version_in_ArcMapVisual_Basic
Filter_ConflictsVisual_Basic
Reconcile_SDE_versions_in_batch_modeVisual_Basic Show_differences_between_two_versionsVisual_Basic
第四部分只能全凭记忆了,电脑里vb环境都没有,有点难度,哈哈
因篇幅问题不能全部显示,请点此查看更多更全内容