查找相同项 (数据管理)

摘要

报告要素类或表中在一系列字段中具有相同值的所有记录并生成一个列表文件以列出记录。 如果指明了 Shape 字段,将会对要素几何进行比较。

删除相同项工具可用于查找并删除相同记录。

插图

“查找相同项”图示
,OBJECTID 为 1、2、3、8、9 和 10 的点空间重合(以蓝色突出显示)。 输出表标识这些类别相同的空间重合点。

使用情况

  • 如果选定的输入字段值与这些记录值相同,则这些记录为相同记录。 可对输入数据集中多个字段的值进行比较。 如果指定了多个字段,则记录将与第一个字段中的值匹配,然后与第二个字段的值匹配,依此类推。

  • 对于要素类或要素图层输入,请指明字段参数中的 Shape 字段来比较要素几何,以按位置查找相同的要素。 XY 容差Z 容差参数仅在指定 Shape 字段时有效。

    如果指定了 Shape 字段,并且输入要激活了 m 值或 z 值,那么 m 值或 z 值也将用于确定相同的要素。

  • 如果在输出表中仅需要重复的记录,则选中仅输出重复记录参数。 如果不选中此参数,输出的记录数将与输入数据集相同。

  • 输出表将包含以下字段:

    • IN_FID - 输入数据集中的对象 ID 字段值。 可使用该字段将输出表记录连接到输入数据集。
    • FEAT_SEQ - 任务序号。 输入中值相同的记录将具有相同的 FEAT_SEQ 值,而不相同的记录将具有唯一的序列值。 FEAT_SEQ 值与输入记录的 ID 没有关系。

参数

标注说明数据类型
输入数据集

可找到相同记录的表或要素类。

Table View
输出数据集

用于报告相同记录的输出表。 在输出表中,相同记录的 FEAT_SEQ 字段具有相同值。

Table
字段

将比较其值以查找相同记录的一个或多个字段。

Field
XY 容差
(可选)

在评估另一个要素中是否存在相同折点时将应用于每个折点的 x,y 容差。

如果字段参数值包含了 Shape 字段,则此参数为活动状态。

Linear Unit
Z 容差
(可选)

在评估另一个要素中是否存在相同折点时将应用于每个折点的 z 容差。

如果字段参数值包含了 Shape 字段,则此参数为活动状态。

Double
仅输出重复记录
(可选)

指定输出表中是否只包含重复记录。

  • 未选中 - 所有输入记录在输出表中都有对应的记录。 这是默认设置。
  • 选中 - 仅重复记录在输出表中有对应的记录。 无重复记录时输出为空。
Boolean

arcpy.management.FindIdentical(in_dataset, out_dataset, fields, {xy_tolerance}, {z_tolerance}, {output_record_option})
名称说明数据类型
in_dataset

可找到相同记录的表或要素类。

Table View
out_dataset

用于报告相同记录的输出表。 在输出表中,相同记录的 FEAT_SEQ 字段具有相同值。

Table
fields
[fields,...]

将比较其值以查找相同记录的一个或多个字段。

Field
xy_tolerance
(可选)

在评估另一个要素中是否存在相同折点时将应用于每个折点的 x,y 容差。

如果 fields 参数值包含了 Shape 字段,将启用此参数。

Linear Unit
z_tolerance
(可选)

在评估另一个要素中是否存在相同折点时将应用于每个折点的 z 容差。

如果 fields 参数值包含了 Shape 字段,将启用此参数。

Double
output_record_option
(可选)

指定输出表中是否只包含重复记录。

  • ALL所有输入记录在输出表中都有对应的记录。 这是默认设置。
  • ONLY_DUPLICATES仅重复记录在输出表中有对应的记录。 无重复记录时输出为空。
Boolean

代码示例

FindIdentical 示例 1(Python 窗口)

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

import arcpy

# Find identical records based on a text field and a numeric field.
arcpy.FindIdentical_management("C:/data/fireincidents.shp", "C:/output/duplicate_incidents.dbf", ["ZONE", "INTENSITY"])
FindIdentical 示例 2(独立脚本)

以下独立脚本演示了如何使用 FindIdentical 函数识别表或要素类的重复记录。

# Name: FindIdentical_Example2.py
# Description: Finds duplicate features in a dataset based on location (Shape field) and fire intensity

import arcpy

arcpy.env.overwriteOutput = True

# Set workspace environment
arcpy.env.workspace = "C:/data/findidentical.gdb"

# Set input feature class
in_dataset = "fireincidents"

# Set the fields upon which the matches are found
fields = ["Shape", "INTENSITY"]

# Set xy tolerance
xy_tol = ".02 Meters"

out_table = "duplicate_incidents"

# Execute Find Identical 
arcpy.FindIdentical_management(in_dataset, out_table, fields, xy_tol)
print(arcpy.GetMessages())
FindIdentical 示例 3(独立脚本)

下面的独立脚本演示了可选 output_record_option 参数的使用。 如果参数值为 ONLY_DUPLICATES,则删除所有唯一记录,只保留重复记录作为输出。

# Name: FindIdentical_Example3.py
# Description: Demonstrates the use of the optional parameter Output only duplicated records.

import arcpy

arcpy.env.overwriteOutput = True

# Set workspace environment
arcpy.env.workspace = "C:/data/redlands.gdb"

in_data = "crime"
out_data = "crime_dups"

# Note that XY Tolerance and Z Tolerance parameters are not used
# In that case, any optional parameter after them must assign
# the value with the name of that parameter    
arcpy.FindIdentical_management(in_data, out_data, ["Shape"], output_record_option="ONLY_DUPLICATES")

print(arcpy.GetMessages())
FindIdentical 示例 4(独立脚本)

下面的独立脚本会读取 FindIdentical 函数的输出,并根据 FEAT_SEQ 字段值对相同记录进行分组。

import arcpy

from itertools import groupby
from operator import itemgetter

# Set workspace environment
arcpy.env.workspace = r"C:\data\redlands.gdb"

# Run Find Identical on feature geometry only.
result = arcpy.FindIdentical_management("parcels", "parcels_dups", ["Shape"])
    
# List of all output records as IN_FID and FEAT_SEQ pair - a list of lists
out_records = []   
for row in arcpy.SearchCursor(result.getOutput(0), fields="IN_FID; FEAT_SEQ"):
    out_records.append([row.IN_FID, row.FEAT_SEQ])

# Sort the output records by FEAT_SEQ values
# Example of out_records = [[3, 1], [5, 3], [1, 1], [4, 3], [2, 2]]
out_records.sort(key = itemgetter(1))
    
# records after sorted by FEAT_SEQ: [[3, 1], [1, 1], [2, 2], [5, 3], [4, 3]]
# records with same FEAT_SEQ value will be in the same group (i.e., identical)
identicals_iter = groupby(out_records, itemgetter(1))
    
# now, make a list of identical groups - each group in a list.
# example identical groups: [[3, 1], [2], [5, 4]]
# i.e., IN_FID 3, 1 are identical, and 5, 4 are identical.
identical_groups = [[item[0] for item in data] for (key, data) in identicals_iter]

print(identical_groups)

许可信息

  • Basic: 是
  • Standard: 是
  • Advanced: 是

相关主题