Определить изменения объектов (Detect Feature Changes) (Управление данными (Data Management))
Краткая информация
Находит место, где обновляемые линейные объекты пространственно сопоставляются с базовыми и определяет пространственные и/или атрибутивные изменения или их отсутствие, после чего создает выходной класс объектов, содержащий совпадавшие обновленные объекты с информацией об их изменениях, несовпадающие обновленные объекты и несовпадающие базовые объекты.
Рисунок
Использование
- Примечание:
Все входные данные должны быть в одной системе координат.
-
Обычно этот инструмент используется при сохранении набора линейных объектов, например, дорог, и периодическом получении обновлений в виде нового набора объектов дорог от ваших партнеров. Вы хотите понять, какие из объектов были получены путем внесения правки в исходные базовые объекты, какие добавлены заново, а какие базовые объекты являются старыми и должны быть удалены. Этот инструмент находит совпадающие объекты обновленных и базовых наборов линейных данных, определяет пространственные изменения и/или изменения атрибутов, а потом создает выходной класс пространственных объектов, содержащий информацию об изменении объектов.
Выходной класс пространственных объектов содержит все обновленные объекты (совпадающие и не совпадающие) и все не совпадающие базовые объекты. Информация об обнаруженных изменениях записываются в следующие поля:
- UPDATE_FID – Идентификатор (ID) обновленного объекта. Значение -1 соответствует не совпадающему базовому объекту.
- BASE_FID – Идентификатор (ID) базового объекта. Значение -1 соответствует не совпадающему обновленному объекту.
- CHANGE_TYPE – Тип обнаруженного изменения:
- S для пространственного, соответствует совпадающему обновленному объекту с пространственным изменением.
- A для атрибутивного, соответствует совпадающему обновленному объекту с атрибутивным изменением.
- SA для пространственного и атрибутивного, соответствует совпадающему обновленному объекту с пространственным и атрибутивным изменением.
- NC для отсутствия изменений, соответствует совпадающему обновленному объекту без изменений.
- N для нового, соответствует не совпавшему измененному объекту, новому по сравнению с базовыми данными.
- D для удаленного, соответствует не совпавшему базовому объекту, который нужно удалить из базовых данных.
Процесс проверки совпадения объектов выполняется на основе Расстояния поиска (Search Distance) и Совпадения полей (Match Fields). Для хранения информации о соответствии может быть получена выходная таблица соответствия.
Параметр Расстояние поиска (Search Distance) используется для поиска кандидатов для сопоставления. Используйте расстояние, достаточное для получения большей части сдвигов между соответствующими объектами, но недостаточно большое, чтобы вызвать ненужную обработку множества кандидатов, что может привести к потенциально неправильным сопоставлениям.
Как только находятся совпадающие координаты, они продолжают вычисляться с использованием ряда геометрических измерений для определения, являются ли они достаточно похожими, чтобы их можно было считать пространственно совпадающими.
Если вы укажете одну или несколько пар полей для параметра Сопоставление полей (Match Fields), пространственно совпадающие кандидаты отмечаются рядом с такими значениями полей, чтобы вы могли определить правильные совпадения. К примеру, представьте, что обновленные и базовые объекты имеют поле STREET_NAME, содержащее названия улиц. Если обновленный объект пространственно сопоставляется с двумя базовыми, при этом только один из них имеет такое же название улицы STREET_NAME, как и обновленный, это является лучшим сопоставлением. Сравнение текстовых строк не чувствительно к регистру, а потому строка First St равна строке first st.
Выбирать Выходная таблица сопоставлений (Output Match Table) необязательно. Данная таблица сопоставлений предоставляет полную информацию сопоставления объектов, включая идентификаторы FID исходных и целевых объектов, группы сопоставления, отношения сопоставления и уровень достоверности сопоставления, полученный из пространственных и атрибутивных условий сопоставления. Эта информация может помочь вам лучше понять ситуации сопоставления и выполнить последующие инспекцию, редактирование и дальнейший анализ. Более подробно см. About_feature_matching_and_the_match_table.
В выходной таблице сопоставления значения SRC_FID и TGT_FID соответствуют идентификаторам IDs и базовым идентификаторам IDs.
Процесс идентификации изменений имеет место после сопоставления объектов. Пространственные и атрибутивные условия всех сопоставленных объектов сравниваются с соответствующими базовыми объектами для определения их значений CHANGE_TYPE.
Пространственное изменение (изменение типа S) обнаруживается, если происходит следующее:
- Совпадающие обновленные объекты отличаются от соответствующих базовых объектов в топологии, например, одному обновленному объекту соответствуют два базовых.
- Часть обновленного объекта попадает вне Допуска изменения.
Допуск изменений (Change Tolerance) сохраняет ширину буферной зоны вокруг базовых объектов. Все совпадающие обновленные объекты проверяются на этот допуск. Если какие-то части обновленного объекта попадают вне зоны, это считается пространственным изменением. Если указано положительное значение, на выходе будут два дополнительных поля:
- LEN_PCT – Это поле хранит данные о процентах, причем каждое вычисляется путем сравнения длины части обновленного объекта, вся длина которого попадает вне зоны допуска изменений. Значение, равное нулю, означает, что обновленный объект находится полностью в зоне допуска изменений, а значение, равное 100, – полностью вне.
- LEN_ABS – В этом поле хранятся значения длин в единицах измерения объекта, где каждая соответствует абсолютной длине части обновленного объекта, которая попадает вне допуска изменений.
Изменения атрибутов (типа А) обнаруживаются на основе сравнения полей.
При указании одной или нескольких пар полей для параметра Сравнить поля (Compare Fields) сопоставленные объекты отмечаются рядом с полями для указания на изменения атрибутов. Сравнение текстовых строк не чувствительно к регистру, а потому строка First St равна строке first st.
Если для сравниваемого обновленного объекта обнаруживаются и атрибутивные, и пространственные изменения, он получает тип изменений SA. Если для сравниваемого обновленного объекта не обнаруживаются изменений, он получает тип изменений NC.
-
Объединение входных экстентов используется в качестве экстента обработки. Количество участвующих исходных и целевых объектов будет отображено в сообщениях обработки.
Точность совпадения объектов сильно зависит от качества данных, сложности и сходства двух источников данных.
Вам необходимо минимизировать ошибки данных и выбрать подходящие объекты в качестве входных данных во время предварительной обработки. В общих чертах, лучше убедиться, что объекты внутри входного набора данных являются топологически корректными, имеют допустимую геометрию и являются простыми и не содержат дубликатов; в противном случае, могут возникнуть непредвиденные ошибки.
Вы можете просматривать обнаруженные изменения в выходном пространственном классе. Вы можете решить, что пространственные изменения между источниками данных значительны, и посчитать, что один из них нужно подправить в целях их совпадения. Вы также можете решить переносить атрибуты между обновляемыми и базовыми объектами. Инструменты преобразования методом резинового листа и переноса атрибутов набора Conflation_toolset помогут вам внести изменения.
Синтаксис
Параметр | Объяснение | Тип данных |
update_features |
Линейные объекты, сравниваемые с базовыми объектами. | Feature Layer |
base_features |
Линейные объекты, сопоставляемые с обновленными объектами для изменения направления. | Feature Layer |
out_feature_class |
Выходной класс линейных объектов с информацией об изменениях. Выходной класс содержит все входящие обновленные объекты (сопоставленные и не сопоставленные) и все не сопоставленные базовые объекты. | Feature Class |
search_distance |
Расстояние, использованное при поиске кандидатов для сопоставления. Расстояние должно быть задано, и оно должно быть больше 0. Вы можете выбрать предпочитаемые единицы измерения; единицами измерения по умолчанию являются единицы измерения объекта. | Linear unit |
match_fields [[source_field, target_field],...] (дополнительно) |
Список полей обновленных и базовых объектов. Если указано, каждая пара полей проверяется на совпадения для нахождения правильного сопоставления. | Value Table |
out_match_table (дополнительно) |
Выходная таблица, содержащая полную информацию о сопоставлении объектов. | Table |
change_tolerance (дополнительно) |
Расстояние, используемое для определения, имеет ли место пространственное изменение. Все совпадающие обновленные объекты проверяются на этот допуск. Если какие-то части обновленного объекта попадают вне зоны, это считается пространственным изменением. Расстояние должно быть неотрицательным. По умолчанию это ноль. Если указано положительное значение, выходные данные будут включать поля LEN_PCT и LEN_ABS. Вы можете выбрать предпочитаемые единицы измерения; единицами измерения по умолчанию являются единицы измерения объекта. | Linear unit |
compare_fields [[source_field, target_field],...] (дополнительно) |
Поля, определяющие, произошли ли атрибутивные изменения между сопоставляемыми обновленными и базовыми объектами. | Value Table |
Пример кода
Следующий скрипт окна Python демонстрирует, как применять функцию DetectFeatureChanges в быстром режиме.
import arcpy
arcpy.env.workspace = "C:/data"
arcpy.DetectFeatureChanges_edit("update_Roads.shp",
"base_Roads.shp", "output_changes.shp"
"25 Feet", #, #, "7.6 Meterd",
["rdClass", "roadClass"])
Следующий автономный скрипт является примером выполнения функции DetectFeatureChanges в автономном режиме.
# Name: DetectFeatureChanges_example_script2.py
# Description: Perform change detection between newly received road data and
# existing road data and find the number of new roads and the
# total length of them.
# Author: Esri
# -----------------------------------------------------------------------
# Import system modules
import arcpy
from arcpy import env
# Set environment settings
env.overwriteOutput = True
env.workspace = r"D:\conflationTools\ScriptExamples\data.gdb"
# Set local variables
updateFeatures = "updateRoads"
baseFeatures = "baseRoads"
dfcOutput = "dfc_out"
search_distance = "300 Feet"
match_fields = "RD_NAME FULLNAME"
statsTable = "new_roads_stats"
# Perform spatial change detection
arcpy.DetectFeatureChanges_management(updateFeatures, baseFeatures, dfcOutput, search_distance, match_fields)
# ====================================================================================
# Note 1: The result of DetectFeatureChanges may contain errors; see tool reference.
# Inspection and editing may be necessary to ensure correct CHANGE_TYPE N, which
# represents un-matched update feautres, before further calculations.
#
# One of the quick ways of checking whether the CHANGE_TYPE N features have
# matching base features is to find their mid-points and use them to search for
# features in base data, as processed below.
# ====================================================================================
# ======== Check update roads with CHANGE_TYPE N for potential match
# Make Feature Layer with selection of CHANGE_TYPE = 'N' (un-matched update features)
arcpy.MakeFeatureLayer_management(dfcOutput, "sel_N_layer", "CHANGE_TYPE = 'N'")
# Get mid-points of the selected features; the mid-points carry all the attributes.
arcpy.FeatureVerticesToPoints_management("sel_N_layer", "in_memory\midPts", "MID")
# Find nearest base features from the mid-points
arcpy.Near_analysis("in_memory\midPts", baseFeatures, "300 Feet")
# ====================================================================================
# Note 2: At this point you can manually inspect the midPts by the NEAR_DIST values;
# the lower the values, the higher chance (not always) a match was missed in the
# dfc process. Delete features from midPts that have found matching base features
# before further process.
# ====================================================================================
# Transfer CHANGE_TYPE values from features of midPts to update features
arcpy.JoinField_management(updateFeatures, "OBJECTID", "in_memory\midPts", "UPDATE_FID", "CHANGE_TYPE")
# Get the count of new roads and the total length; the remaining roads have
# Null values for CHANGE_TYPE.
arcpy.Frequency_analysis(updateFeatures, statsTable, "CHANGE_TYPE", "Shape_Length")