Разбить линию по соответствию (Редактирование)

Сводка

Разбивает входные объекты на основе совпадающих отношений с целью получения более лучшей сегментации соответствующих линий.

При работе с линейными объектами в двух разных наборах данных – например, городская сеть дорог и федеральная сеть дорог – совпадающие отношения 1:1, а не многие-к-многим (m:n) будут способствовать задачам объединения, таким как передача атрибутов от одного источника к другому. Этот инструмент призван способствовать превращению совпадений типа m:n в большее число совпадений типа 1:1.

Входные объекты и сопоставляемые объекты должны быть предварительно сопоставлены одним из инструментов объединения на основе сопоставления объектов, к которым относится, в частности, инструмент Определить изменения объектов, который создает таблицу сопоставления. В таблице сопоставления регистрируются совпадающие отношения между исходными и целевыми объектами.

Для каждой группы соответствия этот инструмент разбивает входные объекты на основе определенных свойств узла в сопоставляемых объектах. Узлом может быть свисающий конец линии, псевдо узел между двумя линиями или соединение нескольких линий. Например, сопоставленная группа 1:2 означает, что один исходный объект соответствует двум целевым объектам, а два целевых объекта соединены в псевдо узле. Инструмент разобьет входную линию в местоположении вблизи целевого псевдо узла. Это нужно для того, чтобы улучшить соответствия между исходной и целевыми линиями, чтобы на следующем этапе сопоставления получилось больше совпадений типа 1:1, нужных для смешения.

Иллюстрация

Иллюстрация инструмента Разбить линию по соответствию

Использование

  • Выходной класс пространственных объектов содержит все входные объекты, которые были разбиты или остались не измененными, а также все их атрибуты. Добавлены следующие поля:

    • ORIG_FID – идентификаторы входных объектов.
    • SBM_LnFlag – сохраняет следующие значения:
      • Разбиты – линии, которые были разбиты.
      • Не разбиты – входные линии, оставшиеся не измененными.
      • Группа неполного соответствия – линии, которые не могут участвовать в данном процессе, поскольку они не отвечают условиям параметра Минимальная длина группы сопоставления.

    Для сохранения местоположений, в которых линии были разбиты или не могли быть разбиты, может быть создан дополнительный класс точечных объектов. При необходимости эти точки можно использовать для проверки результата. Этот выходной результат включает следующие поля:

    • ORIG_FID – идентификаторы входных объектов в местах разбиения.
    • SBM_PtFlag – сохраняет следующие значения:
      • At vertex – местоположения, в которых входная линия была разбита в существующей вершине.
      • At nearest – местоположения, в которых входная линия была разбита на сопоставляемых объектах в ближайшем от узла местоположении.
      • Short segment – местоположения, в которых входную линию невозможно разбить в соответствии с заданной Минимальной длиной разбиения.
      • Out of range – местоположения, в которых входная линия не может быть разбита, потому что предполагаемое место разбиения находится вне пределов расстояния поиска. Некоторые из этих местоположений по-прежнему смогут использоваться для разбиения линий при последующей обработке.

      После проверки может появиться возможность разбить дополнительные линии, используя любые точки, которые помечены как короткий сегмент или как вне диапазона, с помощью инструмента Разбить линию в точке.

  • Параметр Расстояние поиска используется для выбора подходящих местоположений для разбиения входящей линии от узла на сопоставляемых объектах. Чтобы повысить вероятность найти местоположение разбиения как можно ближе к узлу на сопоставляемых объектах, выводится внутреннее значение расстояния в зависимости от того, насколько близко к входному объекту расположен узел. Если полученное расстояние меньше трети расстояния поиска, полученное расстояние устанавливается на одну треть от расстояния поиска. Если полученное расстояние больше расстояния поиска, полученное значение расстояния устанавливается на расстояние поиска. Если полученное значение находится в промежутке, то оно используется без каких-либо изменений. Следовательно, указанное расстояние поиска является максимальным значением, которое может быть использовано. Например, если в качестве расстояния поиска вы укажете 90 метров, то полученные значения расстояния, которые будут использоваться в данном процессе, будут составлять 30 метров, 90 метров и любые значения в промежутке между ними.

    Важно задать подходящее значение расстояния поиска. Хорошим выбором может оказаться значение, которое вы использовали в предварительном сопоставлении. Чем больше расстояние поиска, тем выше вероятность использования дальней вершины для разбиения входной линии, и выше вероятность найти самый удаленный узел, который не даст случиться разбиению.

  • Внутреннее расстояние поиска используется для поиска подходящих местоположений на входном объекте от узла на сопоставляемых объектах. Для того, чтобы определить, должна ли входная линия делиться и, если должна, то в каком месте, используется следующее правило.

    • Если псевдо узел сопоставления найдет псевдо входной узел, то разделения не произойдет.
    • Если не псевдо узел сопоставления найдет любой входной узел, разделения не произойдет. Например, если свисающий узел сопоставления найдет входной узел на T-образном соединении, то входная линия не разделена не будет.
    • Во всех других случаях входной объект будет разбит либо в единственной найденной вершине, либо в ближайшей найденной вершине, либо, если не будет найдено ни одной вершины – в ближайшем местоположении на входной линии. Но входная линия всегда разбивается, если псевдо узел сопоставления находит не псевдо входной узел.

  • Свисающие линии могут быть разбиты с помощью параметра Разбить висячие объекты. Если свисающая входная линия будет продолжена за сопоставляемым объектом на свисающем конце, то по умолчанию она будет разбита. Свисающая линия может разбиваться для определения фактического расстояния между исходными и целевыми объектами при последующем сопоставлении объектов.

  • Чтобы исключить любые группы сопоставления, которые слишком коротки для разбиения относительно заданного значения, может использоваться параметр Минимальная длина группы сопоставления. Если и общая длина входных объектов, и общая длина сопоставляемых объектов в определенной группе сопоставления будут меньше заданного значения, то такая группа будет исключена. Следует избегать разбиения объектов в коротких группах сопоставления, чтобы предотвратить чрезмерное разбиение или неудовлетворительное разбиение. Все входные линии в коротких группах сопоставления записываются в выходной файл и получают пометку короткой группы сопоставления в поле SBM_LnFlag.

  • Параметр Минимальная длина разбиения может использоваться для предотвращения создания коротких линий. Если разбиение входной линии приведет к тому, что линия будет короче этого значения, входная линия разбиваться не будет. Точка в месте разбиения с пометкой Короткий сегмент в поле SBM_PtFlag будет записана в класс точечных объектов, если он был указан, в качестве эталона при проверке.

  • Параметр Поля разбиения может использоваться для указания одного или нескольких числовых полей, таких как поле измерения длины, чтобы значения этих полей были разбиты на основе пропорций линий разбиения.

Синтаксис

SplitLineByMatch(in_features, matched_features, in_match_table, out_feature_class, search_distance, {in_features_as}, {out_point_feature_class}, {split_dangle}, {min_match_group_length}, {min_split_length}, {split_fields})
ParameterОбъяснениеТип данных
in_features

Входные линейные объекты, которые будут разбиты. Предварительно эти объекты должны быть сопоставлены с сопоставляемыми объектами.

Feature Layer
matched_features

Сопоставляемые объекты используются в качестве эталонных при разбиении входных объектов. Предварительно они должны быть сопоставлены с входными объектами.

Feature Layer
in_match_table

Таблица, которая содержит информацию о сопоставлении входных объектов с сопоставляемыми.

Table View
out_feature_class

Выходной класс пространственных объектов, который содержит разбитые линии и исходные линии, которые не разбиты.

Feature Class
search_distance

Значение расстояния, которое используется для определения местоположений разбиения. Значение должно быть больше 0. Если единицы измерения не указаны, используются входные единицы измерения.

Linear Unit
in_features_as
(Дополнительный)

Определяет, какие из входных объектов в таблице сопоставления являются исходными, а какие – целевыми объектами, чтобы были разбиты те объекты, которые должны быть разбиты.

  • AS_SOURCEВходные объекты сохраняются в таблице сопоставления как исходные пространственные объекты. Используется по умолчанию.
  • AS_TARGETВходные объекты сохраняются в таблице сопоставления как целевые пространственные объекты.
String
out_point_feature_class
(Дополнительный)

Выходной класс пространственных объектов, содержащий точки, которые представляют местоположения разбиения.

Feature Class
split_dangle
(Дополнительный)

Определяет, будут ли разбиваться висячие линии.

  • SPLIT_DANGLEВисячие линии будут разбиты в соответствии с правилами разбиения данного инструмента. Используется по умолчанию.
  • NO_SPLIT_DANGLEВисячие линии не будут разбиты.
Boolean
min_match_group_length
(Дополнительный)

Данная группа сопоставления будет участвовать в процессе разбиения, если либо общая длина входных объектов, либо общая длина сопоставляемых объектов будет больше заданного значения.

Linear Unit
min_split_length
(Дополнительный)

Разбиение не произойдет, если один или оба образующиеся в результате отрезка будут короче, чем заданное значение.

Linear Unit
split_fields
[split_field,...]
(Дополнительный)

Список числовых полей их входных объектов. Их числовые значения будут зависеть от пропорций отрезков, на которые была разбита линия.

Field

Пример кода

Инструмент Разбить линию по сопоставлению, пример 1 (окно Python)

Пример скрипта окна Python для использования функции SplitLineByMatch в режиме прямого запуска.

import arcpy
arcpy.env.workspace = "C:/data/roads.gdb"
arcpy.SplitLineByMatch_edit("city_Roads", "county_Roads", "match_table",
                            "city_roads_split", "50 Meters")
Инструмент Разбить линию по сопоставлению, пример 2 (автономный скрипт)

Пример скрипта Python для выполнения функции SplitLineByMatch в автономном режиме.

# Name:        SplitLineByMatch_example_script2.py
# Description: Use DetectFeatureChanges to get initial matching and then use
#              SplitLineByMatch to split the source and target to improve spatial
#              correspondence. 
#              Finally use TransferAttributes to transfer a field value from the
#              split source to the split target features.
# Author:      Esri
# -----------------------------------------------------------------------

# Import system modules
import arcpy
from arcpy import env

# Set environment settings
env.overwriteOutput = True
env.workspace = r"D:\conflation\Tools\splitlinebym\roads.gdb" #r"D:\conflation\roads.gdb"

try:
    # Set local variables
    sourceFeatures = "sourceRoads"
    targetFeatures = "targetRoads"

    dfcOutput = "DFC"
    searchDistance = "100 Feet"
    dfcMatchTable = "DFC_mtable"

    slbmSourceOutput = "out_source"
    slbmSourceOutputPts = "out_sourcePoints"
    slbmTargetOutput = "out_target"
    slbmTargetOutputPts = "out_targetPoints"
    dangle = "SPLIT_DANGLE"
    minSplitLength = "300 Feet"

    transfer_fields = "Mile_Length"

    # User Detect Feature Changes tool to generate the needed match table
    arcpy.DetectFeatureChanges_management(sourceFeatures, targetFeatures, dfcOutput, searchDistance, dfcMatchTable)

    # Use Split Line By Match tool twice to split source and then target features to improve spatial correspondence
    arcpy.SplitLineByMatch_edit(sourceFeatures, targetFeatures, dfcMatchTable, slbmSourceOutput, searchDistance,
                                "AS_SOURCE", slbmSourceOutputPts, dangle, "", minSplitLength)

    arcpy.SplitLineByMatch_edit(targetFeatures, sourceFeatures, dfcMatchTable, slbmTargetOutput, searchDistance,
                                "AS_TARGET", slbmTargetOutputPts, dangle, "", minSplitLength)

    # Perform attribute transfer using the split results
    arcpy.TransferAttributes_edit(slbmSourceOutput, slbmTargetOutput, transfer_fields, searchDistance)

    # print messages
    print(arcpy.GetMessages())
    
except arcpy.ExecuteError as aex:
    print(arcpy.GetMessages(2))
    
except Exception as ex:
    print(ex.args[0])

Информация о лицензиях

  • Basic: Нет
  • Standard: Нет
  • Advanced: Да

Связанные разделы