GetNASublayer

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

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

Например, этот метод можно использовать для извлечения подслоя полигонов слоя анализа области обслуживания.

Примечание:

Эта функция в Python похожа на инструмент Выбрать данные в ModelBuilder.

Прежние версии:

Эта функция появилась в ArcGIS Pro 2.7. В более ранних версиях программного обеспечения лучшим способом извлечения объекта подслоя слоя сетевого анализа было использование метода listLayers объекта сетевого анализа Layer, использующего имя подслоя в качестве подстановочного знака.

Синтаксис

GetNASublayer (network_analyst_layer, naclass_name)
ПараметрОписаниеТип данных
network_analyst_layer

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

Layer
naclass_name

Имя класса для извлекаемого подслоя или подтаблицы.

В следующей таблице перечислены имена классов для каждого типа слоя сетевого анализа:

Ближайший пункт обслуживания

  • Facilities – Пункты обслуживания
  • Incidents – Инциденты
  • CFRoutes – Маршруты
  • Barriers – Точечные барьеры
  • PolylineBarriers – Линейные барьеры
  • PolygonBarriers – Полигональные барьеры

Размещение-Распределение

  • Facilities – Пункты обслуживания
  • DemandPoints – Точки спроса
  • LALines – Линии
  • Barriers – Точечные барьеры
  • PolylineBarriers – Линейные барьеры
  • PolygonBarriers – Полигональные барьеры

Матрица стоимости Источник-Назначение

  • Origins – Источники
  • Destinations – Назначения
  • ODLines – Линии
  • Barriers – Точечные барьеры
  • PolylineBarriers – Линейные барьеры
  • PolygonBarriers – Полигональные барьеры

Маршрут

  • Stops – Остановки
  • Routes – Маршруты
  • Barriers – Точечные барьеры
  • PolylineBarriers – Линейные барьеры
  • PolygonBarriers – Полигональные барьеры

Область обслуживания

  • Facilities – Пункты обслуживания
  • SAPolygons – Полигоны
  • SALines – Линии
  • Barriers – Точечные барьеры
  • PolylineBarriers – Линейные барьеры
  • PolygonBarriers – Полигональные барьеры

Задача выбора маршрута транспорта

  • Orders – Заказы
  • Depots – Станции
  • Routes – Маршруты
  • Breaks – Перерывы
  • DepotVisits – Посещения станций
  • RouteZones – Зоны маршрутов
  • OrderPairs – Парные заказы
  • RouteRenewals – Обновления маршрутов
  • OrderSpecialties – Специальные требования заказа
  • RouteSpecialties – Специальные требования маршрута
  • Barriers – Точечные барьеры
  • PolylineBarriers – Линейные барьеры
  • PolygonBarriers – Полигональные барьеры

String
Возвращаемое значение
Тип данныхОписание
Layer

Layer или Table для назначенного подслоя или подтаблицы указанного слоя сетевого анализа.

Пример кода

GetNASublayer, пример 1

Получение подтаблицы Route Specialties для слоя задачи выбора маршрута транспорта с именем Tuesday deliveries.

tuesday = datetime.datetime(1900, 1, 2)
layer_name = "Tuesday deliveries"
vrp_layer_object = arcpy.na.MakeVehicleRoutingProblemAnalysisLayer(
    "Streets_ND", layer_name, "Driving Time", 
    default_date=tuesday).getOutput(0)
route_specialties_table = arcpy.na.GetNASublayer(layer_name, "RouteSpecialties")
GetNASublayer, пример 2 (рабочий процесс)

В следующем автономном скрипте Python показано, как получить доступ к подслоям, соединить входные и выходные слои, и переместить значения полей из входных источников и назначений в выходной слой Линий в рабочем процессе анализа Матрицы Источник-Назначение.

# Name: MakeODCostMatrixAnalysisLayer_Workflow2.py
# Description: Find the travel time to the closest hospital from each census
#               tract and join the travel time and hospital name to the input
#               tracts.
# Requirements: Network Analyst Extension

# Import system modules
import datetime
import os
import arcpy

try:
    # Check out Network Analyst license if available. Fail if the Network Analyst license is not available.
    if arcpy.CheckExtension("network") == "Available":
        arcpy.CheckOutExtension("network")
    else:
        raise arcpy.ExecuteError("Network Analyst Extension license is not available.")
    
    # Set environment settings
    output_dir = "C:/Data"
    #The NA layer's data will be saved to the workspace specified here
    arcpy.env.workspace = os.path.join(output_dir, "Output.gdb")
    arcpy.env.overwriteOutput = True

    # Set inputs and outputs
    input_gdb = "C:/Data/SanFrancisco.gdb"
    network = os.path.join(input_gdb, "Transportation", "Streets_ND")
    origins = os.path.join(input_gdb, "Analysis", "TractCentroids")
    destinations = os.path.join(input_gdb, "Analysis", "Hospitals")
    output_features = "TractCentroids_withOD"

    # Define some OD cost matrix analysis settings
    layer_name = "HospitalsOD"
    # User settings for driving
    travel_mode = "Driving Time"
    # Calculate the total distance, even though the analysis is optimizing time
    accumulate_attributes = ["Meters"]
    # Find only the closest hospital
    num_hospitals_to_find = 1
    # Set the time of day for the analysis to 6PM on a generic Monday.
    start_time = datetime.datetime(1900, 1, 1, 18, 0, 0)
    # Don't output line shapes (output Lines will still list travel times)
    out_lines = "NO_LINES"

    # Create a new OD cost matrix layer.
    result_object = arcpy.na.MakeODCostMatrixAnalysisLayer(network, layer_name,
                    travel_mode,
                    number_of_destinations_to_find=num_hospitals_to_find,
                    time_of_day=start_time, line_shape=out_lines, 
                    accumulate_attributes=accumulate_attributes)

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

    # Get the names of all the sublayers within the OD layer.
    sublayer_names = arcpy.na.GetNAClassNames(layer_object)
    # Store the layer names for later use
    origins_layer_name = sublayer_names["Origins"]
    destinations_layer_name = sublayer_names["Destinations"]

    # The input census tract data has a unique ID field that can be transferred
    # to the analysis layer. Add the field, and then use field mapping to
    # transfer the values.
    arcpy.na.AddFieldToAnalysisLayer(layer_object, origins_layer_name,
                                                        "Tract_ID", "TEXT")
    field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
                                                            origins_layer_name)
    field_mappings["Tract_ID"].mappedFieldName = "ID"

    # Load the census tracts as origins.
    arcpy.na.AddLocations(layer_object, origins_layer_name, origins,
                            field_mappings, "")

    # Map the input hospital NAME field to a new Hospital_Name field in
    # Destinations
    arcpy.na.AddFieldToAnalysisLayer(layer_object, destinations_layer_name,
                                                        "Hospital_Name", "TEXT")
    field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
                                                        destinations_layer_name)
    field_mappings["Hospital_Name"].mappedFieldName = "NAME"

    # Load the hospitals as desinations.
    arcpy.na.AddLocations(layer_object, destinations_layer_name, destinations,
                            field_mappings, "")

    # Solve the OD layer
    arcpy.na.Solve(layer_object)

    # Get sublayers
    origins_sublayer = arcpy.na.GetNASublayer(layer_object, "Origins")
    destinations_sublayer = arcpy.na.GetNASublayer(layer_object, "Destinations")
    lines_sublayer = arcpy.na.GetNASublayer(layer_object, "ODLines")

    # Use the JoinField tool to transfer OD Cost Matrix information to the
    # output feature class
    # Transfer the tract ID from the input Origins to the output Lines
    arcpy.management.JoinField(lines_sublayer, "OriginID",
                                    origins_sublayer, "ObjectID", "Tract_ID")
    # Transfer the hospital name from the input Destinations to the output Lines
    arcpy.management.JoinField(lines_sublayer, "DestinationID",
                            destinations_sublayer, "ObjectID", "Hospital_Name")
    # Transfer fields of interest (hospital name, impedance attribute, and other
    # accumulated costs) from the output Lines to a copy of the input census
    # tracts feature class using the Tract_ID field
    # Determine the impedance attribute
    solver_props = arcpy.na.GetSolverProperties(layer_object)
    impedance = solver_props.impedance
    output_impedance_fieldname = "Total_" + impedance
    fields_to_transfer = ["Hospital_Name", output_impedance_fieldname]
    for field in accumulate_attributes:
        fields_to_transfer.append("Total_" + field)
    arcpy.management.CopyFeatures(origins, output_features)
    arcpy.management.JoinField(output_features, "ID",
                                lines_sublayer, "Tract_ID", fields_to_transfer)

    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))