ArcEngine版本管理(Version)项目总结
需求:
在ArcGIS项目中,大型的数据库都是使用ArcSDE进行连接管理。使用的数据版本(Version)都是默认版本(sde.default)。这样多个人员在编辑的过程中就直接编辑的是默认版本数据。只要能够连接数据库就可以对默认版本进行随意的更改。一旦编辑保存到数据库之后就无法更改,除非有数据库备份,使数据编辑变得不灵活。
解决方案:
ArcGIS是有数据版本就出来了。数据库版本可以以默认版本(sde.default)为模板,创建多个子版本(Version)。然后用户编辑子版本的时候对父版本没有任何的影响。当数据编辑完后,确认数据编辑没有问题就可以将数据提交到默认版本(sde.default)。
环境:WIN10+ArcEngine10.1+ArcMap 10.1
资源:
ArcGIS Engine开发的ArcGIS 版本管理的功能
资源上面说的很清楚了,我就不重复了,说说开发中遇到的坑吧
1、创建版本(Version)所需权限
创建版本的时候需要GeodatabaseGDB的权限,如果没有在调用CreateVersoin方法的时候会出现如下错误:The application is not licensed to perform this operation
这个时候需要在LicenseControl控件勾选如下许可:
或者在代码许可注册的地方写成如下许可:
bool b = m_AOLicenseInitializer.InitializeApplication( new esriLicenseProductCode[] { esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB }, new esriLicenseExtensionCode[] { esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst, esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst });
PS:
许可注册的时候只能注册一次,第二次无效。所以要确保第一次注册的许可能够创建版本。
2、子版本(Version)数据提交
在提交数据的时候,需要使用ArcEngine的IEngineEditor接口打开编辑,在调用StartEditing方法时需要传如工作空间(IWorkspace)和地图对象(IMap)。这里的工作空间需要和当前地图版本的工作空间统一(不同版本也存在各自的工作空间),否则调用StartEditing方法时会报错。所以在提交版本数据的时候需要将地图中的数据版本切换到当前提交的版本。
提交版本时需要调用Reconcile4方法进行冲突验证,否侧调用CanPost为false。验证冲突后如过有冲突需要马上解决,否则系统会自动解决冲突。
3、子版本数据编辑
如果使用ArcEngine开发的代码进行数据编辑,在编辑的时候需要调用IWorkspaceEdit的StartOperation方法,编辑结束后调用StopOperation方法。如果不调用该方法,编辑的数据会自动保存到父版本。
4、注册数据
编辑数据的时候需要注册数据,否则无法编辑数据,注册方法如下:
点击后会出现如下对话框,该对话框中的复选框比较重要:
"是否将该注册的图层编辑的基表内容进行同步"
因为新增版本相当于在数据库中插入了一条记录,用于该版本数据编辑时做记录。基表指的是父版本,如果勾选了,如果编辑了父版本的内容,当提交该版本的时候,父版本的其它子版本的父版本数据也会随之改变。这样造成冲突的情况就很很少。
如果不勾选,子版本提交的内容不会对其他子版本有任何影响,所以建议不勾选。
这里会产生疑问:如果两个字版本都编辑了父版本的相同内容。他们依次提交不会产生冲突么。
如果在注册数据的时候勾选了复选框,就不会产生冲突。因为一个子版本提交后。另一个的子版本的父版本数据也随之同步。这样就不会产生冲突。如果不勾选,就会产生冲突,这个时候就可以使用ArcGIS的冲突解决机制了。
posted on 2017-10-17 16:45 Geography爱好者 阅读(1190) 评论(0) 编辑 收藏 举报