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

Сводка

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

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

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

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

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

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

Синтаксис

arcpy.na.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})
ParameterОбъяснениеТип данных
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/21/05 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

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

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

Date

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

NameОбъяснениеТип данных
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))

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

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

Связанные разделы