RouteSolverProperties

Сводка

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

Описание

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

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

Свойства

ВладениеОбъяснениеТип данных
accumulators
(чтение и запись)

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

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

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

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

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

Не стоит изменять свойство attributeParameters на месте; этот метод кодировки не будет работать.

solverProps.attributeParameters[('HeightRestriction', 'RestrictionUsage')] = "PROHIBITED"

Измените свойство attributeParameters используя новый объект словарь.

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
streetDirectionsProperties
(чтение и запись)

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

Object
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).

Параметр timeZoneUsage определяет, какому часовому поясу соответствуют эти время и дата: UTC или часовому поясу, в котором находится первая остановка.

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

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

  • GEO_LOCALПараметр timeOfDay относится к часовому поясу, в котором находится первая остановка.
  • UTCЗначения параметра timeOfDay определяются в формате Всемирного координированного времени (UTC). Используйте эту опцию, если хотите провести анализ для конкретного времени, например текущего, но не знаете, в каком часовом поясе будут находиться пункты обслуживания или точки спроса.

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

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

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

  • GEO_LOCALЗначения даты и времени для окон времени остановки заданы по времени часового пояса, в котором расположена эта остановка.
  • UTCЗначения даты и времени для окон времени остановок указаны по универсальному глобальному времени (UTC).
String
travelMode
(только чтение)

Доступ к режиму движения устанавливается для слоя сетевого анализа как объект arcpy.na.TravelMode.

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

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

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

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

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

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

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

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

String

Обзор метода

МетодОбъяснение
applyTravelMode (travel_mode)

Обновляет свойства анализа слоя network analyst на основе объекта режима передвижения. После этого обновленный слой network analyst может быть рассчитан для завершения анализа.

Методы

applyTravelMode (travel_mode)
ParameterОбъяснениеТип данных
travel_mode

Переменная, ссылающаяся на объект режима передвижения, который был получен на основе слоя сетевых данных. Список объектов режима передвижения можно получить, вызвав функцию arcpy.na.GetTravelModes.

Object

При создании слоя network analyst он получит значения по умолчанию для всех своих свойств анализа. Отдельные свойства анализа можно обновлять с помощью объекта свойств механизма расчета, полученного из слоя network analyst. Режим перемещения сохраняет предопределенный набор настроек анализа, который помогает выполнять определенные виды анализа – например, режим передвижения пешком сохраняет настройки анализа, необходимые для выполнения по-временного анализа передвижения пешим ходом.

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

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

Если параметр travel_mode не привязан к объекту режима передвижения или строке, возникает исключительная ситуация TypeError. Если параметр travel_mode привязан к строке, но строка не может быть внутренне конвертирована в строковое представление объекта режима передвижения, возникает исключительная ситуация ValueError.

Пример кода

RouteSolverProperties, пример 1 (рабочий процесс)

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

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

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

# Name: RouteSolverProperties_workflow_01.py
# Description: Find the fastest route at two different times of day. The travel
#              time is different because of traffic conditions. Use the
#              RouteSolverProperties object to update an existing Route layer
#              before re-running the analysis.
# 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")
    stops = os.path.join(input_gdb, "Analysis", "Stores")
    route_0830 = os.path.join(output_dir, "Output.gdb", "Route_MorningRush")
    route_1100 = os.path.join(output_dir, "Output.gdb", "Route_MidMorning")

    # Make a new route layer using travel time as impedance to determine fastest
    # route
    route_layer = arcpy.na.MakeRouteAnalysisLayer(network, "StoresRoute",
                                         "Driving Time",
                                         time_of_day="8:30 AM").getOutput(0)

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

    # Load stops
    arcpy.na.AddLocations(route_layer, na_classes["Stops"], stops)

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

    # Get the routes sublayer from the route layer
    routes_sublayer = arcpy.na.GetNASublayer(route_layer, "Routes")

    # Save the resulting route as a feature class. This route was solved at 8:30
    # AM, morning rush hour.
    arcpy.management.CopyFeatures(routes_sublayer, route_0830)

    # Get the RouteSolverProperties object from the route layer to modify the
    # timeOfDay property of the route layer.
    solver_props = arcpy.na.GetSolverProperties(route_layer)

    # Set the impedance property to "Meters" to determine the shortest route.
    solver_props.timeOfDay = "11:00 AM"

    # Re-solve the route layer
    arcpy.na.Solve(route_layer)

    # Save the resulting route as a feature class. This route was solved at 11:00
    # AM, mid-morning when traffic is probably lighter.
    arcpy.management.CopyFeatures(routes_sublayer, route_1100)

    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 occured on line %i" % tb.tb_lineno)
    print(str(e))
ApplyTravelMode, пример 2 (окно Python)

В этом скрипте показано, как использовать режим передвижения TruckingTime для существующего слоя.

#Get the route layer object from a layer named "Route" in the map
doc = arcpy.mp.ArcGISProject('current')
map_obj = doc.listMaps()[0]
route_layer = map_obj.listLayers('Route')[0]

#Get the Trucking Time travel mode from the network dataset
desc = arcpy.Describe(route_layer)
travel_modes = arcpy.na.GetTravelModes(desc.network.catalogPath)
trucking_mode = travel_modes["Trucking Time"]

#Apply the travel mode to the analysis layer
solver_properties = arcpy.na.GetSolverProperties(route_layer)
solver_properties.applyTravelMode(trucking_mode)

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