arcpy.na.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}, {analysis_geodatabase}, {analysis_feature_dataset_name})
|
Имя
|
Объяснение
|
Тип данных
|
|
network_data_source
|
Набор сетевых данных или сервис, для которого выполняется сетевой анализ.
Параметр может быть задан с помощью одного из следующих:
Путь к каталогу набора сетевых данных
Объект слоя набора сетевых данных
Строковое имя слоя набора сетевых данных
URL-адрес для ArcGIS Online или портала ArcGIS Enterprise, настроенного со стандартными сервисами маршрутизации
Для использования URL-адреса портала необходимо выполнить вход на портал под учетной записью с правами на маршрутизацию.
Более подробно о том, как можно войти на портал в Python
Более подробно о сетевом анализе с помощью сервисов маршрутизации
При использовании портала ArcGIS Online или ArcGIS Enterprise, сервисы маршрутизации которого настроены с использованием ArcGIS Online в качестве входной сети, при выполнении анализа будут потребляться кредиты и присутствовать определенные ограничения, такие как количество допустимых входных данных.
Подробнее о потреблении кредитов и ограничениях при выполнении сетевого анализа
|
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. Если маршрут выполняется за несколько дней и указано только время начала, то используется текущая дата.
После решения время начала и окончания маршрута заполняется для выходных маршрутов. Эти время начала и время окончания также используются при создании направлений.
Настройте анализ, чтобы использовать одну из следующих специальных дат для моделирования дня недели или текущей даты вместо определенной статической даты:
Today—30.12.1899
Sunday—31.12.1899
Monday—01.01.1900
Tuesday—02.01.1900
Wednesday—03.01.1900
Thursday—04.01.1900
Friday—05.01.1900
Saturday—06.01.1900
Узнать подробнее о том, как дата и время используется и интерпретируется в сетевом анализеs
|
Date
|
|
time_zone
(Дополнительный)
|
Указывает часовой пояс параметра time_of_day.
LOCAL_TIME_AT_LOCATIONS–Значение параметра time_of_day относится к часовому поясу, в котором находится первая остановка маршрута. Используется по умолчанию. Если вы создаете несколько маршрутов в различных часовых поясах, время начала будет отсчитываться от Всемирного координированного времени (UTC). Например, если значение time_of_day, 10:00, 2 января означает время начала 10:00 утра по восточному поясному времени (15:00 UTC) для маршрутов, начинающихся в восточном часовом поясе, и 10:00 утра по центральному стандартному времени (16:00 UTC) для маршрутов, начинающихся в центральный часовой пояс. Время начала по UTC будет отличаться на один час. Время и дата прибытия и отправления, записанные в выходном классе объектов-остановок, будут соответствовать часовому поясу первой остановки каждого маршрута.
UTC–Значения параметра time_of_day определяются в формате Всемирного координированного времени (UTC). Используйте эту опцию, если вы хотите создать маршрут для определенного времени, например текущего, но точно не знаете, в каком часовом поясе будет находиться первая остановка. Если вы создаете несколько маршрутов, охватывающих различные часовые пояса, время начала по UTC будет синхронизировано. Например, если значение time_of_day, 10:00, это означает, что маршрут начнется в 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
(Дополнительный)
|
Определяет, будут ли создаваться путевые листы в процессе анализа.
Для анализа, в котором не требуется создавать пошаговый путевой лист, отключение опции создания путевого листа сократит время, необходимое для анализа.
|
Boolean
|
|
time_zone_for_time_fields
(Дополнительный)
|
Задает часовой пояс, который будет использоваться для интерпретации полей времени входных таблиц, например, полей, используемых для временных окон.
LOCAL_TIME_AT_LOCATIONS–Даты и время в полях времени для остановки будут интерпретироваться в соответствии с часовым поясом, в котором расположена эта остановка. Используется по умолчанию.
UTC–Даты и время в полях времени для остановки используют всемирное координированное время (UTC).
|
String
|
|
ignore_invalid_locations
(Дополнительный)
|
Указывает, будут ли игнорироваться неверные входные местоположения. Обычно местоположения недействительны, если они не могут быть обнаружены в сети. Когда недопустимые местоположения игнорируются, решатель пропустит их и попытается выполнить анализ, используя оставшиеся местоположения.
SKIP–Неверные входные местоположения будут игнорироваться, а использоваться будут только допустимые местоположения. Используется по умолчанию.
HALT–Будут использоваться все входные местоположения. Неверные местоположения приведут к сбою анализа.
|
Boolean
|
|
analysis_geodatabase
(Дополнительный)
|
Рабочая область базы геоданных, где будут храниться данные подслоя нового слоя сетевого анализа. Если этот параметр не указан, данные подслоя будут созданы в среде геообработки Текущей рабочей области, которая обычно является базой геоданных проекта.
Узнайте больше об источнике данных анализа для слоя сетевого анализа
|
Workspace
|
|
analysis_feature_dataset_name
(Дополнительный)
|
Имя для нового набора классов объектов, который этот инструмент создаст в базе геоданных анализа для хранения данных подслоёв сетевого анализа. Если не указано, набор классов объектов будет создан с уникальным случайным именем.
Узнайте больше об источнике данных анализа для слоя сетевого анализа
|
String
|
Производные выходные данные
|
Имя
|
Объяснение
|
Тип данных
|
|
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:
#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:
#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))