Создать слой анализа матрицы Источник-Назначение (Network Analyst)

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

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

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

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

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

  • В ArcGIS Pro данные слоев сетевого анализа хранятся на диске в классах пространственных объектов файловой базы геоданных. При создании слоя сетевого анализа в проекте данные слоя будут созданы в новом наборе классов объектов в среде Текущей рабочей области. При создании слоя сетевого анализа в скрипте Python вам необходимо сначала явно задать среду рабочей области для файловой базы геоданных, в которой вы собираетесь хранить данные слоя, используя arcpy.env.workspace = "<path to file gdb>". После создания слоя в файловую базу геоданных будет добавлен новый набор классов объектов, содержащий соответствующие подслои для классов пространственных объектов.

Параметры

ПодписьОписаниеТип данных
Источник сетевых данных

Набор сетевых данных или сервис, для которого выполняется сетевой анализ. Для сервиса используйте URL-адрес портала.

Network Dataset Layer;String
Имя слоя
(Дополнительный)

Имя создаваемого слоя сетевого анализа.

String
Режим передвижения
(Дополнительный)

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

Объект arcpy.na.TravelMode и строка, содержащая действительное представление JSON режима перемещения, также могут использоваться как ввод для параметра.

String
Предельные значения
(Дополнительный)

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

Double
Количество назначений для поиска
(Дополнительный)

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

Long
Время дня
(Дополнительный)

Задает время отправления из исходных пунктов.

Если выбран атрибут импеданса на основе трафика, то решение будет создано с учетом заданных динамических условий трафика в указанное время дня. Дату и время можно указать в виде 5/14/2012 10:30 AM.

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

  • Сегодня – 12/30/1899
  • Воскресенье – 12/31/1899
  • Понедельник – 1/1/1900
  • Вторник – 1/2/1900
  • Среда – 1/3/1900
  • Четверг – 1/4/1900
  • Пятница – 1/5/1900
  • Суббота – 1/6/1900

Date
Часовой пояс
(Дополнительный)

Часовой пояс параметра Время суток.

  • Локальное время в местоположенияхЗначение параметра Время дня относится к часовому поясу, в котором находятся начальные точки. Это значение по умолчанию.
  • UTCЗначения параметра Время суток указываются во Всемирном координированном времени (UTC). Используйте эту опцию, если хотите посчитать матрицу стоимости OD для конкретного времени, например текущего, но не знаете, в каком часовом поясе будут находиться начальные точки.
String
Линейная геометрия
(Дополнительный)

Независимо от выбранного типа выходной формы, наилучший маршрут всегда определяется по сетевому импедансу и никогда – по евклидову расстоянию. Это значит, что различаются только формы маршрута, а не соответствующее им прохождение сети.

  • Без линийВ ходе анализа доля в качестве выходной пары источник-назначение не создается никакой геометрии. Это удобно при большом количестве источников и назначений, когда необходимо получить только значения импеданса в таблице матрицы Источник-назначение (без визуализации матрицы на карте).
  • Прямые линииФорма маршрута на выходе представляет собой одну прямую линию, соединяющую исходный пункт с пунктом назначения. Это значение по умолчанию.
String
Атрибуты накопления
(Дополнительный)

Список атрибутов стоимости, который будет суммироваться во время анализа. Эти накопившиеся атрибуты могут использоваться только для сведения; алгоритм решения при выполнении анализа использует только атрибут стоимости в соответствии с используемым режимом передвижения.

Для каждого из накопленных атрибутов стоимости в выходных объектах сетевого анализа добавляется параметр Total_[Impedance].

Этот параметр недоступен, если источником сетевых данных является сервис ArcGIS Online или сервис в версии Portal for ArcGIS, не поддерживающей накопление.

String

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

ПодписьОписаниеТип данных
Слой Network Analyst

Только что созданный слой сетевого анализа.

Слой Network Analyst

arcpy.na.MakeODCostMatrixAnalysisLayer(network_data_source, {layer_name}, {travel_mode}, {cutoff}, {number_of_destinations_to_find}, {time_of_day}, {time_zone}, {line_shape}, {accumulate_attributes})
ИмяОписаниеТип данных
network_data_source

Набор сетевых данных или сервис, для которого выполняется сетевой анализ. Для сервиса используйте URL-адрес портала.

Network Dataset Layer;String
layer_name
(Дополнительный)

Имя создаваемого слоя сетевого анализа.

String
travel_mode
(Дополнительный)

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

Объект arcpy.na.TravelMode и строка, содержащая действительное представление JSON режима перемещения, также могут использоваться как ввод для параметра.

String
cutoff
(Дополнительный)

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

Double
number_of_destinations_to_find
(Дополнительный)

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

Long
time_of_day
(Дополнительный)

Задает время отправления из исходных пунктов.

Если выбран атрибут импеданса на основе трафика, то решение будет создано с учетом заданных динамических условий трафика в указанное время дня. Дату и время можно указать в виде 5/14/2012 10:30 AM.

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

  • Сегодня – 12/30/1899
  • Воскресенье – 12/31/1899
  • Понедельник – 1/1/1900
  • Вторник – 1/2/1900
  • Среда – 1/3/1900
  • Четверг – 1/4/1900
  • Пятница – 1/5/1900
  • Суббота – 1/6/1900

Date
time_zone
(Дополнительный)

Часовой пояс параметра Время суток.

  • LOCAL_TIME_AT_LOCATIONSЗначение параметра Время дня относится к часовому поясу, в котором находятся начальные точки. Это значение по умолчанию.
  • UTCЗначения параметра Время суток указываются во Всемирном координированном времени (UTC). Используйте эту опцию, если хотите посчитать матрицу стоимости OD для конкретного времени, например текущего, но не знаете, в каком часовом поясе будут находиться начальные точки.
String
line_shape
(Дополнительный)
  • NO_LINESВ ходе анализа доля в качестве выходной пары источник-назначение не создается никакой геометрии. Это удобно при большом количестве источников и назначений, когда необходимо получить только значения импеданса в таблице матрицы Источник-назначение (без визуализации матрицы на карте).
  • STRAIGHT_LINESФорма маршрута на выходе представляет собой одну прямую линию, соединяющую исходный пункт с пунктом назначения. Это значение по умолчанию.

Независимо от выбранного типа выходной формы, наилучший маршрут всегда определяется по сетевому импедансу и никогда – по евклидову расстоянию. Это значит, что различаются только формы маршрута, а не соответствующее им прохождение сети.

String
accumulate_attributes
[accumulate_attributes,...]
(Дополнительный)

Список атрибутов стоимости, который будет суммироваться во время анализа. Эти накопившиеся атрибуты могут использоваться только для сведения; алгоритм решения при выполнении анализа использует только атрибут стоимости в соответствии с используемым режимом передвижения.

Для каждого из накопленных атрибутов стоимости в выходных объектах сетевого анализа добавляется параметр Total_[Impedance].

Этот параметр недоступен, если источником сетевых данных является сервис ArcGIS Online или сервис в версии Portal for ArcGIS, не поддерживающей накопление.

String

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

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

Только что созданный слой сетевого анализа.

Слой Network Analyst

Пример кода

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

Запуск инструмента с использованием только необходимых параметров.

network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeODCostMatrixAnalysisLayer(network, "DrivetimeCosts")
MakeODCostMatrixAnalysisLayer, пример 2 (окно Python)

Выполните инструмент с использованием всех параметров.

network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeODCostMatrixAnalysisLayer(network, "DrivetimeCosts", 
                                "Driving Time", 10, 20, "1/1/1900 9:00 AM",
                                "UTC", "NO_LINES", ["Meters", "TravelTime"])
MakeODCostMatrixAnalysisLayer, пример 3 (рабочий процесс)

В следующем автономном скрипте Python показано, как с помощью инструмента MakeODCostMatrixAnalysisLayer можно создавать матрицу Источник-Назначение для доставки товаров со склада во все магазины в пределах 10 минут в пути.

# Name: MakeODCostMatrixAnalysisLayer_Workflow.py
# Description: Create an origin-destination cost matrix for delivery of goods
#              from the warehouses to all stores within a 10-minute drive time
#              and save the results to a layer file on disk. Such a matrix can
#              be used as an input for logistics, delivery and routing analyses.
# Requirements: Network Analyst Extension

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

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
    env.workspace = os.path.join(output_dir, "Output.gdb")
    env.overwriteOutput = True

    #Set local variables
    input_gdb = "C:/Data/Paris.gdb"
    network = os.path.join(input_gdb, "Transportation", "ParisMultimodal_ND")
    layer_name = "WarehouseToStoreDrivetimeMatrix"
    travel_mode = "Driving Time"
    search_tolerance = "1000 Meters"
    origins = os.path.join(input_gdb, "Analysis", "Warehouses")
    destinations = os.path.join(input_gdb, "Analysis", "Stores")
    output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")

    #Create a new OD Cost matrix layer. We wish to find all stores within a 10
    #minute cutoff.
    result_object = arcpy.na.MakeODCostMatrixAnalysisLayer(network, layer_name,
                                                travel_mode, 10)

    #Get the layer object from the result object. The OD cost matrix 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 cost matrix layer.
    sublayer_names = arcpy.na.GetNAClassNames(layer_object)
    #Stores the layer names that we will use later
    origins_layer_name = sublayer_names["Origins"]
    destinations_layer_name = sublayer_names["Destinations"]

    #Load the warehouse locations as origins using a default field mappings and
    #a search tolerance of 1000 Meters.
    arcpy.na.AddLocations(layer_object, origins_layer_name, origins, "",
                          search_tolerance)

    #Load the store locations as destinations and map the NOM field from stores
    #features as Name property using field mappings
    field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
                                                        destinations_layer_name)
    field_mappings["Name"].mappedFieldName = "NOM"
    arcpy.na.AddLocations(layer_object, destinations_layer_name, destinations,
                          field_mappings, search_tolerance)

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

    #Save the solved OD cost matrix layer as a layer file on disk
    layer_object.saveACopy(output_layer_file)

    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))
MakeODCostMatrixAnalysisLayer, пример 4 (рабочий процесс)

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

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

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

# 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))
MakeODCostMatrixAnalysisLayer, пример 5 (автономный скрипт)

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

import json

network = r"C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
# Get all travel modes from the network dataset
travel_modes = arcpy.na.GetTravelModes(network)
# Get the Driving Distance travel mode
dd_travel_mode = travel_modes["Driving Distance"]
# Make a json representation of the travel mode
travel_mode_json = json.loads(str(dd_travel_mode))
# Modify the userHierarchy property to turn hierarchy off, and update the name
travel_mode_json["useHierarchy"] = False
travel_mode_json["name"] = "Driving Distance without Hierarchy"
# Create a new travel mode object from the modified json
new_travel_mode_object = arcpy.na.TravelMode(json.dumps(travel_mode_json))
# Use the new travel mode object to MakeODCostMatrixAnalysisLayer
# We could also pass in the json directly without first converting it to an object
arcpy.na.MakeODCostMatrixAnalysisLayer(network, "OD Without Hierarchy", new_travel_mode_object)

Параметры среды

Особые случаи

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

  • Basic: Да
  • Standard: Да
  • Advanced: Да