Создать слой маршрута (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 утра. Для даты и времени можно задать 10:30 21.10.2005. Если маршрут выполняется за несколько дней и указано только время начала, то используется текущая дата.

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

  • Сегодня – 30.12.1899
  • Воскресенье – 31.12.1899
  • Понедельник – 01.01.1900
  • Вторник – 02.01.1900
  • Среда – 03.01.1900
  • Четверг – 04.01.1900
  • Пятница – 05.01.1900
  • Суббота – 06.01.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 утра. Для даты и времени можно задать 10:30 21.10.2005. Если маршрут выполняется за несколько дней и указано только время начала, то используется текущая дата.

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

  • Сегодня – 30.12.1899
  • Воскресенье – 31.12.1899
  • Понедельник – 01.01.1900
  • Вторник – 02.01.1900
  • Среда – 03.01.1900
  • Четверг – 04.01.1900
  • Пятница – 05.01.1900
  • Суббота – 06.01.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))