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

Сводка

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

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

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

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

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

Синтаксис

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})
ParameterОбъяснениеТип данных
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/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
time_zone
(Дополнительный)

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

  • LOCAL_TIME_AT_LOCATIONSЗначение параметра time_of_day относится к часовому поясу, в котором находится первая остановка маршрута. Используется по умолчанию.Если вы создаете несколько маршрутов в различных часовых поясах, время начала будет отсчитываться от Всемирного координированного времени (UTC). Например, если time_of_day имеет значение 2 января, 10:00, то это означает, что маршрут начнется в 10:00 утра. 3 p.m. по UTC) для часового пояса Восточное время, и в 10:00 утра центрального стандартного времени 10 a.m. по UTC) для часового пояса Центральное время. Время начала по UTC будет отличаться на один час.Время и дата прибытия и отправления, записанные в выходном классе объектов-остановок, будут соответствовать часовому поясу первой остановки каждого маршрута.
  • UTCЗначения параметра time_of_day определяются в формате Всемирного координированного времени (UTC). Используйте эту опцию, если вы хотите создать маршрут для определенного времени, например текущего, но точно не знаете, в каком часовом поясе будет находиться первая остановка.Если вы создаете несколько маршрутов, охватывающих различные часовые пояса, время начала по UTC будет синхронизировано. Например, если time_of_day имеет значение 2 января, 10:00, то это означает, что маршрут начнется в 5:00 утра. 10 a.m. по UTC) для часового пояса Восточное время, и в 4:00 утра центрального стандартного времени 10 a.m. по 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

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

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

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

Слой Network Analyst

Пример кода

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

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

# 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 = 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: Да

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