Краткая информация
Находит место, где обновляемые линейные объекты пространственно сопоставляются с базовыми и определяет пространственные и/или атрибутивные изменения или их отсутствие, после чего создает выходной класс объектов, содержащий совпадавшие обновленные объекты с информацией об их изменениях, несовпадающие обновленные объекты и несовпадающие базовые объекты.
Рисунок
Использование
Обычно этот инструмент используется при сохранении набора линейных объектов, например, дорог, и периодическом получении обновлений в виде нового набора объектов дорог от ваших партнеров. Вы хотите понять, какие из объектов были получены путем внесения правки в исходные базовые объекты, какие добавлены заново, а какие базовые объекты являются старыми и должны быть удалены. Этот инструмент находит совпадающие объекты обновленных и базовых наборов линейных данных, определяет пространственные изменения и/или изменения атрибутов, а потом создает выходной класс пространственных объектов, содержащий информацию об изменении объектов.
Выходной класс пространственных объектов содержит все обновленные объекты (совпадающие и не совпадающие) и все не совпадающие базовые объекты. Информация об обнаруженных изменениях записываются в следующие поля:
- UPDATE_FID – Идентификатор (ID) обновленного объекта. Значение -1 соответствует не совпадающему базовому объекту.
- BASE_FID – Идентификатор (ID) базового объекта. Значение -1 соответствует не совпадающему обновленному объекту.
- CHANGE_TYPE – Тип обнаруженного изменения:
- S для пространственного, соответствует совпадающему обновленному объекту с пространственным изменением.
- A для атрибутивного, соответствует совпадающему обновленному объекту с атрибутивным изменением.
- SA для пространственного и атрибутивного, соответствует совпадающему обновленному объекту с пространственным и атрибутивным изменением.
- NC для отсутствия изменений, соответствует совпадающему обновленному объекту без изменений.
- N для нового, соответствует не совпавшему измененному объекту, новому по сравнению с базовыми данными.
- D для удаленного, соответствует не совпавшему базовому объекту, который нужно удалить из базовых данных.
Процесс проверки совпадения объектов выполняется на основе Расстояния поиска и Сопоставления полей. Для хранения информации о соответствии может быть получена выходная таблица соответствия.
Параметр Расстояние поиска используется для поиска кандидатов для сопоставления. Используйте расстояние, достаточное для получения большей части смещений между соответствующими объектами, но недостаточно большое, чтобы вызвать ненужную обработку слишком большого числа кандидатов, что может привести к потенциально неправильным сопоставлениям.
Как только находятся совпадающие координаты, они продолжаются вычисляться с использованием ряда геометрических измерений для определения, являются ли они достаточно похожими, чтобы их можно было считать пространственно совпадающими.
Если вы укажете одну или несколько пар полей для параметра Сопоставление полей, пространственно сопоставленные кандидаты проверяются сравнением значений этих полей, чтобы вы могли определить правильные сопоставления. Например, представьте, что обновленные и базовые объекты имеют поле STREET_NAME, содержащее названия улиц. Если обновленный объект пространственно сопоставляется с двумя базовыми, при этом только один из них имеет такое же название улицы STREET_NAME, как и обновленный, это является лучшим сопоставлением. Сравнение текстовых строк не чувствительно к регистру, а потому строка First St равна строке first st.
Выбирать Выходная таблица сопоставлений необязательно. Данная таблица сопоставлений предоставляет полную информацию сопоставления объектов, включая идентификаторы FID исходных и целевых объектов, группы сопоставления, отношения сопоставления и уровень достоверности сопоставления, полученный из пространственных и атрибутивных условий сопоставления. Эта информация может помочь вам лучше понять ситуации сопоставления и выполнить последующие инспекцию, редактирование и дальнейший анализ. Более подробно см. раздел О соответствии объектов и таблице соответствия.
В выходной таблице сопоставления значения SRC_FID и TGT_FID соответствуют ID обновленных объектов и ID базовых объектов.
Процесс идентификации изменений имеет место после сопоставления объектов. Пространственные и атрибутивные условия всех сопоставленных объектов сравниваются с соответствующими базовыми объектами для определения их значений CHANGE_TYPE.
Пространственное изменение (изменение типа S) обнаруживается, если происходит следующее:
- Совпадающие обновленные объекты отличаются от соответствующих базовых объектов в топологии, например, одному обновленному объекту соответствуют два базовых.
- Часть обновленного объекта или базы попадает вне Допуска изменения.
Допуск изменений сохраняет ширину буферной зоны вокруг обновленных и базовых объектов. Все совпадающие обновленные и базовые объекты проверяются на этот допуск. Если какие-то части обновленного объекта попадают за пределы зоны вокруг сопоставленного базового объекта или, если любые части базового объекта попадают за пределы зоны вокруг сопоставленного обновленного объекта, это считается пространственным изменением. Если указано положительное значение, на выходе будут два дополнительных поля:
- LEN_PCT – Это поле хранит данные о процентах, причем каждое вычисляется путем сравнения длины части обновленного или базового объекта, вся длина которого попадает вне зоны допуска изменений. Значение, равное нулю, означает, что обновленный или базовый объект находится полностью в зоне допуска изменений, а значение, равное 100, – полностью вне.
- LEN_ABS – В этом поле хранятся значения длин в единицах измерения объекта, где каждая соответствует абсолютной длине части обновленного или базового объекта, которая попадает вне допуска изменений.
Изменения атрибутов (типа А) обнаруживаются на основе сравнения полей.
При указании одной или нескольких пар полей для параметра Сравнить поля сопоставленные объекты отмечаются рядом с полями для указания на изменения атрибутов. Сравнение текстовых строк не чувствительно к регистру, а потому строка First St равна строке first st.
Если для сравниваемого обновленного объекта обнаруживаются и атрибутивные, и пространственные изменения, он получает тип изменений SA. Если для сравниваемого обновленного объекта не обнаруживаются изменений, он получает тип изменений NC.
Объединение входных экстентов используется в качестве экстента обработки. Количество участвующих исходных и целевых объектов будет отображено в сообщениях обработки.
Точность совпадения объектов сильно зависит от качества данных, сложности и сходства двух источников данных.
Вам необходимо минимизировать ошибки данных и выбрать подходящие объекты в качестве входных данных во время предварительной обработки. В общих чертах, лучше убедиться, что объекты внутри входного набора данных являются топологически корректными, имеют допустимую геометрию и являются простыми и не содержат дубликатов; в противном случае, могут возникнуть непредвиденные ошибки.
Вы можете просматривать обнаруженные изменения в выходном пространственном классе. Вы можете решить, что пространственные изменения между источниками данных значительны и посчитать, что один из них нужно подправить в целях их совпадения. Вы также можете решить переносить атрибуты между обновляемыми и базовыми объектами. Инструменты трансформирования методом резинового листа и переноса атрибутов набора Объединение помогут вам внести изменения.
Синтаксис
DetectFeatureChanges_management (update_features, base_features, out_feature_class, search_distance, {match_fields}, {out_match_table}, {change_tolerance}, {compare_fields})
Параметр | Объяснение | Тип данных |
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 |
Пример кода
DetectFeatureChanges, пример 1(окно Python)
Следующий скрипт окна 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, пример 2 (автономный скрипт)
Следующий автономный скрипт является примером выполнения функции 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")