Копирование пересекаемых исходных объектов (Network Analyst)

Краткая информация

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

Более подробно о выходных данных инструмента Копирование пройденных исходных объектов (Copy Traversed Source Features)

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

  • Инструмент рассчитывает входной слой сетевого анализа, если это еще не сделано. Слой анализа рассчитывается повторно, если входные данные были изменены после предыдущего расчета.

  • Пройденные исходные объекты могут быть созданы для следующих слоев сетевого анализа:

    • Маршрут
    • Область обслуживания
    • Ближайший пункт обслуживания
    • Задача выбора маршрута транспорта
    • Доставка до двери

    Пройденные исходные объекты нельзя создать для следующих слоев:

    • Матрица Источник-Назначение
    • Размещение-распределение

  • Помимо точек пройденных соединений сети, класс объектов выходных соединений также содержит точки, которые отображают следующие объекты:

    • Пройденные точечные барьеры
    • Точки входа и выхода пройденных линейных и полигональных барьеров
    • Посещенные остановки в Маршрутном анализе
    • Посещенные пункты обслуживания и концы границ при анализе Области обслуживания
    • Посещенные пункты обслуживания и инциденты при анализе ближайшего пункта обслуживания
    • Посещенные заказы, станции и перерывы при решении Задачи выбора маршрута транспорта
    • Посещенные заказы и станции анализа Доставки до двери

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

  • Инструмент не будет работать со слоями анализа Доставки до двери, которые не выводят путевые листы и не используют геометрию маршрутов, поскольку результат прохода не генерируется.

Параметры

ПодписьОписаниеТип данных
Входной слой сетевого анализа

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

Network Analyst Layer
Выходное местоположение

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

Workspace; Feature Dataset
Имя класса объектов-ребер

Имя поля класса объектов, которое будет содержать сведения о пройденных исходных объектах-ребрах. Если рассчитанный слой сетевого анализа не проходит каких-либо объектов ребер, будет создан пустой класс объектов.

String
Имя класса объектов соединений

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

String
Имя таблицы поворотов

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

String

Производные выходные данные

ПодписьОписаниеТип данных
Объекты ребер

Класс пространственных объектов, содержащий ребра из набора сетевых данных, которые были пересечены в процессе сетевого анализа.

Feature Class
Объекты соединений

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

Feature Class
Таблица поворотов

Таблица, содержащая повороты из набора сетевых данных, которые были пересечены в процессе сетевого анализа.

Table
Измененный входной слой сетевого анализа

Рассчитанный слой сетевого анализа.

Network Analyst Layer

arcpy.management.CopyTraversedSourceFeatures(input_network_analysis_layer, output_location, edge_feature_class_name, junction_feature_class_name, turn_table_name)
ИмяОписаниеТип данных
input_network_analysis_layer

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

Network Analyst Layer
output_location

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

Workspace; Feature Dataset
edge_feature_class_name

Имя поля класса объектов, которое будет содержать сведения о пройденных исходных объектах-ребрах. Если рассчитанный слой сетевого анализа не проходит каких-либо объектов ребер, будет создан пустой класс объектов.

String
junction_feature_class_name

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

String
turn_table_name

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

String

Производные выходные данные

ИмяОписаниеТип данных
edge_features

Класс пространственных объектов, содержащий ребра из набора сетевых данных, которые были пересечены в процессе сетевого анализа.

Feature Class
junction_features

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

Feature Class
turn_table

Таблица, содержащая повороты из набора сетевых данных, которые были пересечены в процессе сетевого анализа.

Table
modified_input_network_analysis_layer

Рассчитанный слой сетевого анализа.

Network Analyst Layer

Пример кода

CopyTraversedSourceFeatures, пример 1 (окно Python)

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

arcpy.na.CopyTraversedSourceFeatures("Route", "C:/Data/Output.gdb",
                                     "TraversedEdges",
                                     "TraversedJunctions",
                                     "TraversedTurns")
Пример CopyTraversedSourceFeatures 2 (рабочий процесс)

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

# Name: CopyTraversedSourceFeatures_ex02.py
# Description: The scenario shows how to find the streets that are common to the
#              routes between the closest fire station and the census tract
#              centroids. These streets can be used to identify critical points
#              in case of an emergency.
# Requirements: Network Analyst Extension

#Import system modules
import os
import arcpy
from arcpy import env

try:
    #Set environment settings
    output_dir = "C:/Data"
    #The NA layer's data will be saved to the workspace specified here
    env.workspace = os.path.join(output_dir, "Output.gdb")
    env.overwriteOutput = True
    env.qualifiedFieldNames = False

    #Set local variables
    input_gdb = "C:/Data/SanFrancisco.gdb"
    output_gdb = "C:/Data/Output.gdb"
    network = os.path.join(input_gdb, "Transportation", "Streets_ND")
    layer_name = "EmergencyRoutes"
    impedance = "TravelTime"
    facilities = os.path.join(input_gdb, "Analysis", "FireStations")
    incidents = os.path.join(input_gdb, "Analysis", "TractCentroids")
    edge_frequency = os.path.join(output_gdb, "EdgeFrequency")
    critical_streets = os.path.join(output_gdb, "CriticalStreets")

    #Create a new closest facility analysis layer.
    result_object = arcpy.na.MakeClosestFacilityLayer(network, layer_name,
                                                    impedance, "TRAVEL_FROM")

    #Get the layer object from the result object. The closest facility layer can
    #now be referenced using the layer object.
    layer_object = result_object.getOutput(0)

    #Get the names of all the sublayers within the closest facility layer.
    sublayer_names = arcpy.na.GetNAClassNames(layer_object)
    #Stores the layer names that we will use later
    facilities_layer_name = sublayer_names["Facilities"]
    incidents_layer_name = sublayer_names["Incidents"]

    #Load fire station features as facilities and ensure that they are not
    #located on restricted portions of the network. Use default field mappings
    #and search tolerance
    arcpy.na.AddLocations(layer_object, facilities_layer_name, facilities, "",
                          "", exclude_restricted_elements="EXCLUDE")

    #Load tract centroids as incidents and ensure that they are not located on
    #restricted portions of the network. Map the ID field from Tract Centroids
    #as the name for incidents using field mappings
    field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
                                                        incidents_layer_name)
    field_mappings['Name'].mappedFieldName = "ID"
    arcpy.na.AddLocations(layer_object, incidents_layer_name, incidents,
                          field_mappings, "",
                          exclude_restricted_elements="EXCLUDE")

    #Solve the closest facility layer and copy the travered source features to
    #the output geodatabase. Use default names for the output feature
    #classes and table. Retrieve the first output, which is the traversed edges.
    traversed_edges = arcpy.na.CopyTraversedSourceFeatures(layer_object,
                                                      output_gdb).getOutput(0)

    #Some streets might be traversed by more than one route. Streets traversed
    #by many routes are the most critical emergency routes. Count the number of
    #routes using each street.
    arcpy.analysis.Frequency(traversed_edges, edge_frequency,
                             ["SourceOID", "SourceName"])

    #The resulting edge features from CopyTraversedSourceFeatures may include
    #clipped versions of the original street features because the Closest
    #Facility route only traveled across part of the street feature. Select
    #the complete street features from the original street feature class and
    #copy them to output.
    #Get the full path to the network dataset's streets feature class by
    #describing the network dataset.
    network_desc = arcpy.Describe(network)
    edge_sources = network_desc.edgeSources
    for es in edge_sources:
        if es.name.lower() == "streets":
            streets_source = os.path.join(os.path.dirname(network), es.name)
            break

    #Select the relevant streets based on overlap with the results from
    #CopyTraversedSourceFeatures
    streets_layer = arcpy.management.MakeFeatureLayer(streets_source,
                                                        "StreetsLayer")
    arcpy.management.SelectLayerByLocation(streets_layer,
                                "SHARE_A_LINE_SEGMENT_WITH", traversed_edges)

    #Add the frequency information to the output feature class using JoinField
    arcpy.management.JoinField(streets_layer, "ObjectID", edge_frequency,
                               "SourceOID", "FREQUENCY")

    #Save the selected features to disk
    arcpy.management.CopyFeatures(streets_layer, critical_streets)

    #Delete the Frequency field from the street feature class
    arcpy.management.DeleteField(streets_layer, "FREQUENCY")

    print("Script completed successfully")

except Exception as e:
    # If an error occurred, print line number and error message
    import traceback, sys
    tb = sys.exc_info()[2]
    print(("An error occurred on line %i" % tb.tb_lineno))
    print((str(e)))