Создать слой анализа задачи маршрута транспортного средства (Network Analyst)

Сводка

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

Инструменты Создать слой анализа задачи выбора маршрута транспорта и Расчет задачи выбора маршрута транспорта похожи, но предназначены для различных целей. Если вы настраиваете сервис геообработки, используйте инструмент Расчет задачи выбора маршрута транспорта; это упростит процесс. В противном случае используйте инструмент Создать слой анализа задачи выбора маршрута транспорта.

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

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

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

Синтаксис

MakeVehicleRoutingProblemAnalysisLayer(network_data_source, {layer_name}, {travel_mode}, {time_units}, {distance_units}, {default_date}, {time_zone_for_time_fields}, {line_shape}, {time_window_factor}, {excess_transit_factor}, {generate_directions_on_solve}, {spatial_clustering})
ParameterОбъяснениеТип данных
network_data_source

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

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

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

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

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

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

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

Более подробно о атрибутах стоимости

  • MinutesЕдиницы времени даются в минутах. Это значение по умолчанию.
  • SecondsЕдиницы времени даются в секундах.
  • HoursЕдиницы времени даются в часах.
  • DaysЕдиницы времени даются в днях.
String
distance_units
(Дополнительный)

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

Более подробно о атрибутах стоимости

  • MilesЕдиницами измерения расстояния будут мили. Это значение по умолчанию.
  • KilometersЕдиницами измерения расстояния будут километры.
  • FeetЕдиницами измерения расстояния будут футы.
  • YardsЕдиницами измерения расстояния будут ярды.
  • MetersЕдиницами измерения расстояния будут метры.
  • InchesЕдиницами измерения расстояния будут дюймы.
  • CentimetersЕдиницами измерения расстояния будут сантиметры.
  • MillimetersЕдиницами измерения расстояния будут миллиметры.
  • DecimetersЕдиницами измерения расстояния будут дециметры.
  • NauticalMilesЕдиницами измерения расстояния будут морские мили.
String
default_date
(Дополнительный)

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

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

Указывает часовой пояс входных полей даты-времени, поддерживаемых инструментом.

  • LOCAL_TIME_AT_LOCATIONS Значения даты-времени, связанные с заказами или станциями, приводятся в том же часовом поясе, где находятся заказы и станции. Для маршрутов значения даты-времени основываются на часовом поясе, в котором расположено станция начала маршрута. Если у маршрута нет исходной станции, то все заказы и станции на всех маршрутах должны быть в одном часовом поясе. Для остановок значения даты-времени основываются на часовом поясе маршрута. Это значение по умолчанию.
  • UTCЗначения даты-времени, связанные с заказами или станциями, находятся в универсальном координированном времени UTC, и не основаны на часовом поясе, где находятся заказы или станции.

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

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

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

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

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

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

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

  • HighМеханизм расчета ищет решение с минимальным нарушением временных окон путем увеличения общего времени в пути. Выберите данный параметр, если прибытие на заказы вовремя важнее, чем сокращение общей стоимости. Это может быть необходимо, если вы встречаетесь с клиентами по вашей просьбе и не хотите создавать им неудобства в случае опоздания (альтернативным вариантом является использование жесткого временного окна, которое нельзя нарушить).При наличии других ограничений задачи выбора маршрута транспорта может быть невозможно посетить все заказы в пределах выделенных для них временных окон. В этом случае даже настройка Высокий может вызывать нарушения.
  • MediumМеханизм расчета будет стремиться найти компромиссное решение с одновременным соблюдением временных окон и обеспечением минимальных затрат. Это значение по умолчанию.
  • LowМеханизм расчета ищет решение с минимальным временем в пути независимо от временных окон. Выберите данный параметр, если соблюдение временных окон не столь важно, как сокращение общей стоимости. Этот параметр также можно использовать при накоплении отставания в обработке заказов. Для обработки как можно большего количества заказов в день и сокращения невыполненных заказов можно выбрать данный параметр несмотря на то, что клиенты будут испытывать неудобства из-за позднего прибытия транспортных средств.
String
excess_transit_factor
(Дополнительный)

Задает важность сокращения избыточного времени в пути. Избыточное время в пути – это затрачиваемое сверх необходимого время для перемещения от одного вызова к другому. Лишнее время может возникать по причине перерывов или возвращения в гараж между вызовами. Параметр имеет смысл только при использовании пар заказов.

Более подробно о парах заказов

  • HighМеханизм расчета ищет решение с минимальным лишним временем между вызовами за счет увеличения общего времени в пути. Используйте этот параметр при необходимости перевозки людей между парами заказов, и вы хотите сократить их время в пути. Эта опция подходит для такси.
  • MediumМеханизм расчета ищет компромиссное решение с одновременным сокращением избыточного времени и обеспечением минимальных общих затрат. Это значение по умолчанию.
  • LowМеханизм расчета ищет решение, минимизирующее общие затраты, независимо от избыточного времени в пути. Этот параметр обычно используется курьерской службой. Поскольку курьерская служба перевозит грузы, а не людей, время в пути не имеет большого значения. Использование данного параметра позволяет курьерской службе обслуживать парные заказы в должной очередности и минимизировать общие затраты.
String
generate_directions_on_solve
(Дополнительный)

Указывает, будет ли создаваться путевой лист.

  • DIRECTIONSПри расчете будет создан пошаговый путевой лист. Это значение по умолчанию.
  • NO_DIRECTIONSПри расчете не будет создаваться пошаговый путевой лист.
Boolean
spatial_clustering
(Дополнительный)

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

  • CLUSTERЗаказы, назначенные отдельному маршруту будут пространственно кластеризованы. Деление заказов на кластеры приводит к сохранению маршрутов в небольших областях и сокращает частоту пересечения линий маршрутов; при этом деление на кластеры может увеличить общее время в пути. Это значение по умолчанию.
  • NO_CLUSTERМеханизм расчета не учитывает приоритет пространственной кластеризации заказов, и линии маршрутов могут пересекаться. Используйте эту опция, если заданы зоны маршрутов.
Boolean

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

NameОбъяснениеТип данных
out_network_analysis_layer

Новый слой сетевого анализа.

Слой Network Analyst

Пример кода

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

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

import arcpy 
arcpy.env.workspace = "C:/Data/SanFrancisco.gdb" 
arcpy.na.MakeVehicleRoutingProblemLayer("Transportation/Streets_ND")
MakeVehicleRoutingProblemAnalysisLayer, пример 2 (окно Python)

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

import arcpy
arcpy.env.workspace = "C:/Data/SanFrancisco.gdb"
arcpy.na.MakeVehicleRoutingProblemAnalysisLayer('Streets_ND', 'FridayRoutes', 
                                                'Driving Time', 'Minutes', 
                                                'Miles', '1/2/2020', 
                                                'LOCAL_TIME_AT_LOCATIONS', 
                                                'TRUE_LINES_WITHOUT_MEASURES', 
                                                'High', 'Medium', 'DIRECTIONS')
MakeVehicleRoutingProblemAnalysisLayer, пример 3 (рабочий процесс)

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

# Name: MakeVehicleRoutingProblemLayer_Workflow.py
# Description: Find the best routes for a fleet of vehicles, which is operated
#              by a distribution company, to deliver goods from a main
#              distribution center to a set of grocery stores.
# Requirements: Network Analyst Extension

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

try:
    # Check out the 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/SanFrancisco.gdb"
    network = os.path.join(input_gdb, "Transportation", "Streets_ND")
    layer_name = "StoreDeliveryRoute"
    travel_mode = "Driving Time"
    time_units = "Minutes"
    distance_units = "Miles"
    in_orders = os.path.join(input_gdb, "Analysis/Stores")
    in_depots = os.path.join(input_gdb, "Analysis/DistributionCenter")
    in_routes = os.path.join(input_gdb, "Analysis/Routes")
    output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")

    # Create a new Vehicle Routing Problem (VRP) layer. Since the time-based
    # attributes such as ServiceTime on orders and CostPerUnitTime on routes is
    # recorded in minutes, we use minutes for time_units parameter. As we are
    # using cost per unit distance in routes, we have to specify a distance 
    # attribute. The values for CosterPerUnitDistance are in miles, so we
    # specify miles for distance units parameter
    result_object = arcpy.na.MakeVehicleRoutingProblemAnalysisLayer(network, 
                                            layer_name, travel_mode, 
                                            time_units, distance_units,
                                            line_shape="STRAIGHT_LINES")
    
    # Get the layer object form 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 VRP layer.
    sub_layer_names = arcpy.na.GetNAClassNames(layer_object)
    # Store the layer names that we will use later
    orders_layer_name = sub_layer_names["Orders"]
    depots_layer_name = sub_layer_names["Depots"]
    routes_layer_name = sub_layer_names["Routes"]

    # Load the store locations as orders. Using field mappings we map the
    # TimeWindowStart1, TimeWindowEnd1, and DeliveryQuantities properties
    # for Orders from the fields of store features and assign a value of
    # 0 to MaxViolationTime1 property. The Name and ServiceTime properties
    # have the correct mapped field names when using the candidate fields
    # from store locations feature class.
    candidate_fields = arcpy.ListFields(in_orders)
    order_field_mappings = arcpy.na.NAClassFieldMappings(layer_object, 
                                                         orders_layer_name,
                                                         False, candidate_fields)
    order_field_mappings["TimeWindowStart1"].mappedFieldName = "TimeStart1"
    order_field_mappings["TimeWindowEnd1"].mappedFieldName = "TimeEnd1"
    order_field_mappings["DeliveryQuantities"].mappedFieldName = "Demand"
    order_field_mappings["MaxViolationTime1"].defaultValue = 0
    arcpy.na.AddLocations(layer_object, orders_layer_name, in_orders, 
                          order_field_mappings, "")

    # Load the depots from the distribution center features. Using field mappings
    # we map the Name properties for Depots from the fields of distribution 
    # center features and assign a value of 8 AM for TimeWindowStart1 and a
    # value of 5 PM for TimeWindowEnd1 properties
    depot_field_mappings = arcpy.na.NAClassFieldMappings(layer_object, 
                                                         depots_layer_name)
    depot_field_mappings["Name"].mappedFieldName = "Name"
    depot_field_mappings["TimeWindowStart1"].defaultValue = "8 AM"
    depot_field_mappings["TimeWindowEnd1"].defaultValue = "5 PM"
    arcpy.na.AddLocations(layer_object, depots_layer_name, in_depots, 
                          depot_field_mappings, "")
    
    # Load the routes from a table containing information about routes. In this
    # case, since the fields on the routes table and property names for Routes
    # are the same, we will just use the default field mappings
    arcpy.na.AddLocations(layer_object, routes_layer_name, in_routes, "", "")

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

    # Save the solved VRP layer as a layer file on disk with relative paths
    arcpy.management.SaveToLayerFile(layer_object, output_layer_file, "RELATIVE")

    print ("Script Completed Successfully")

except Exception as e:
    # If an error occurred, print line number and error message
    import traceback
    import sys
    tb = sys.exc_info()[2]
    print ("An error occurred on line %i" % tb.tb_lineno)
    print (str(e))

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

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

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