Сводка
Находит место, где обновляемые линейные объекты пространственно сопоставляются с базовыми и определяет пространственные и/или атрибутивные изменения или их отсутствие, после чего создает выходной класс объектов, содержащий совпадавшие обновленные объекты с информацией об их изменениях, несовпадающие обновленные объекты и несовпадающие базовые объекты.
Иллюстрация
Использование
Обычно этот инструмент используется при сохранении набора линейных объектов, например, дорог, и периодическом получении обновлений в виде нового набора объектов дорог от ваших партнеров. Вы хотите понять, какие из объектов были получены путем внесения правки в исходные базовые объекты, какие добавлены заново, а какие базовые объекты являются старыми и должны быть удалены. Этот инструмент находит совпадающие объекты обновленных и базовых наборов линейных данных, определяет пространственные изменения и/или изменения атрибутов, а потом создает выходной класс пространственных объектов, содержащий информацию об изменении объектов.
Выходной класс пространственных объектов содержит все обновленные объекты (совпадающие и не совпадающие) и все не совпадающие базовые объекты. Информация об обнаруженных изменениях записываются в следующие поля:
- UPDATE_FID – идентификатор (ID) обновленного объекта. Значение -1 соответствует не совпадающему базовому объекту.
- BASE_FID – идентификатор (ID) базового объекта. Значение -1 соответствует не совпадающему обновленному объекту.
- CHANGE_TYPE – тип обнаруженного изменения:
- S для пространственного, соответствует совпадающему обновленному объекту с пространственным изменением.
- A для атрибутивного, соответствует совпадающему обновленному объекту с атрибутивным изменением.
- SA для пространственного и атрибутивного, соответствует совпадающему обновленному объекту с пространственным и атрибутивным изменением.
- S_LD для пространственных изменений, а также для противоположных направлений линий.
- SA_LD для пространственных и атрибутивных изменений, а также для противоположных направлений линий.
- NC для отсутствия изменений, соответствует совпадающему обновленному объекту без изменений.
- N для нового, соответствует не совпавшему измененному объекту, новому по сравнению с базовыми данными.
- D для удаленного, соответствует не совпавшему базовому объекту, который нужно удалить из базовых данных.
Процесс проверки совпадения объектов выполняется на основе Расстояния поиска и Сопоставления полей. Для хранения информации о соответствии может быть получена выходная таблица соответствия.
Параметр Расстояние поиска используется для поиска кандидатов для сопоставления. Используйте расстояние, достаточное для получения большей части смещений между соответствующими объектами, но недостаточно большое, чтобы вызвать ненужную обработку слишком большого числа кандидатов, что может привести к потенциально неправильным сопоставлениям.
Как только найдены кандидаты на совпадение, они продолжаются оцениваться по ряду геометрических измерений для определения того, являются ли они достаточно похожими, чтобы их можно было считать пространственно совпадающими.
Если вы укажете одну или несколько пар полей для параметра Сопоставление полей, пространственно сопоставленные кандидаты проверяются сравнением значений этих полей, чтобы вы могли определить правильные сопоставления. Например, представьте, что обновленные и базовые объекты имеют поле STREET_NAME, содержащее названия улиц. Если обновленный объект пространственно сопоставляется с двумя базовыми, при этом только один из них имеет такое же название улицы STREET_NAME, как и обновленный, это является лучшим сопоставлением. Сравнение текстовых строк не чувствительно к регистру, а потому строка First St равна строке first st.
Выбирать Выходная таблица сопоставлений необязательно. Данная таблица сопоставлений предоставляет полную информацию сопоставления объектов, включая идентификаторы FID исходных и целевых объектов, группы сопоставления, отношения сопоставления и уровень достоверности сопоставления, полученный из пространственных и атрибутивных условий сопоставления. Эта информация может помочь вам лучше понять ситуации сопоставления и выполнить последующие инспекцию, редактирование и дальнейший анализ. Более подробно см. раздел О соответствии объектов и таблице соответствия.
В выходной таблице сопоставления значения SRC_FID и TGT_FID соответствуют ID обновленных объектов и ID базовых объектов.
Процесс идентификации изменений имеет место после сопоставления объектов. Пространственные и атрибутивные условия, а также направления линий всех сопоставленных объектов сравниваются с соответствующими базовыми объектами для определения их значений CHANGE_TYPE.
Пространственное изменение (изменение типа S) обнаруживается, если происходит следующее:
- Совпадающие обновленные объекты отличаются от соответствующих базовых объектов в топологии. Например, одному обновленному объекту соответствуют два базовых.
- В каждой группе сопоставления любые части обновленных или базовых объектов, не попадающие в Допуск изменения.
Допуск изменений сохраняет ширину буферной зоны вокруг обновленных или базовых объектов. Для каждой совпавшей группы вокруг всех объектов обновления создается буфер обновления. а вокруг всех базовых объектов – базовый буфер. Затем все объекты обновления проверяются базовым буфером, а все базовые объекты – буфером обновления. Если какие-либо части объектов обновления не попадают в базовый буфер либо какие-либо части базовых объектов не попадают в буфер обновления, это считается пространственным изменением. Если указано положительное значение, на выходе будут два дополнительных поля:
- LEN_PCT – в поле содержатся значения длин в процентах, вычисляемые на основе совпадающих групп.
- LEN_ABS – в поле содержатся абсолютные значения длин в единицах объектов, вычисляемое на основе совпадающих групп.
Значения этих полей определяются на основе совпавшей группы, к которой принадлежит выходной объект, в зависимости от следующих условий:
- Если только объекты обновлений не попадают в базовый буфер –
- Lu = общая длина этих не попавших фрагментов объектов обновлений.
- Pu (процент длины) = Lu / общую длину всех объектов обновлений * 100.
- LEN_PCT = Pu
- LEN_ABS = Lu
- Если только базовые объекты не попадают в буфер обновлений –
- Lb = общая длина этих не попавших фрагментов базовых объектов.
- Pb (процент длины) = Lb / общую длину всех базовых объектов * 100.
- LEN_PCT = Pb
- LEN_ABS = Lb
- Если имеются оба приведенных выше условия –
- Большее из значений Lu и Lb и соответствующий процент будут записаны. В случае, если записывается Lb, по причинам, описанным выше, знак изменяется на противоположный.
Значение процента может составлять от 0 до 100, где 0 означает, что и объекты обновлений, и базовые объекты в совпавшей группе полностью попадают в зоны порога изменений, а 100 – что все объекты обновлений и базовые объекты находятся вне пределов зон порога изменений.
Значения LEN_PCT и LEN_ABS помогут вам определить, является ли изменение значительным. Чем больше значение, тем более значительно изменение. Только пространственно измененные объекты получают значения, остальным присваивается -1.
Изменения атрибутов (типа А) обнаруживаются на основе параметра Сравнение полей. При указании одной или нескольких пар полей для параметра Сравнить поля сопоставленные объекты отмечаются рядом с полями для указания на изменения атрибутов. Сравнение текстовых строк не чувствительно к регистру, а потому строка First St равна строке first st. Если для сравниваемого обновленного объекта обнаруживаются и атрибутивные, и пространственные изменения, он получает тип изменений SA. Если для сравниваемого обновленного объекта не обнаруживаются изменений, он получает тип изменений NC.
Изменение направления линии (типы изменения с _LD) считается пространственным изменением и может быть отмечено в качестве опции.
- Совпавшим объектам обновлений присваивается тип изменения S_LD, если направление любой из их линий противоположно одному или нескольким базовым объектам, с описанными выше пространственными изменениями или без них. Другими словами, это типы S или NC, если направления линий не сравниваются.
- Совпавшим объектам обновлений присваивается тип изменения SA_LD, если направление любой из их линий противоположно одному или нескольким базовым объектам, в дополнение к атрибутивным изменениям или пространственным и атрибутивным изменениям, описанным выше. Другими словами, это типы A или SA, если направления линий не сравниваются.
Объединение входных экстентов используется в качестве экстента обработки. Количество участвующих исходных и целевых объектов будет отображено в сообщениях обработки.
Точность совпадения объектов сильно зависит от качества данных, сложности и сходства двух источников данных.
Вам необходимо минимизировать ошибки данных и выбрать подходящие объекты в качестве входных данных во время предварительной обработки. В общих чертах, лучше убедиться, что объекты внутри входного набора данных являются топологически корректными, имеют допустимую геометрию и являются простыми и не содержат дубликатов; в противном случае, могут возникнуть непредвиденные ошибки.
Вы можете просматривать обнаруженные изменения в выходном пространственном классе. Вы можете решить, что пространственные изменения между источниками данных значительны и посчитать, что один из них нужно подправить в целях их совпадения. Вы также можете решить переносить атрибуты между обновляемыми и базовыми объектами. Инструменты трансформирования методом резинового листа и переноса атрибутов набора Объединение помогут вам внести изменения.
Синтаксис
arcpy.management.DetectFeatureChanges(update_features, base_features, out_feature_class, search_distance, {match_fields}, {out_match_table}, {change_tolerance}, {compare_fields}, {compare_line_direction})
Параметр | Объяснение | Тип данных |
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 (Дополнительный) | Расстояние, используемое для определения, имеет ли место пространственное изменение. Все совпадающие обновленные и базовые объекты проверяются на этот допуск. Если какие-то части обновленного или базового объекта попадают вне зоны вокруг сопоставленного объекта , это считается пространственным изменением. Расстояние должно быть неотрицательным. Значение по умолчанию равно 0. Если указано положительное значение, выходные данные будут включать поля LEN_PCT и LEN_ABS. Вы можете выбрать предпочитаемые единицы измерения; единицами измерения по умолчанию являются единицы измерения объекта. | Linear Unit |
compare_fields [[source_field, target_field],...] (Дополнительный) | Поля, определяющие, произошли ли атрибутивные изменения между сопоставляемыми обновленными и базовыми объектами. | Value Table |
compare_line_direction (Дополнительный) | Определяет, сравниваются ли направления линий совпавших объектов.
| Boolean |
Пример кода
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 Meters",
["rdClass", "roadClass"])
DetectFeatureChanges, пример 2 (автономный скрипт)
Пример скрипта Python для выполнения функции 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")
Параметры среды
Информация о лицензиях
- Basic: Нет
- Standard: Нет
- Advanced: Да