Создать слой маршрута (Network Analyst)

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

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

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

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

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

Параметры

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

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

Network Dataset Layer
Имя выходного слоя

Имя создаваемого слоя маршрута.

String
Атрибут импеданса

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

String
Изменить порядок остановок для нахождения оптимального маршрута
(Дополнительный)
  • Отмечено – изменяется порядок остановок для получения оптимального маршрута. Этот параметр заменяет задачу поиска кратчайшего пути на задачей движущегося торгового представителя.
  • Не отмечено – порядок остановок соответствует порядку ввода. Используется по умолчанию.
Boolean
Сохранить порядок остановок
(Дополнительный)

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

  • PRESERVE_BOTHПервая и последняя остановки по порядку ввода будут сохранены как первая и последняя остановки в маршруте.
  • PRESERVE_FIRSTПервая остановка по порядку ввода будет сохранена как первая остановка в маршруте, но последняя остановка может быть переупорядочена.
  • PRESERVE_LASTПоследняя остановка по порядку ввода будет сохранена как последняя остановка в маршруте, но первая остановка может быть переупорядочена.
  • PRESERVE_NONEПервая и последняя остановки не сохранятся и могут быть переупорядочены.
String
Использовать временные окна
(Дополнительный)

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

  • Отмечено – в маршруте учитываются временные окна на остановках. В случае прибытия на остановку до своего временного окна выполняется ожидание до начала временного окна. В случае прибытия на остановку после своего временного окна происходит нарушение временного окна. При вычислении маршрута суммарное нарушение временных окон сравнивается с добавленным импедансом. Этот параметр включен при установке импеданса в единицах времени.
  • Не отмечено – в маршруте игнорируются временные окна на остановках. Используется по умолчанию.
Boolean
Накопители
(Дополнительный)

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

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

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

Определяет правила разворотов, которые будут использоваться на перекрестках. Разрешение разворотов подразумевает возможность развернуться на перекрестке и продолжить движение назад по той же улице. Учитывая, что соединения представляют собой пересечения улиц и тупики, различные транспортные средства могут разворачиваться на некоторых соединениях, но не на всех – это зависит от того, является ли соединение перекрестком или тупиком. Чтобы учесть это, поведение при развороте неявно определяется числом ребер, которые соединяются с соединением, т.е. валентностью соединения. Ниже приведены допустимые значения для данного параметра; каждое из них сопровождается описанием значения в терминах валентности соединения.

  • ALLOW_UTURNSРазвороты разрешены в соединениях с любым количеством смежных ребер. Это значение используется по умолчанию.
  • NO_UTURNSРазвороты запрещены во всех соединениях, вне зависимости от их валентности. Однако даже если эта опция выбрана, развороты в сетевых положениях по-прежнему разрешены, но вы можете запретить развороты в отдельных сетевых положениях с помощью свойства местоположения CurbApproach.
  • ALLOW_DEAD_ENDS_ONLYРазвороты запрещены во всех соединениях, кроме тех, у которых имеется только одно смежное ребро (тупик).
  • ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLYРазвороты запрещены в соединениях с ровно двумя смежными ребрами, но разрешены на перекрестках (в соединениях с тремя смежными ребрами или более) и в тупиках (соединениях с ровно одним смежным ребром). Часто сети имеют избыточные соединения в середине сегмента дороги. Эта опция позволяет запретить развороты транспортных средств в таких местах.

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

String
Ограничения
(Дополнительный)

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

String
Использовать иерархию в анализе
(Дополнительный)
  • Отмечено – при анализе будет использоваться атрибут иерархии. Применение иерархии приводит при расчете к предпочтению ребер высшего порядка по сравнению с ребрами низшего порядка. Расчеты с иерархией выполняются быстрее, и они могут использоваться для моделирования предпочтений водителя, который скорее выберет для проезда автостраду, нежели местную дорогу – даже если это приведет к увеличению длины пути. Данная опция доступна, только если входной набор сетевых данных имеет атрибут иерархии.
  • Не отмечено – при анализе не будет использоваться атрибут иерархии. Если иерархия не используется, результатом является точный маршрут для набора сетевых данных.

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

Boolean
Настройки рангов иерархии
(Дополнительный)

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

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

Network Analyst Hierarchy Settings
Форма выходного пути
(Дополнительный)

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

  • TRUE_LINES_WITH_MEASURESПолученные маршруты будут иметь точную форму лежащих в основе источников сети. Выходные данные содержат данные линейных измерений маршрутов. Значения измерений увеличиваются от первой остановки и сохраняют общий импеданс до достижения заданного положения.
  • TRUE_LINES_WITHOUT_MEASURESПолученные маршруты будут иметь точную форму лежащих в основе источников сети.
  • STRAIGHT_LINESВыходной формой маршрута будет прямая линия, соединяющая остановки.
  • NO_LINESДля выходных маршрутов форма не создается.

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

String
Время начала
(Дополнительный)

Дата и время начала для маршрута. Время начала маршрута в основном используется для поиска маршрутов на основе такого атрибута импеданса, который имеет вариации в течение суток. Например, время начала 7 часов утра может применяться для поиска маршрута в час пик. Для этого параметра значение по умолчанию равно 8:00 утра. Дату и время можно указать в виде 21.10.05 10:30. Если маршрут выполняется за несколько дней и указано только время начала, то используется текущая дата.

Настройте анализ для использования одной из следующих специальных дат для моделирования дня недели или текущей даты вместо конкретной статической даты:

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

Например, чтобы указать, что маршрут должен начинаться в 5:00 во вторник, следует указать значение параметра, равное 02.01.1900 17:00.

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

Узнать подробнее о том, как дата и время используется и интерпретируется в сетевом анализе

Date

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

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

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

Слой Network Analyst

arcpy.management.MakeRouteLayer(in_network_dataset, out_network_analysis_layer, impedance_attribute, {find_best_order}, {ordering_type}, {time_windows}, {accumulate_attribute_name}, {UTurn_policy}, {restriction_attribute_name}, {hierarchy}, {hierarchy_settings}, {output_path_shape}, {start_date_time})
ИмяОписаниеТип данных
in_network_dataset

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

Network Dataset Layer
out_network_analysis_layer

Имя создаваемого слоя маршрута.

String
impedance_attribute

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

String
find_best_order
(Дополнительный)
  • FIND_BEST_ORDERПорядок остановок изменяется для получения оптимального маршрута. Этот параметр заменяет задачу поиска кратчайшего пути на задачей движущегося торгового представителя.
  • USE_INPUT_ORDERПорядок остановок соответствует порядку ввода. Используется по умолчанию.
Boolean
ordering_type
(Дополнительный)

Определяет порядок остановок при использовании FIND_BEST_ORDER.

  • PRESERVE_BOTHПервая и последняя остановки по порядку ввода будут сохранены как первая и последняя остановки в маршруте.
  • PRESERVE_FIRSTПервая остановка по порядку ввода будет сохранена как первая остановка в маршруте, но последняя остановка может быть переупорядочена.
  • PRESERVE_LASTПоследняя остановка по порядку ввода будет сохранена как последняя остановка в маршруте, но первая остановка может быть переупорядочена.
  • PRESERVE_NONEПервая и последняя остановки не сохранятся и могут быть переупорядочены.
String
time_windows
(Дополнительный)

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

  • USE_TIMEWINDOWSВ маршруте учитываются временные окна на остановках. В случае прибытия на остановку до своего временного окна выполняется ожидание до начала временного окна. В случае прибытия на остановку после своего временного окна происходит нарушение временного окна. При вычислении маршрута суммарное нарушение временных окон сравнивается с минимальным импедансом. Этот параметр действителен только при установке импеданса в единицах времени.
  • NO_TIMEWINDOWSВ маршруте игнорируются временные окна на остановках. Используется по умолчанию.
Boolean
accumulate_attribute_name
[accumulate_attribute_name,...]
(Дополнительный)

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

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

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

Определяет правила разворотов, которые будут использоваться на перекрестках. Разрешение разворотов подразумевает возможность развернуться на перекрестке и продолжить движение назад по той же улице. Учитывая, что соединения представляют собой пересечения улиц и тупики, различные транспортные средства могут разворачиваться на некоторых соединениях, но не на всех – это зависит от того, является ли соединение перекрестком или тупиком. Чтобы учесть это, поведение при развороте неявно определяется числом ребер, которые соединяются с соединением, т.е. валентностью соединения. Ниже приведены допустимые значения для данного параметра; каждое из них сопровождается описанием значения в терминах валентности соединения.

  • ALLOW_UTURNSРазвороты разрешены в соединениях с любым количеством смежных ребер. Это значение используется по умолчанию.
  • NO_UTURNSРазвороты запрещены во всех соединениях, вне зависимости от их валентности. Однако даже если эта опция выбрана, развороты в сетевых положениях по-прежнему разрешены, но вы можете запретить развороты в отдельных сетевых положениях с помощью свойства местоположения CurbApproach.
  • ALLOW_DEAD_ENDS_ONLYРазвороты запрещены во всех соединениях, кроме тех, у которых имеется только одно смежное ребро (тупик).
  • ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLYРазвороты запрещены в соединениях с ровно двумя смежными ребрами, но разрешены на перекрестках (в соединениях с тремя смежными ребрами или более) и в тупиках (соединениях с ровно одним смежным ребром). Часто сети имеют избыточные соединения в середине сегмента дороги. Эта опция позволяет запретить развороты транспортных средств в таких местах.

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

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

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

String
hierarchy
(Дополнительный)
  • USE_HIERARCHYПри анализе будет использоваться атрибут иерархии. Применение иерархии приводит при расчете к предпочтению ребер высшего порядка по сравнению с ребрами низшего порядка. Расчеты с иерархией выполняются быстрее, и они могут использоваться для моделирования предпочтений водителя, который скорее выберет для проезда автостраду, нежели местную дорогу – даже если это приведет к увеличению длины пути. Данная опция доступна, если входной набор сетевых данных имеет атрибут иерархии.
  • NO_HIERARCHYПри анализе не будет использоваться атрибут иерархии. Если иерархия не используется, результатом является точный маршрут для набора сетевых данных.

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

Boolean
hierarchy_settings
(Дополнительный)

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

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

Network Analyst Hierarchy Settings
output_path_shape
(Дополнительный)

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

  • TRUE_LINES_WITH_MEASURESПолученные маршруты будут иметь точную форму лежащих в основе источников сети. Выходные данные содержат данные линейных измерений маршрутов. Значения измерений увеличиваются от первой остановки и сохраняют общий импеданс до достижения заданного положения.
  • TRUE_LINES_WITHOUT_MEASURESПолученные маршруты будут иметь точную форму лежащих в основе источников сети.
  • STRAIGHT_LINESВыходной формой маршрута будет прямая линия, соединяющая остановки.
  • NO_LINESДля выходных маршрутов форма не создается.

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

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

Дата и время начала для маршрута. Время начала маршрута в основном используется для поиска маршрутов на основе такого атрибута импеданса, который имеет вариации в течение суток. Например, время начала 7 часов утра может применяться для поиска маршрута в час пик. Для этого параметра значение по умолчанию равно 8:00 утра. Дату и время можно указать в виде 21.10.05 10:30. Если маршрут выполняется за несколько дней и указано только время начала, то используется текущая дата.

Настройте анализ для использования одной из следующих специальных дат для моделирования дня недели или текущей даты вместо конкретной статической даты:

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

Например, чтобы указать, что маршрут должен начинаться в 5:00 во вторник, следует указать значение параметра, равное 02.01.1900 17:00.

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

Узнать подробнее о том, как дата и время используется и интерпретируется в сетевом анализе

Date

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

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

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

Слой Network Analyst

Пример кода

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

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

network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeRouteLayer(network, "WorkRoute", "TravelTime")
MakeRouteLayer, пример 2 (окно Python)

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

network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeRouteLayer(network, "InspectionRoute", "TravelTime",
                        "FIND_BEST_ORDER", "PRESERVE_BOTH", "USE_TIMEWINDOWS",
                        ["Meters", "TravelTime"],
                        "ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLY", ["Oneway"],
                        "USE_HIERARCHY", "", "TRUE_LINES_WITH_MEASURES",
                        "1/1/1900 9:00 AM")
MakeRouteLayer, пример 3 (рабочий процесс)

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

# Name: MakeRouteLayer_Workflow.py
# Description: Find a best route to visit the stop locations and save the
#              route to a layer file. The stop locations are geocoded from a
#              text file containing the addresses.
# Requirements: Network Analyst Extension

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

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

    #Set local variables
    input_gdb = "C:/Data/SanFrancisco.gdb"
    network = os.path.join(input_gdb, "Transportation", "Streets_ND")
    layer_name = "BestRoute"
    impedance = "TravelTime"
    address_locator = os.path.join(input_gdb, "SanFranciscoLocator")
    address_table = "C:/Data/StopAddresses.csv"
    address_fields = "Street Address;City City;State State;ZIP <None>"
    out_stops = "GeocodedStops"
    output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")

    #Create a new Route layer. For this scenario, the default values for all the
    #remaining parameters statisfy the analysis requirements
    result_object = arcpy.na.MakeRouteLayer(network, layer_name, impedance)

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

    #Get the names of all the sublayers within the route layer.
    sublayer_names = arcpy.na.GetNAClassNames(layer_object)
    #Stores the layer names that we will use later
    stops_layer_name = sublayer_names["Stops"]

    #Geocode the stop locations from a csv file containing the addresses.
    #The Geocode Addresses tool can use a text or csv file as input table
    #as long as the first line in the file contains the field names.
    arcpy.geocoding.GeocodeAddresses(address_table, address_locator,
                                     address_fields, out_stops)

    #Load the geocoded address locations as stops mapping the address field from
    #geocoded stop features as Name property using field mappings.
    field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
                                                            stops_layer_name)
    field_mappings["Name"].mappedFieldName = "Address"
    arcpy.na.AddLocations(layer_object, stops_layer_name, out_stops,
                            field_mappings, "",
                            exclude_restricted_elements="EXCLUDE")

    #Solve the route layer, ignoring any invalid locations such as those that
    #cannot be geocoded
    arcpy.na.Solve(layer_object, "SKIP")

    #Save the solved route 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))
MakeRouteLayer, пример 4 (рабочий процесс)

В этом примере создаются сразу несколько маршрутов. Это часто используется для вычисления расстояния или времени езды между парами источник-назначение.

# Name: MakeRouteLayer_MultiRouteWorkflow.py
# Description: Calculate the home-work commutes for a set of people and save
#              the output to a feature class
# Requirements: Network Analyst Extension

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

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

    #Set local variables
    input_gdb = "C:/data/SanFrancisco.gdb"
    network = os.path.join(input_gdb, "Transportation", "Streets_ND")
    stops_home = os.path.join(input_gdb, "Analysis", "Commuters_Home")
    stops_work = os.path.join(input_gdb, "Analysis", "Commuters_Work")
    layer_name = "Commuters"
    out_routes_featureclass = "Commuter_Routes"
    impedance = "TravelTime"

    #Set the time of day for the analysis to 8AM on a generic Monday.
    start_time = datetime.datetime(1900, 1, 1, 8, 0, 0)

    #Create a new Route layer.  Optimize on TravelTime, but compute the
    #distance traveled by accumulating the Meters attribute.
    result_object = arcpy.na.MakeRouteLayer(network, layer_name, impedance,
                                         accumulate_attribute_name=["Meters"],
                                         hierarchy="NO_HIERARCHY",
                                         start_date_time=start_time)

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

    #Get the names of all the sublayers within the route layer.
    sublayer_names = arcpy.na.GetNAClassNames(layer_object)
    #Stores the layer names that we will use later
    stops_layer_name = sublayer_names["Stops"]
    routes_layer_name = sublayer_names["Routes"]

    #Before loading the commuters' home and work locations as route stops, set
    #up field mapping.  Map the "Commuter_Name" field from the input data to
    #the RouteName property in the Stops sublayer, which ensures that each
    #unique Commuter_Name will be placed in a separate route.  Matching
    #Commuter_Names from stops_home and stops_work will end up in the same
    #route.
    field_mappings = arcpy.na.NAClassFieldMappings(layer_object, stops_layer_name)
    field_mappings["RouteName"].mappedFieldName = "Commuter_Name"

    #Add the commuters' home and work locations as Stops. The same field mapping
    #works for both input feature classes because they both have a field called
    #"Commuter_Name"
    arcpy.na.AddLocations(layer_object, stops_layer_name, stops_home,
                        field_mappings, "",
                        exclude_restricted_elements = "EXCLUDE")
    arcpy.na.AddLocations(layer_object, stops_layer_name, stops_work,
                        field_mappings, "", append="APPEND",
                        exclude_restricted_elements = "EXCLUDE")

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

    # Get the output Routes sublayer and save it to a feature class
    routes_sublayer = layer_object.listLayers(routes_layer_name)[0]
    arcpy.management.CopyFeatures(routes_sublayer, out_routes_featureclass)

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