在 Standard 或 Advanced 许可等级下可用。
在协调目标版本和正在编辑的版本时 ArcGIS 会检测到冲突。在以下几种情况下发生冲突:
- 在当前正在编辑的版本和目标版本中对同一要素进行更新。
- 在一个版本中更新某个要素,同时在另一版本中删除该要素。
- 在当前正编辑的版本和目标版本中修改拓扑结构上相关的要素或关系类。
如果存在冲突,ArcGIS 会对其进行解决,具体依照编辑版本表示还是目标版本表示将取决于首选项设置。冲突解决后,您可以逐一检查这些冲突,如有必要,可进行任何更改。例如,如果依照编辑版本解决了冲突,您可以选择依照目标版本进行替换,或者使用编辑工具通过其他方式对其进行修改。
交互式冲突解决机制
如果在协调时检测到冲突,您可以选择使用交互式冲突 对话框对其进行查看。此对话框中包含了所有冲突类及其处于冲突状态的要素或行。它还可用于执行以下操作:
- 确定处于冲突状态的字段或行。
- 查看冲突。
- 通过指定用来代替要素或属性的表示以解决冲突。
确定处于冲突状态中的字段或行
冲突 对话框左上角的列表框可显示所有冲突类和要素。此“冲突”列表可以使您了解已检查的冲突的总数以及所有要素类中的冲突总数。最初,这些数字是相等的。在以下示例中,冲突中共存在两个对象,而且未对其中任何一个对象进行检查:
Conflicts (2/2)
“冲突”下为包含冲突的要素类(后面的每个数字表示该要素类中所访问或替换的冲突的数量以及该要素类中的冲突数量)的列表。在本示例中,两个要素类各包含一个冲突:
Conflicts (2/2) sde.RJP.ponds (1/1) sde.RJP.lakes (1/1)
各要素类下会列出处于冲突状态的要素的 ObjectID。在本示例中,池塘要素类中 ObjectID 为 30 的要素存在冲突,而湖泊要素类中 ObjectID 为 11 的要素存在冲突:
Conflicts (2/2) sde.RJP.ponds (1/1) 30 sde.RJP.lakes (1/1) 11
因为已查看的冲突总数和冲突总数的比值在各要素类中分别仍为 2/2 和 1/1,所以您可以获知未对任何对象进行访问或替换。因为所有 ObjectID 和要素类均显示为粗体,您也可以获知未对任何冲突进行查看或替换。
将对象标记为已访问(请参阅以下“标记为已访问或标记为未访问”一节)或进行对象替换(请参阅以下“解决冲突”一节)后,圆括号中的第一个数字会减小,而且不再以粗体显示已查看的 ObjectID。如果要素类中的所有 ObjectID 均已标记为已访问或已替换,则要素类名称将不再以粗体显示。在池塘和湖泊示例中,如果将 ObjectID 为 30 的要素标记为已访问,则冲突 对话框的列表框中将显示以下内容:
Conflicts (1/2) sde.RJP.ponds (0/1) 30 sde.RJP.lakes (1/1) 11
如果存在第二个池塘要素处于冲突状态的情况,则列表可能如下所示:
Conflicts (2/3) sde.RJP.ponds (1/2) 5 30 sde.RJP.lakes (1/1) 11
此列表表示协调操作产生了三个冲突,而且已经对这三个冲突中的一个进行了访问或替换。该列表同时还表明已经对 ObjectID 为 30 的冲突要素进行了访问或替换,而且此要素属于池塘要素类。
在列表中选择单个要素时,冲突 对话框的右侧列表会显示要素的预协调版本、冲突版本和公共祖先版本中的列和属性。
- 预协调版本表示对要素和属性所做的编辑。
- 冲突版本表示由其他用户进行编辑和协调的要素及其属性。
- 公共祖先版本是数据库中的要素及其属性的表示;这是未经任何编辑的要素和属性。
位于字段名左侧的红色圆点用于识别冲突。例如,如果已在各版本中对要素几何进行了编辑,则会在 Shape 字段旁显示红色圆点。
如果有其他属性字段处于冲突状态,则会在这些字段的旁显示红色圆点。如果在任一版本中删除了某个要素,则会对该版本的属性值显示 <已删除>。
如果已将要素插入子版本且这些要素被提升为冲突,则会在目标和公共祖先版本中显示 <不存在>。
您可以使用对话框底部的两个按钮在显示所有字段或仅显示处于冲突状态的字段之间进行切换。
通过使要素表示的所有属性和值处于冲突状态,您可以查看属性值的差异程度并选择要保留的数据的表示。
查看冲突
如果单击对话框中的冲突显示按钮,则会在对话框底部显示冲突要素的两个表示(预协调版本和冲突版本)。
通过各表示下方的下拉列表,您可以在冲突要素的三个不同表示之间进行切换:预协调、冲突和公共祖先。请注意,只有当要素的几何处于冲突状态时,这些表示才会看上去有所不同。
各表示的下方都有一个工具条,其中包含了可用于导航和识别相应表示的工具。
您可以在地图上缩放至冲突要素的特定版本,方法是在列表中右键单击冲突要素,然后单击缩放至预协调版本、缩放至冲突版本或缩放至公共祖先版本。
如果存在几何冲突,还可以通过右键单击列表框中的 Shape 字段并单击显示来查看地图上的不同表示。
将打开冲突显示设置 对话框。单击想要在地图上绘制的表示。
单击确定后,地图上会出现如下显示:
- 冲突(目标)版本的表示显示为红色。
- 预协调版本的表示显示为绿色。
- 公共祖先版本的表示显示为蓝色。
对于以上选中的冲突显示设置,以下是地图上相应显示内容的示例:
如果在冲突显示设置 对话框中仅选中绘制当前版本,则以下是地图上相应显示内容的示例:
查看冲突之后,可将这些冲突标记为已访问,也可选择替换选项来解决冲突。
标记为已访问或标记为未访问
如“确定处于冲突状态中的字段或行”一节中所提到的,可将要素标记为已访问。这表示您已对冲突进行检查,但此时并不希望选择替换选项。您可以跟踪列表中已检查的要素,因为这些被标记为已访问的要素将不再显示为粗体。
如果决定以后要重新查看要素冲突,则可右键单击“冲突”列表中的 ObjectID,然后单击标记为未访问。这会使得要素重新显示为粗体。
解决冲突
解决冲突时,您需决定要保留要素和属性的哪个表示。无论您选择依据哪个版本(目标版本还是已编辑版本)进行协调,您都可以指定要保留哪个表示:预协调表示(协调之前在您的版本中的显示方式)、冲突表示(另一编辑器进行更改后的显示方式)或公共祖先表示(要素或属性在目标版本中的显示方式)。
您可以使用五种不同的替换选项来解决冲突:
- 属性替换
它在字段级出现。如果属性中存在冲突,可以将当前版本中的属性值替换为预协调、冲突或公共祖先表示中的属性值。要执行此操作,右键单击冲突中的属性,然后在菜单中单击您想要的选项。
- 要素替换
它在行级出现。可以将整个要素替换为预协调、冲突或公共祖先版本中的要素的表示。这意味着将替换冲突中的所有字段。
- 类级别替换
要解决冲突,可以选择将整个要素类的当前表示替换为预协调、冲突或公共祖先版本表示。这将立即替换所有的冲突要求和属性,使用户能够快速更新和替换冲突要素。如果在“冲突”列表中存在多个要素,则会将所有的要素替换为您所选择的版本。
要选择类级别替换选项,右键单击“冲突”列表中的要素类名称,然后单击任意想要使用的版本。
- 完全替换
这是一个根级别替换。使用此替换选项会将列表中的所有冲突要素和要素类替换为所指定的表示。如果在冲突中存在多个要素类和多个对象,则所有的这些要素类和对象都会被替换为您所选择的版本。
右键单击“冲突”列表中的要素类名称,然后单击您想要替换所有冲突的版本。
- 合并几何
这会发生在字段级别,并专门与 Shape 属性进行关联。当存在有关 Shape 字段的冲突时,用于合并几何的选项可用。如果两个编辑器对同一要素的几何进行编辑,但并非编辑该要素的同一区域,则这两个编辑器可利用选项(通过合并几何并接受两个编辑器的编辑)来解决冲突。用于合并几何的选项仅在 Shape 字段快捷菜单中可用。一旦几何被合并,则最终结果为包含这两个编辑器做过编辑的要素:如果两个编辑器所编辑的区域出现交集,则将叠加它们共同编辑的区域。尽管合并几何可能是可选的,但尝试合并几何将导致失败。如果出现此情况,将显示以下错误消息:
“合并几何时发现错误。无法合并这两个几何。被编辑的区域叠置。”
几何网络中的冲突
编辑网络要素时,更改几何网络和逻辑网络可能会导致冲突。
例如,向干管添加服务时,将不会在几何网络中对干管进行实体分割,而是在逻辑网络中进行分割。因此,尽管您并未直接对干管的几何进行编辑,但已对其进行了逻辑编辑。如果正在协调的目标版本也对干管进行了修改,则插入的新服务将与干管发生冲突。
查看涉及几何网络要素类的冲突需要了解冲突 对话框中的替换为命令如何在编辑会话中更新现有网络拓扑。
在服务干管示例中,两个用户都对给水干管进行了修改(一个用户通过更改属性进行修改,而另一个用户通过连接新服务进行修改)。查看冲突仅需研究差异并查看有效冲突,无需执行进一步操作。由于干管中包含正确的直径属性,因此会将新服务正确地连接到干管上。但也存在一种情况:解决涉及交汇点要素类的冲突的同时也会更新已连接的网络边。
关联要素的注记中的冲突
使用关联要素的注记需牢记以下规则:在替换具有关联要素的注记的要素时,要素和注记都将被新要素和新注记替换。因此,您可能需要进一步编辑新注记,以避免最终获得两个注记。
例如,移动要素并重新定位其注记后可能会出现冲突。冲突版本执行了相同的编辑:移动要素及旋转注记。如果决定用冲突版本的要素替换要素,则会删除现有的关联要素的注记,插入冲突要素,并创建新注记。之后,您必须根据需要通过移动和旋转的方式对新注记进行编辑。
您还可能遇到一种冲突:另一个编辑器删除了 DEFAULT 版本的地理数据库中的要素,同时也删除了其相关的关联要素的注记。您可以在子版本的地理数据库中对刚刚删除的注记进行编辑。进行协调时,如果决定要使用编辑版本替换要素,则会替换已在 DEFAULT 版本中删除的要素及其相关的关联要素的注记,并将从编辑会话中获取注记,因此同一要素将具有两个注记。
关系中的冲突
关系中具有与关联要素的注记类似的依赖性。从源关系类中删除要素可能会生成一条从目标关系类中删除要素的消息。因此,请注意仅替换涉及参与关系类的要素类的冲突的结果。
下面是关系要素类之间可能出现的冲突的示例:
- 更新“源类主键”字段,打破了版本 A 中的关系。
- 同时,更新版本 B 中的与类关联的目标要素。
- 由于目标类依赖于源类,因此协调版本时会删除冲突。
下面是另一个示例:
- 在电力公共设施要素数据集中,删除与某个变压器关联的电线杆会导致关联的变压器也被删除。
- 同时在另一个编辑会话中,编辑器会更改刚刚因删除与其关联的电线杆而被删除的变压器的属性。
- 对编辑进行协调时,将检测到更新-删除冲突。
在上一个示例中,如果第二个编辑器选择使用编辑会话表示替换所有冲突,则会重新创建在编辑会话期间删除的电线杆和变压器,而且会创建第二次编辑会话中的变压器,因此将存在两个变压器。您可能无法在地图中检测到此现象,因为这两个变换器位置是重叠的;但是在属性表中,会存在两条变换器的记录。
拓扑中的冲突
由于参与拓扑的要素类中的要素可与其他要素共享几何,因此查看拓扑要素类各版本之间的冲突的过程与使用简单要素类替换冲突有所不同。此外,它与使用几何网络、关系类和关联要素的注记替换冲突的过程也有所不同。
对参与拓扑的要素类进行编辑时,可能会同时更改其他拓扑相关要素。更改的要素可仍属于之前的要素类,也可属于一个或多个其他要素类。为管理由编辑引入的新拓扑错误的检测过程,拓扑会记录已编辑为脏区的区域。在拓扑中编辑要素会在拓扑中创建脏区。
协调已编辑的父版本和子版本时可能会出现新拓扑错误,尽管各版本中的脏区已经验证无误。要检测此类拓扑错误,需要在协调期间将父版本中的更改引入子版本之后,将子版本中的所有脏区返回到脏状态。协调后,可对这些区域进行重新验证,即可检测到所有错误。
对两个不包含活动脏区的版本进行协调仍有可能产生脏区。子版本中存在的任何脏区(无论是否已验证)都将在协调版本之后成为脏区。通常,协调版本时会出现以下情况:
- 子版本从父版本中继承的任何脏区(无论是否在子版本中进行验证)都将在协调之后成为脏区。
- 为在子版本中因创建、更新或删除任何要素而创建的任何脏区(无论是否验证)都将在协调之后成为脏区。
网络数据集中的冲突
编辑参与到网络数据集的要素类可能会改变连通性(即网络元素互相连接的方式)。(网络元素可以表示街道、天桥等。)而且,可能有多个要素类参与到网络数据集中,因此编辑一个源要素类可能改变从其他源要素类生成的网络元素的连通性。
因为多个要素类可以参与到网络数据集且连通性与几何关系有些关系,所以查看网络数据集中的冲突的过程与查看拓扑的这一过程极为相似。这也说明了一点:网络数据集也使用脏区,但它们用于管理检测连通性变化(而不是拓扑错误)的过程。
字段级别冲突过滤
在协调期间定义冲突后,您可能想要将编辑内容应用至要避免冲突的一个或一组字段。以下是在协调期间避免字段冲突可能有帮助的示例:
- 将对不同版本中的字段执行批量更新
- 根据在版本中执行的编辑操作在字段中写入信息
通过字段冲突过滤器,可在通过冲突检测进行过滤时在要素类中标记一个或一组字段。这仅适用于“按属性”定义冲突的选项。如果某个字段拥有为其定义的冲突过滤器;则协调后的字段值将取决于协调是优先使用目标版本还是编辑版本执行的。如果协调是优先使用目标版本执行的;则具有冲突过滤器的字段将具有与目标版本相同的值。如果协调是优先使用编辑版本执行的;则具有冲突过滤器的字段将具有与编辑版本相同的值。
添加字段冲突过滤器工具可用于定义要通过冲突过滤的一组字段。移除字段冲突过滤器工具可从这些字段中移除这些冲突过滤器。ListFieldConflictFilters GP 功能可用于确定何时为要素类或表定义了冲突过滤器。