需求:

在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. torch.optim优化算法理解之optim.Adam()

    torch.optim是一个实现了多种优化算法的包,大多数通用的方法都已支持,提供了丰富的接口调用,未来更多精炼的优化算法也将整合进来. 为了使用torch.optim,需先构造一个优化器对象Opti ...

  2. javascript 宽度和高度

    宽度和高度 对于编写css代码时,宽度和高度就是width和height 但是在JavaScript中,还有其他的宽度和高度,比如offsetWidth,offsetHeight,clientX,cl ...

  3. Java如何计算hashcode值

    在设计一个类的时候,很可能需要重写类的hashCode()方法,此外,在集合HashSet的使用上,我们也需要重写hashCode方法来判断集合元素是否相等. 下面给出重写hashCode()方法的基 ...

  4. codeforces 1230 div2

    C 给一个图,并且在边上放上多米诺骨牌,使得每个多米诺骨牌指向的顶点的数字是一致的,并且每种骨牌只能用一种.问最多能够覆盖多少条边. 先生成每一个点指向的数字,然后判断就好了. #include< ...

  5. ios9.3.3 h5的js代码全部失效

    做微信公众号页面时,ios9.3.3 h5的js代码全部失效描述: 机型iphone6 plus,ios9.3.3js代码全部失效,刚开始还以为是ios和jq兼容问题, 后来发现是es6语法不能读,导 ...

  6. 一次操作系统报错OutOfMemory Error的处理记录

    在启动公司内嵌的tomcat容器时出现报错, 如下: # There is insufficient memory for the Java Runtime Environment to contin ...

  7. H3C 多路径网络中环路产生过程(1)

  8. linux scull 的设计

    编写驱动的第一步是定义驱动将要提供给用户程序的能力(机制).因为我们的"设备"是计算 机内存的一部分, 我们可自由做我们想做的事情. 它可以是一个顺序的或者随机存取的设 备, 一个 ...

  9. linux内核符号表

    我们已经看到 insmod 如何对应共用的内核符号来解决未定义的符号. 表中包含了全局内 核项的地址 -- 函数和变量 -- 需要来完成模块化的驱动. 当加载一个模块, 如何由模块 输出的符号成为内核 ...

  10. WindowsDOS命令添加/创建/修改/删除服务

    添加服务 sc <server> create [service name] [binPath= ] <option1> <option2>... 在注册表和服务数 ...