需求:

在ArcGIS项目中,大型的数据库都是使用ArcSDE进行连接管理。使用的数据版本(Version)都是默认版本(sde.default)。这样多个人员在编辑的过程中就直接编辑的是默认版本数据。只要能够连接数据库就可以对默认版本进行随意的更改。一旦编辑保存到数据库之后就无法更改,除非有数据库备份,使数据编辑变得不灵活。

解决方案:

ArcGIS是有数据版本就出来了。数据库版本可以以默认版本(sde.default)为模板,创建多个子版本(Version)。然后用户编辑子版本的时候对父版本没有任何的影响。当数据编辑完后,确认数据编辑没有问题就可以将数据提交到默认版本(sde.default)。

环境:WIN10+ArcEngine10.1+ArcMap 10.1

资源:

ArcGIS Engine开发的ArcGIS 版本管理的功能

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的冲突解决机制了。

ArcEngine版本管理(Version)项目总结的更多相关文章

  1. 10 Maven 版本管理

    Maven 版本管理 一个健康的项目通常有一个长期.合理的版本演变过程.例如 Maven 本身的版本也比较多,如最早的 Maven1:Maven2 有 2.0.9.2.0.10.2.1.0.2.2.0 ...

  2. 《Maven实战》第13章 版本管理

    版本管理:项目整体版本的演变过程的管理,如从1.0-SNAPSHOT到1.0,再到1.1-SNAPSHOT 版本控制:借助版本控制工具追踪代码的每一个变更 13.1什么是版本管理 版本管理:项目整体版 ...

  3. Maven项目中的pom.xml详解【转】

    什么是pom? pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url, ...

  4. [BI项目记]-对项目文件进行规划

    BI项目中会有很多不同种类的项目,此篇会对这些项目进行一个总结,并且在TFS中进行分类. 根据笔者对BI项目的经验和理解,主要将BI项目中的项目类型进行如下分类: DB脚本 DB脚本是BI项目中重要的 ...

  5. Maven项目pom.xml文件详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  6. 规范化的软件项目演进管理--从 Github 使用说起

    规范化的软件项目演进管理 从 Github 使用说起 1   前言 首先,本文的层次定位是:很基本很基础的 Github 工具的入门级应用,写给入门级的用户看的. 基本上工作过几年的人,下面描述的这些 ...

  7. 项目开发之使用 maven

    本文将详述 maven 在软件项目中的使用.首先讲述 maven 的基本工作原理及环境的搭建.然后讲述开发及配置管理人员如何使用 maven,最后将介绍 maven 与 eclipse 集成使用. m ...

  8. 使用maven编译Java项目 http://www.tuicool.com/articles/YfIfIrq

    使用maven编译Java项目 时间 2014-07-17 17:42:37  Way Lau's Blog 原文  http://www.waylau.com/build-java-project- ...

  9. Maven实战(二)构建简单Maven项目

    上一节讲了maven的安装和配置,这一节我们来学习一下创建一个简单的Maven项目 1. 用Maven 命令创建一个简单的Maven项目 在cmd中运行如下命令: mvn archetype:gene ...

随机推荐

  1. 我去!JS的原型是咋回事?

    我去!JS的原型是咋回事? 最近写公司的项目,写着写着发现自己的原型的理解还是不够透彻,又去网上查了一番资料,顺便总结一下,在顺便给到的朋友能提供一点帮助.如有遗漏,欢迎交流. 原型是啥?为什么要用原 ...

  2. 2019-4-12-WPF-绑定的默认模式

    title author date CreateTime categories WPF 绑定的默认模式 lindexi 2019-04-12 09:38:58 +0800 2019-04-12 09: ...

  3. H3C 环路避免机制一:路由毒化

  4. 【p083】传球游戏

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样 ...

  5. 打地鼠游戏(2)之定义地鼠函数及函数原型 prototype

    在JavaScript中,prototype对象是实现面向对象的一个重要机制. 每个函数就是一个对象(Function),函数对象都有一个子对象 prototype对象,类是以函数的形式来定义的.pr ...

  6. EJB实例

    两种管理机制: 无状态bean使用实例池技术管理bean 有状态bean使用激活(activation)管理bean 内存对象序列化到磁盘 磁盘反序列化到内存

  7. dotnet 数组自动转基类数组提示 Co-variant array conversion 是什么问题

    在 C# 的语法,可以提供自动将某个类的数组自动转这个类的基类数组的方法,但是这样的转换在 Resharper 会提示 Co-variant array conversion 这是什么问题? 在 C# ...

  8. WPF TreeView 展开到指定节点

    最近在做一个交换机管理的项目,有一个交换机的树,做树的搜索的时候 展开节点居然有点难,自己记录下来 ,以后用的到的时候可以看一下. 展开代码如下,其中 SwitchTree是treeview空间的名称 ...

  9. LabWindows/CVI基础

    1.LabWindows/CVI了解 提到NI公司,大家可能最先联想到的是NI公司推出的LabVIEW软件.LabWindows/CVI与LabVIEW相比,主要应用在各种测试.控制.故障分析及信息处 ...

  10. 工厂设计模式灵魂拷问-Java实现

    show me the code and take to me,做的出来更要说的明白 GitHub项目JavaHouse同步收录 喜欢就点个赞呗! 你的支持是我分享的动力! 引入 我们经常听到工厂模式 ...