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})
|
Имя
|
Объяснение
|
Тип данных
|
|
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,...]
(Дополнительный)
|
Список атрибутов стоимости, которые будут суммироваться во время анализа. Эти атрибуты суммирования предназначены только для справки: механизм расчета использует только атрибут стоимости, указанный параметром Атрибут импеданса, для вычисления маршрута.
Для каждого суммируемого атрибута стоимости к маршрутам, являющимися выходными для механизма расчета, добавляется свойство [Impedance] Total_.
|
String
|
|
UTurn_policy
(Дополнительный)
|
Определяет правила разворота, используемые в соединениях. При разрешении разворотов неявно предполагается, что механизм расчета позволяет поворот на соединении и продолжение движения по той же улице в обратную сторону. Учитывая, что соединения представляют собой пересечения улиц и тупики, различные транспортные средства могут разворачиваться на некоторых соединениях, но не на всех – это зависит от того, является ли соединение перекрестком или тупиком. Чтобы приспособиться к этому, параметр правила разворота неявно определяется количеством ребер, которые участвуют в соединении, что известно как валентность соединения. Ниже приведены допустимые значения для данного параметра; каждое из них сопровождается описанием значения в терминах валентности соединения.
Для более точного определения правил разворота можно добавить глобальный параметр задержки на повороте в сетевой атрибут стоимости или настроить его, если он уже существует, а также уделить особое внимание конфигурации обратных поворотов. Можно также задать для сетевых положений свойство CurbApproach.
ALLOW_UTURNS–Развороты разрешены в соединениях с любым количеством смежных ребер. Это значение используется по умолчанию.
NO_UTURNS–Развороты запрещены во всех соединениях, вне зависимости от их валентности. Но даже при выборе этой опции развороты в сетевых положениях по-прежнему разрешены. Запретить развороты в отдельных сетевых положениях можно с помощью свойства положения CurbApproach.
ALLOW_DEAD_ENDS_ONLY–Развороты запрещены во всех соединениях, кроме тех, у которых имеется только одно смежное ребро (тупик).
ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLY–Развороты запрещены в соединениях с ровно двумя смежными ребрами, но разрешены на перекрестках (в соединениях с тремя смежными ребрами или более) и в тупиках (соединениях с ровно одним смежным ребром). Часто сети имеют избыточные соединения в середине сегмента дороги. Эта опция позволяет запретить развороты транспортных средств в таких местах.
|
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: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
Например, чтобы указать, что маршрут должен начинаться в 5:00 во вторник, следует указать значение параметра, равное 02.01.1900 17:00.
После решения время начала и окончания маршрута заполняется для выходных маршрутов. Эти время начала и время окончания также используются при создании направлений.
Узнать подробнее о том, как дата и время используется и интерпретируется в сетевом анализеs
|
Date
|
Производные выходные данные
|
Имя
|
Объяснение
|
Тип данных
|
|
output_layer
|
Только что созданный слой сетевого анализа.
|
Network Analyst Layer
|
Пример кода
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))