要素比较 (数据管理)

摘要

比较两个要素类或图层并返回比较结果。

使用情况

  • 此工具将返回显示比较结果的消息。默认情况下,此工具将在遇到第一个比较不匹配后停止执行。要报告所有差异,请选中继续比较参数。

  • 要素比较可以对几何、表格值、空间参考和字段定义方面存在的差异进行报告。

  • 可以指定多个排序字段。先排序第一个字段,然后排序第二个字段,依此类推(以升序排列)。在输入基础要素输入测试要素中均使用公用字段进行排序,可确保正在对各输入数据集中相同的行进行比较。

  • 默认情况下,比较类型设置为全部(Python 中的 ALL)。这表示进行比较的要素的所有属性都将被选中,包括空间参考、字段属性、特性和几何这些内容。但是,您可以选择其他比较类型,以只选中要执行比较的要素的特定属性。

  • 忽略选项为操作提供了灵活性,使用户可以忽略诸如测量特性、z 特性、点 ID 特性和扩展属性之类的属性。这两个要素类可能是相同的,但一个拥有测量值和 z 坐标,而另一个没有。您可以选择忽略这些属性。忽略扩展属性(Python 中的 IGNORE_EXTENSION_PROPERTIES)选项是指添加到要素类或表的其他信息。例如,两个注记要素类的要素可能相同,但要素类可能具有不同的扩展属性,如符号集中的符号不同并且编辑行为不同。

  • 默认的“XY 容差”根据“输入基础要素”的默认“XY 容差”确定。要使误差最小,所选的比较容差值应尽量小。如果输入的“XY 容差”为零,则会执行精确匹配。

  • 默认的“M 容差”和默认的“Z 容差”由输入基础要素的默认“M 容差”和“Z 容差”确定。单位与输入基础要素的单位相同。如果输入的“M 容差”和“Z 容差”为零,则会执行精确匹配。

  • 比较仅限几何(Python 中的 GEOMETRY_ONLY)时,空间参考必须匹配。如果空间参考不同,将会报告比较不匹配。  如果二者之中任意一个坐标系的输入不同,则要素都会得出错误比较结果。此工具无法执行动态投影。

  • 忽略字段参数是不包含在比较字段计数内的字段列表,它们的字段定义和表格值均被忽略。

  • 只能为数值字段类型指定属性容差。

  • 输出比较文件将包含输入基础要素输入测试要素之间的所有异同处。该文件是一个以逗号分隔的文本文件,在 ArcGIS 中可以表的形式对其进行查看和使用。例如,可通过查询该表获得存在差异的所有行的所有 ObjectID 值。has_error 字段指示记录包含误差。True 表示存在差异。

  • 要素计数是首先要执行的一项比较操作。如果要素计数报告指出存在差异并且继续比较参数值为 True,则随后出现的比较消息并不能准确反映输入基础要素输入测试要素之间的其他差异。这是由于要素比较工具并不能识别出输入测试要素中添加或移除要素的位置,只能移动到各属性表的下一行。在属性表中添加或删除了要素的位置,工具只是移动到下一行并开始对基础要素和错误的测试要素进行比较,这是因为输入测试数据中对应的测试要素已删除,或者该要素前添加了其他要素。

  • 在 Python 中使用此工具时,可通过 result.getOutput(1) 获取此工具的状态。未检测到差异时将显示 'true' 值;检测到差异时将显示 'false' 值。

    了解有关在 Python 中使用工具的详细信息

参数

标注说明数据类型
输入基础要素

输入基础要素输入测试要素进行比较。输入基础要素是指已声明有效的数据。该基础数据具有正确的几何定义、字段定义以及空间参考。

Feature Layer
输入测试要素

输入测试要素输入基础要素进行比较。输入测试要素是指因编辑或编译新要素而进行更改的数据。

Feature Layer
排序字段

用于在输入基础要素输入测试要素中对记录进行排序的一个或多个字段。记录将以升序进行排序。在输入基础要素输入测试要素中均使用公用字段进行排序,可确保正在对各输入数据集中相同的行进行比较。

Value Table
比较类型
(可选)

比较类型。默认值为全部,使用该默认设置将对待比较的要素的所有属性进行比较。

  • ALL将比较要素类的所有属性。这是默认设置。
  • GEOMETRY_ONLY仅比较要素类的几何。
  • ATTRIBUTES_ONLY仅比较属性及属性值。
  • SCHEMA_ONLY仅比较要素类的方案。
  • SPATIAL_REFERENCE_ONLY仅比较两个要素类的空间参考。
String
忽略选项
(可选)

不会对这些属性进行比较。

  • IGNORE_M不比较测量属性。
  • IGNORE_Z不比较高程属性。
  • IGNORE_POINTID不比较点 ID 属性。
  • IGNORE_EXTENSION_PROPERTIES不比较扩展属性。
  • IGNORE_SUBTYPES不比较子类型。
  • IGNORE_RELATIONSHIPCLASSES不比较关系类。
  • IGNORE_REPRESENTATIONCLASSES不比较表达类。
  • IGNORE_FIELDALIAS不比较字段别名。
String
XY 容差
(可选)

落在此距离范围内的要素被视作相同。要使误差最小,所选的比较容差值应尽量小。默认情况下,比较容差就是输入基础要素的“XY 容差”。

Linear Unit
M 容差
(可选)

测量容差是测量值间所允许的最小距离,如果两个测量值之间的距离在此范围内,它们会被视为相同。

Double
Z 容差
(可选)

“Z 容差”是 z 坐标间所允许的最小距离,如果两个坐标之间的距离在此范围内,它们会被视为同一坐标。

Double
属性容差
(可选)

在该数值范围内的属性值将被视作相同。它仅适用于数值字段类型。

Value Table
忽略字段
(可选)

在比较过程中将被忽略的一个或多个字段。这些字段的字段定义和表格值将被忽略。

String
继续比较
(可选)

指示在遇到第一个不匹配项后是否继续比较所有属性。

  • 未选中 - 在遇到第一个不匹配项后停止比较。这是默认设置。
  • 选中 - 在遇到第一个不匹配项后继续比较其他属性。

Boolean
输出比较文件
(可选)

该文件将包含输入基础要素输入测试要素之间所有的异同处。该文件是一个以逗号分隔的文本文件,在 ArcGIS 中可以表的形式对其进行查看和使用。

该文件将包含 in_base_featuresin_test_features 之间所有的异同处。该文件是一个以逗号分隔的文本文件,在 ArcGIS 中可以表的形式对其进行查看和使用。

File

派生输出

标注说明数据类型
比较状态

未检测到差异时比较状态将为 'true';检测到差异时比较状态将为 'false'

布尔型

arcpy.management.FeatureCompare(in_base_features, in_test_features, sort_field, {compare_type}, {ignore_options}, {xy_tolerance}, {m_tolerance}, {z_tolerance}, {attribute_tolerances}, {omit_field}, {continue_compare}, {out_compare_file})
名称说明数据类型
in_base_features

输入基础要素输入测试要素进行比较。输入基础要素是指已声明有效的数据。该基础数据具有正确的几何定义、字段定义以及空间参考。

Feature Layer
in_test_features

输入测试要素输入基础要素进行比较。输入测试要素是指因编辑或编译新要素而进行更改的数据。

Feature Layer
sort_field
[sort_field,...]

用于在输入基础要素输入测试要素中对记录进行排序的一个或多个字段。记录将以升序进行排序。在输入基础要素输入测试要素中均使用公用字段进行排序,可确保正在对各输入数据集中相同的行进行比较。

Value Table
compare_type
(可选)

比较类型。默认值为全部,使用该默认设置将对待比较的要素的所有属性进行比较。

  • ALL将比较要素类的所有属性。这是默认设置。
  • GEOMETRY_ONLY仅比较要素类的几何。
  • ATTRIBUTES_ONLY仅比较属性及属性值。
  • SCHEMA_ONLY仅比较要素类的方案。
  • SPATIAL_REFERENCE_ONLY仅比较两个要素类的空间参考。
String
ignore_options
[ignore_option,...]
(可选)

不会对这些属性进行比较。

  • IGNORE_M不比较测量属性。
  • IGNORE_Z不比较高程属性。
  • IGNORE_POINTID不比较点 ID 属性。
  • IGNORE_EXTENSION_PROPERTIES不比较扩展属性。
  • IGNORE_SUBTYPES不比较子类型。
  • IGNORE_RELATIONSHIPCLASSES不比较关系类。
  • IGNORE_REPRESENTATIONCLASSES不比较表达类。
  • IGNORE_FIELDALIAS不比较字段别名。
String
xy_tolerance
(可选)

落在此距离范围内的要素被视作相同。要使误差最小,所选的比较容差值应尽量小。默认情况下,比较容差就是输入基础要素的“XY 容差”。

Linear Unit
m_tolerance
(可选)

测量容差是测量值间所允许的最小距离,如果两个测量值之间的距离在此范围内,它们会被视为相同。

Double
z_tolerance
(可选)

“Z 容差”是 z 坐标间所允许的最小距离,如果两个坐标之间的距离在此范围内,它们会被视为同一坐标。

Double
attribute_tolerances
[[Field, {Tolerance}],...]
(可选)

在该数值范围内的属性值将被视作相同。它仅适用于数值字段类型。

Value Table
omit_field
[omit_field,...]
(可选)

在比较过程中将被忽略的一个或多个字段。这些字段的字段定义和表格值将被忽略。

String
continue_compare
(可选)

指示在遇到第一个不匹配项后是否继续比较所有属性。

  • NO_CONTINUE_COMPARE在遇到第一个不匹配项后停止比较。这是默认设置。
  • CONTINUE_COMPARE在遇到第一个不匹配项后继续比较其他属性。
Boolean
out_compare_file
(可选)

该文件将包含 in_base_featuresin_test_features 之间所有的异同处。该文件是一个以逗号分隔的文本文件,在 ArcGIS 中可以表的形式对其进行查看和使用。

File

派生输出

名称说明数据类型
compare_status

未检测到差异时比较状态将为 'true';检测到差异时比较状态将为 'false'

布尔型

代码示例

FeatureCompare 示例 1(Python 窗口)

以下 Python 窗口脚本演示了如何在即时模式下使用 FeatureCompare 函数。

import arcpy
arcpy.FeatureCompare_management(
    r'C:/Workspace/baseroads.shp', r'C:/Workspace/newroads.shp', 'ROAD_ID', 
    'ALL', 'IGNORE_M;IGNORE_Z', '0.001 METERS', 0, 0, 'Shape_Length 0.001', '#', 
    'CONTINUE_COMPARE', r'C:/Workspace/roadcompare.txt')
FeatureCompare 示例 2(独立脚本)

如何在独立脚本中使用 FeatureCompare 工具的示例。

# Name: FeatureCompare.py
# Description: Compare two feature classes and return comparison result.
# import system modules 
import arcpy
# Set local variables
base_features = "C:/Workspace/baseroads.shp"
test_features = "C:/Workspace/newroads.shp"
sort_field = "ROAD_ID"
compare_type = "ALL"
ignore_option = "IGNORE_M;IGNORE_Z"
xy_tolerance = "0.001 METERS"
m_tolerance = 0
z_tolerance = 0
attribute_tolerance = "Shape_Length 0.001"
omit_field = "#"
continue_compare = "CONTINUE_COMPARE"
compare_file = "C:/Workspace/roadcompare.txt"
 
# Process: FeatureCompare
compare_result = arcpy.FeatureCompare_management(
    base_features, test_features, sort_field, compare_type, ignore_option, 
    xy_tolerance, m_tolerance, z_tolerance, attribute_tolerance, omit_field, 
    continue_compare, compare_file)
print(compare_result[1])
print(arcpy.GetMessages())

环境

此工具不使用任何地理处理环境。