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

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

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

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

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

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

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

Параметры

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Сегодня – 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). Например, значение Время суток 10:00, 2 января означает время начала 10:00 утра по восточному поясному времени (15:00 UTC) для маршрутов, начинающихся в восточном часовом поясе, и 10:00 утра по центральному стандартному времени (16:00 UTC) для маршрутов, начинающихся в центральный часовой пояс. Время начала по UTC будет отличаться на один час.Время и дата прибытия и отправления, записанные в выходном классе объектов-остановок, будут соответствовать часовому поясу первой остановки каждого маршрута.
  • UTCЗначения параметра Время суток указываются во Всемирном координированном времени (UTC). Используйте эту опцию, если вы хотите создать маршрут для определенного времени, например текущего, но точно не знаете, в каком часовом поясе будет находиться первая остановка.Если вы создаете несколько маршрутов, охватывающих различные часовые пояса, время начала по UTC будет синхронизировано. Например, значение Время суток 10:00, 2 января означает время начала 05:00 по восточному поясному времени (10:00 UTC) для маршрутов, начинающихся в восточном часовом поясе, и 04:00 по центральному стандартному времени (10:00 UTC) для маршрутов, начинающихся в центральном часовом поясе. Оба маршрута начнутся в 10:00 утра по UTC.Время и дата прибытия и отправления, записанные в выходном классе объектов-остановок, будут соответствовать времени UTC.
String
Линейная геометрия
(Дополнительный)

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

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

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

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

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

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

String
Создание направлений при расчете
(Дополнительный)

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

  • Отмечено – во время расчета будут создаваться. Используется по умолчанию.
  • Не отмечено – во время расчета не будут создаваться пошаговые направления.

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

Boolean
Часовой пояс для полей времени
(Дополнительный)

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

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

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

  • Отмечено - неверные входные местоположения будут игнорироваться, используются только допустимые местоположения. Это значение по умолчанию
  • Не отмечено - все входные местоположения будут использоваться. Неверные входные местоположения приводят к сбою анализа.
Boolean

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

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

Выходной слой анализа.

Network Analyst Layer

arcpy.management.MakeRouteAnalysisLayer(network_data_source, {layer_name}, {travel_mode}, {sequence}, {time_of_day}, {time_zone}, {line_shape}, {accumulate_attributes}, {generate_directions_on_solve}, {time_zone_for_time_fields}, {ignore_invalid_locations})
ИмяОписаниеТип данных
network_data_source

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

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

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

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

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

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

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

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

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

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

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

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

  • Сегодня – 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
(Дополнительный)

Указывает часовой пояс параметра time_of_day.

  • LOCAL_TIME_AT_LOCATIONSЗначение параметра time_of_day относится к часовому поясу, в котором находится первая остановка маршрута. Используется по умолчанию.Если вы создаете несколько маршрутов в различных часовых поясах, время начала будет отсчитываться от всемирного координированного времени (UTC). Например, если значение time_of_day - 2-е Января, 10:00 a.m., это означает, что маршрут начнется в 10:00 по восточному поясному времени (15:00 UTC) для маршрутов, начинающихся в восточном часовом поясе, и в 10:00 по центральному стандартному времени (16:00 UTC) для маршрутов, начинающихся в центральном часовом поясе. Время начала по UTC будет отличаться на один час.Время и дата прибытия и отправления, записанные в выходном классе объектов-остановок, будут соответствовать часовому поясу первой остановки каждого маршрута.
  • UTCЗначения параметра time_of_day определяются в формате Всемирного координированного времени (UTC). Используйте эту опцию, если вы хотите создать маршрут для определенного времени, например текущего, но точно не знаете, в каком часовом поясе будет находиться первая остановка.Если вы создаете несколько маршрутов, охватывающих различные часовые пояса, время начала по UTC будет синхронизировано. Например, если значение time_of_day - 2-е Января, 10:00 a.m., это означает, что маршрут начнется в 05:00 по восточному поясному времени (10:00 UTC) для маршрутов, начинающихся в восточном часовом поясе, и в 04:00 по центральному стандартному времени (10:00 UTC) для маршрутов, начинающихся в центральном часовом поясе. Оба маршрута начнутся в 10:00 утра по UTC.Время и дата прибытия и отправления, записанные в выходном классе объектов-остановок, будут соответствовать времени UTC.
String
line_shape
(Дополнительный)

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

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

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

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

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

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

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

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

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

  • DIRECTIONSВо время расчета будут создаваться пошаговые направления. Используется по умолчанию.
  • NO_DIRECTIONSВо время расчета не будут создаваться пошаговые направления.

Для анализа, в котором не требуется генерировать пошаговой путевой лист, использование опции NO_DIRECTIONS сократит время, необходимое для анализа.

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

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

  • LOCAL_TIME_AT_LOCATIONSДаты и время в полях времени для остановки будут интерпретироваться в соответствии с часовым поясом, в котором расположена эта остановка. Используется по умолчанию.
  • UTCДаты и время в полях времени для остановки используют всемирное координированное время (UTC).
String
ignore_invalid_locations
(Дополнительный)

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

  • SKIPНеверные входные местоположения будут игнорироваться, используются только допустимые местоположения. Это значение по умолчанию
  • HALTВсе входные местоположения будут использоваться. Неверные входные местоположения приводят к сбою анализа.
Boolean

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

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

Выходной слой анализа.

Network Analyst Layer

Пример кода

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

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

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

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

network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeRouteAnalysisLayer(network, "InspectionRoute", "Driving Time",
                        "FIND_BEST_ORDER", "1/1/1900 9:00 AM", "UTC",
                        "ALONG_NETWORK", ["Meters", "TravelTime"])
MakeRouteAnalysisLayer, пример 3 (рабочий процесс)

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

# Name: MakeRouteAnalysisLayer_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:
    #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/SanFrancisco.gdb"
    network = os.path.join(input_gdb, "Transportation", "Streets_ND")
    layer_name = "BestRoute"
    travel_mode = "Driving Time"
    address_locator = "C:/Data/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.MakeRouteAnalysisLayer(network, layer_name,
                                                                    travel_mode)

    #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, "")

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

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

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

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

# Name: MakeRouteAnalysisLayer_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:
    #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/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"
    travel_mode = "Driving Time"

    #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 driving time, but compute the
    #distance traveled by accumulating the Meters attribute.
    result_object = arcpy.na.MakeRouteAnalysisLayer(network, layer_name,
                                        travel_mode, time_of_day=start_time,
                                        accumulate_attributes=["Meters"])

    #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, "")
    arcpy.na.AddLocations(layer_object, stops_layer_name, stops_work,
                        field_mappings, "", append="APPEND")

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

    # Get the output Routes sublayer and save it to a feature class
    routes_sublayer = arcpy.na.GetNASublayer(layer_object, "Routes")
    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))