RouteSolverProperties (arcpy.na)

Резюме

Предоставляет доступ к свойствам слоя сетевого анализа маршрута. Функция GetSolverProperties используется для получения объекта RouteSolverProperties из слоя сетевого анализа маршрута.

Обсуждение

Объект RouteSolverProperties предоставляет доступ для чтения и записи ко всем свойствам слоя сетевого анализа маршрута. Этот объект можно использовать для изменения нужных свойств анализа слоя маршрута, а соответствующий слой можно повторно рассчитать для получения необходимых результатов. Новый слой маршрутов можно создать с помощью инструмента геообработки Создать слой маршрута (Make Route Layer). Получение объекта RouteSolverProperties из нового слоя маршрута позволяет повторно использовать существующий слой для последующего анализа, а не создавать новый слой для каждого анализа, что может замедлять работу.

После изменения свойства объекта RouteSolverProperties соответствующий слой можно использовать с другими функциями и инструментами геообработки. Обновлять слой для внесения изменения не требуется.

Свойства

СвойствоОбъяснениеТип данных
accumulators
(чтение и запись)

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

String
attributeParameters
(чтение и запись)

Дает возможность получать или задавать параметризованные атрибуты для использования их в анализе. Это свойство возвращает словарь Python. Ключом в словаре является кортеж двух значений – имени атрибута и имени параметра. Значение каждого элемента в словаре является значением параметра.

Параметризованные сетевые атрибуты используются для моделирования некоторого динамического аспекта значения атрибута. Например, туннель с ограничением высоты 12 футов может быть смоделирован с использованием параметра. В данном случае в качестве значения параметра следует указать высоту транспортного средства в футах. Если транспортное средство выше, чем 12 футов (3,7 м), ограничение будет оценено как верное (true), таким образом, проезд по туннелю будет запрещен. Подобным образом у моста может быть параметр, указывающий ограничение по весу.

Попытка изменить непосредственно свойство attributeParameters не приведет к обновлению значений. Вместо этого следует всегда использовать для установки значений этого свойства новый объект словаря. Различие между этими подходами проиллюстрировано следующими двумя блоками кода.

#Don't attempt to modify the attributeParameters property in place.
#This coding method won't work.

solverProps.attributeParameters[('HeightRestriction', 'RestrictionUsage')] = "PROHIBITED"
#Modify the attributeParameters property using a new dictionary object.
#This coding method works. 

params = solverProps.attributeParameters
params[('HeightRestriction', 'RestrictionUsage')] = "PROHIBITED"
solverProps.attributeParameters = params
Если слой сетевого анализа не имеет параметризованных атрибутов, это свойство вернет значение None (Нет).

Dictionary
findBestSequence
(чтение и запись)

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

  • FIND_BEST_ORDERПорядок остановок изменяется для получения оптимального маршрута. Этот параметр заменяет задачу поиска кратчайшего пути на задачу движущегося торгового представителя. Для выбора этого варианта также служит значение True.
  • USE_INPUT_ORDERПорядок остановок соответствует порядку ввода. Для выбора этого варианта также служит значение False.
String
impedance
(чтение и запись)

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

String
orderingType
(чтение и запись)

Определяет способ изменения порядка остановок, если свойство findBestSequence имеет значение FIND_BEST_ORDER. Список возможных значений следующий:

  • PRESERVE_BOTHСохраняет первую и последнюю остановки входного заказа, как первую и последнюю остановки в маршруте.
  • PRESERVE_FIRSTСохраняет на месте первую остановку заказа, как первую остановку маршрута, при этом последняя остановка может менять порядок.
  • PRESERVE_LASTСохраняет на месте последнюю остановку в маршруте, как последнюю остановку маршрута, при этом первая остановка может менять порядок.
  • PRESERVE_NONEИ первая, и последняя остановки могут менять порядок.
String
outputPathShape
(чтение и запись)

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

  • TRUE_LINES_WITH_MEASURESПолученные маршруты будут иметь точную форму лежащих ниже источников сети. Более того, в состав результатов будут входить также измерения маршрута в системе линейных координат. Эти измерения отсчитываются от первой остановки и записывают накапливаемый импеданс для достижения данного положения.
  • TRUE_LINES_WITHOUT_MEASURESПолученные маршруты будут иметь точную форму лежащих ниже источников сети.
  • STRAIGHT_LINESФорма выходного маршрута будет отдельной прямой линией между остановками.
  • NO_LINESДля выходных маршрутов форма не создается.
String
restrictions
(чтение и запись)

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

String
solverName
(только чтение)

Возвращает имя механизма расчета, на который ссылается слой сетевого анализа, использованный для получения данного объекта свойств механизма расчета. Это свойство всегда возвращает строковое значение Route Solver (Механизм расчета маршрута), если доступ к нему осуществляется из объекта RouteSolverProperties.

String
timeOfDay
(чтение и запись)

Дает возможность получать или задавать время и дату начала маршрута. Время начала маршрута в основном используется для поиска маршрутов на основе такого атрибута импеданса, который изменяется в течение суток. Например, время начала, равное 9 часам утра, может применяться для поиска маршрута с учетом дорожного движения в час пик. Значение None (Нет) указывает на то, что дата и время не применяются.

Вместо конкретной даты может быть задан день недели, при помощи следующих условных дат:

  • Сегодня – 12/30/1899
  • Воскресенье – 12/31/1899
  • Понедельник – 1/1/1900
  • Вторник – 1/2/1900
  • Среда – 1/3/1900
  • Четверг – 1/4/1900
  • Пятница – 1/5/1900
  • Суббота – 1/6/1900

К примеру, если маршрут должен начинаться в 17:00 во вторник, следует указать значение datetime.datetime(1900, 1, 2, 17,0,0).

DateTime
uTurns
(чтение и запись)

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

  • ALLOW_UTURNSРазвороты разрешены в соединениях с любым количеством смежных ребер.
  • NO_UTURNSРазвороты запрещены во всех соединениях, вне зависимости от их валентности. Обратите внимание, что, даже при выборе этого параметра, развороты все же разрешены в сетевых положениях. Чтобы запретить развороты и в положениях сети, можно задать индивидуальное свойство положения CurbApproach.
  • ALLOW_DEAD_ENDS_ONLYРазвороты запрещены во всех соединениях, кроме тех, у которых имеется только одно смежное ребро (тупик).
  • ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLYРазвороты запрещены в соединениях с ровно двумя смежными ребрами, но разрешены на перекрестках (в соединениях с тремя смежными ребрами или более) и в тупиках (соединениях с ровно одним смежным ребром). Зачастую сети имеют избыточные соединения в середине сегмента дороги. Этот вариант позволяет предотвратить развороты транспортных средств в подобных точках.
String
useHierarchy
(чтение и запись)

Отвечает за использование атрибута иерархии при проведении анализа. Список возможных значений следующий:

  • USE_HIERARCHY Для анализа используется атрибут иерархии. Применение иерархии приводит к предпочтению при расчете ребер высшего порядка по сравнению с ребрами низшего порядка. Расчеты с иерархией выполняются быстрее, и они могут использоваться для моделирования предпочтений водителя, который скорее выберет для проезда автостраду, нежели местную дорогу – даже если это приведет к увеличению длины пути. Эта опция применима только в том случае, если в наборе сетевых данных, на который ссылается слой сетевых данных ArcGIS Network Analyst, имеется атрибут иерархии. Для выбора этого варианта также служит значение True.
  • NO_HIERARCHYДля анализа атрибут иерархии не используется. Расчет без применения иерархии дает точный маршрут для набора сетевых данных. Для выбора этого варианта также служит значение False.
String
useTimeWindows
(чтение и запись)

Определяет необходимость использования для остановок временных окон. Список возможных значений следующий:

  • USE_TIMEWINDOWSВ маршруте учитываются временные окна на остановках. В случае прибытия на остановку до своего временного окна выполняется ожидание до начала временного окна. В случае прибытия на остановку после окончания её временного окна происходит превышение временного окна. При вычислении маршрута суммарное превышение временных окон сравнивается с минимальным импедансом. Этот вариант применим только в случае, если атрибут стоимости сети, указанный в свойстве impedance, измеряется в единицах времени. Для выбора этого варианта также служит значение True.
  • NO_TIMEWINDOWSВ маршруте игнорируются временные окна на остановках. Для выбора этого варианта также служит значение False.
String

Пример кода

RouteSolverProperties (Свойства механизма расчета маршрута) – пример 1 (окно Python)

В скрипте производится обновление свойства импеданса атрибутом стоимости TravelTime, в качестве суммируемых атрибутов указываются атрибуты стоимости Minutes и Meters, в качестве времени начала маршрута используется текущее время. В скрипте предполагается, что в новом документе карты создан слой сетевого анализа маршрута с именем Route на основе учебного набора сетевых данных на территорию города Сан-Франциско.

#Get the route layer object from a layer named "Route" in the table of contents
routeLayer = arcpy.mapping.Layer("Route")

#Get the route solver properties object from the route layer
solverProps = arcpy.na.GetSolverProperties(routeLayer)

#Update the properties for the route layer using the route solver properties object
solverProps.impedance = "TravelTime"
solverProps.accumulators = ["Meters", "Minutes"]
#Only set the time component from the current date time as time of day
solverProps.timeOfDay = datetime.datetime.now().time()
RouteSolverProperties (Свойства механизма расчета маршрута) – пример 2 (рабочий процесс)

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

import arcpy

#Set up the environment
arcpy.env.overwriteOutput = True
arcpy.CheckOutExtension("network")

#Set up variables
networkDataset = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
stops = "C:/Data/SanFrancisco.gdb/Analysis/Stores"
fastestRoute = "C:/Data/SanFrancisco.gdb/FastestRoute"
shortestRoute = "C:/Data/SanFrancisco.gdb/ShortestRoute"

#Make a new route layer using travel time as impedance to determine fastest route
routeLayer = arcpy.na.MakeRouteLayer(networkDataset, "StoresRoute",
                                     "TravelTime").getOutput(0)

#Get the network analysis class names from the route layer
naClasses = arcpy.na.GetNAClassNames(routeLayer)

#Get the routes sublayer from the route layer
routesSublayer = arcpy.mapping.ListLayers(routeLayer, naClasses["Routes"])[0]

#Load stops
arcpy.na.AddLocations(routeLayer, naClasses["Stops"], stops)

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

#Copy the route as a feature class
arcpy.management.CopyFeatures(routesSublayer, fastestRoute)

#Get the RouteSolverProperties object from the route layer to modify the
#impedance property of the route layer.
solverProps = arcpy.na.GetSolverProperties(routeLayer)

#Set the impedance property to "Meters" to determine the shortest route.
solverProps.impedance = "Meters"

#Resolve the route layer
arcpy.na.Solve(routeLayer)

#Copy the route as a feature class
arcpy.management.CopyFeatures(routesSublayer, shortestRoute)

arcpy.AddMessage("Completed")

Связанные темы

9/11/2013