ClosestFacilitySolverProperties

Краткая информация

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

Обсуждение

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

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

Свойства

СвойствоОписаниеТип данных
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
defaultCutoff
(чтение и запись)

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

Double
defaultTargetFacilityCount
(чтение и запись)

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

Integer
ignoreInvalidLocations
(чтение и запись)

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

  • SKIPНедопустимые входные местоположения будут проигнорированы, поэтому анализ будет успешным с использованием только действительных местоположений. Это значение также можно указать с помощью логического значения True.
  • HALTНедействительные местоположения не будут проигнорированы и приведут к сбою анализа. Это значение также можно указать с помощью логического значения False.
String
impedance
(чтение и запись)

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

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

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

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

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

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

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

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

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

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

Дает возможность получать или задавать время и дату начала или конца маршрута. Интерпретация этого значения зависит от того, какое значение имеет свойство timeOfDayUsageSTART_TIME или END_TIME. Значение 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

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

Параметр timeZoneUsage определяет, соответствует ли время и дата зоне UTC или часовому поясу, в котором находятся пункты обслуживания или инциденты.

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

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

  • END_TIMEМаршруты прибывают в пункты обслуживания или инциденты в момент времени, заданный свойством timeOfDay. Этот вариант удобен, если более важно время прибытия; т. е. если необходимо знать, в какое время следует покинуть точку отправления для того, чтобы прибыть в точку назначения в заданное время.
  • START_TIMEМаршруты отправляются из пунктов обслуживания или инцидентов в момент времени, заданный свойством timeOfDay. Этот вариант удобен для поиска оптимального маршрута с заданным временем отправления.
  • NOT_USEDМаршруты не используют ни начальное, ни конечное время и дату. Этот вариант следует использовать, когда свойство timeOfDay имеет значение None.
String
timeZoneUsage
(чтение и запись)

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

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

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

  • Все инциденты должны быть в одном и том же часовом поясе

    • при указании начального времени и перемещении от места инцидента к пункту обслуживания;
    • при указании конечного времени и перемещении от пункта обслуживания к месту инцидента.

  • Все пункты обслуживания должны быть в одном и том же часовом поясе

    • при указании начального времени и перемещении от пункта обслуживания к месту инцидента;
    • при указании конечного времени и перемещении от места инцидента к пункту обслуживания.

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

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

  • TRAVEL_FROMНаправление движения от пункта обслуживания к инциденту.
  • TRAVEL_TOНаправление движения от инцидента к пункту обслуживания.
String
travelMode
(только чтение)

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

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

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

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

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

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

Обзор метода

МетодОписание
applyTravelMode (travel_mode)

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

Методы

applyTravelMode (travel_mode)
ПараметрОписаниеТип данных
travel_mode

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

Object

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

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

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

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

Пример кода

ClosestFacilitySolverProperties пример 1 (автономный скрипт)

Скрипт показывает, как обновить свойства алгоритма Closest Facility через полный рабочий процесс. Основано на упражнениях по сетевым наборам данных для Сан-Франциско.

# Name: ClosestFacilitySolverProperties_Workflow.py
# Description: For some emergency planning a distribution center is seeing how
#              long it will take to get to the nearest hospital at different
#              times of the day.
# Requirements: Network Analyst Extension

# Import system modules
import arcpy
from arcpy import env
import os
import datetime

try:
    # Check out the 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 = "ClosestHospital"
    travel_mode = "Driving Time"
    direction = "TO_FACILITIES"
    cutoffs = 4
    in_facilities = os.path.join(input_gdb, "Analysis/Hospitals")
    in_incident = os.path.join(input_gdb, "Analysis/DistributionCenter")
    nine_in_the_morning = os.path.join(output_dir, "Output.gdb", "nine_in_the_morning")
    mid_day = os.path.join(output_dir, "Output.gdb", "mid_day")


    # Create a new Closest Facilities layer. The warehouse is concerned with an
    # accident during their workday and wants to know how long it will take to
    # get to the closest hospital.
    result_object = arcpy.na.MakeClosestFacilityAnalysisLayer(network,
                                        layer_name, travel_mode,
                                        direction,
                                        number_of_facilities_to_find = 1,
                                        time_of_day = "1/4/1900 09:00 am")

    # Get the layer object form the result object. The closest facility layer
    # can now be referenced using the layer object.
    layer_object = result_object.getOutput(0)

    # Get the names of all the sublayers within the closest facility layer.
    sub_layer_names = arcpy.na.GetNAClassNames(layer_object)
    # Store the layer names that we will use later
    facilities_layer_name = sub_layer_names["Facilities"]
    incidents_layer_name = sub_layer_names["Incidents"]
    routes_layer_name = sub_layer_names["CFRoutes"]

    # Load the hospital locations as facilities.
    arcpy.na.AddLocations(layer_object, facilities_layer_name, in_facilities,
                          "", "")

    # Load the distribution center location as incidents
    arcpy.na.AddLocations(layer_object, incidents_layer_name, in_incident,
                          "", "")

    # Solve the closest facilities layer
    arcpy.na.Solve(layer_object)

    # Save the resulting route sublayer
    arcpy.management.CopyFeatures(routes_layer_name, nine_in_the_morning)

    # Get the solver properties object from the closest facility layer
    solverProps = arcpy.na.GetSolverProperties(layer_object)

    # Update the breaks to 1, 4, and 10 minutes
    solverProps.timeOfDay = "1/4/1900 12:00 pm"

    # Solve the closest facility layer
    arcpy.na.Solve(layer_object)

    # Save the resulting route sublayer
    arcpy.management.CopyFeatures(routes_layer_name, mid_day)


except Exception as e:
    # If an error occurred, print line number and error message
    import traceback
    import sys
    tb = sys.exc_info()[2]
    print ("An error occurred on line %i" % tb.tb_lineno)
    print (str(e))
ApplyTravelMode, пример 2 (окно Python)

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

#Get the closest facility layer object from a layer named "Closest Facility" in
#the map
doc = arcpy.mp.ArcGISProject('current')
map_obj = doc.listMaps()[0]
cf_layer = map_obj.listLayers('Closest Facility')[0]

#Get the Trucking Time travel mode from the network dataset
desc = arcpy.Describe(cf_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(cf_layer)
solver_properties.applyTravelMode(trucking_mode)