Создать слой анализа ближайшего пункта обслуживания (Network Analyst)

Сводка

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

Использование

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

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

  • В ArcGIS Pro данные слоев сетевого анализа хранятся на диске в классах пространственных объектов файловой базы геоданных. При создании слоя сетевого анализа в проекте данные слоя будут созданы в новом наборе классов объектов в среде Текущей рабочей области. При создании слоя сетевого анализа в скрипте Python вам необходимо сначала явно задать среду рабочей области для файловой базы геоданных, в которой вы собираетесь хранить данные слоя, используя arcpy.env.workspace = "<path to file gdb>". После создания слоя в файловую базу геоданных будет добавлен новый набор классов объектов, содержащий соответствующие подслои для классов пространственных объектов.

Синтаксис

MakeClosestFacilityAnalysisLayer(network_data_source, {layer_name}, {travel_mode}, {travel_direction}, {cutoff}, {number_of_facilities_to_find}, {time_of_day}, {time_zone}, {time_of_day_usage}, {line_shape}, {accumulate_attributes}, {generate_directions_on_solve})
ParameterОбъяснениеТип данных
network_data_source

Набор сетевых данных или сервис, для которого выполняется сетевой анализ. Для сервиса используйте URL-адрес портала.

Network Dataset Layer;String
layer_name
(Дополнительный)

Имя создаваемого слоя сетевого анализа.

String
travel_mode
(Дополнительный)

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

Объект arcpy.na.TravelMode и строка, содержащая действительное представление JSON режима перемещения, также могут использоваться как ввод для параметра.

String
travel_direction
(Дополнительный)

Указывает направление движения между пунктами обслуживания и инцидентами.

  • TO_FACILITIESНаправление движения от инцидента к пункту обслуживания. Обычно этот параметр используют магазины розничной торговли, т.к. их интересует, насколько быстро покупатели (инциденты) смогут доехать до магазина (пункт обслуживания). Используется по умолчанию.
  • FROM_FACILITIESНаправление движения от пункта обслуживания к инциденту. Пожарные части, как правило, используют эту настройку, поскольку их интересует, как быстро они смогут доехать от пожарной части к месту вызова.

Направление движения может повлиять на пункты обслуживания, найденные в случае, если сеть содержит односторонние улицы или импедансы, основанные на направлении движения. Например, езда от места вызова до конкретного пункта обслуживания может занимать 10 минут, но проезд в обратном направлении – от пункта обслуживания до места вызова – займет 15 минут из-за наличия односторонних улиц или уровня трафика.

String
cutoff
(Дополнительный)

Импеданс, при котором механизм расчета прекратит поиск пунктов обслуживания для данного инцидента в единицах атрибута импеданса, используемых выбранным вами travel_mode. Это предельное значение может быть перезаписано на основе каждого инцидента путем задания отдельных предельных значений в подслое инцидентов, при значении travel_direction='TO_FACILITIES' либо на основе каждого пункта обслуживания путем задания отдельных предельных значений в подслое пунктов, при значении travel_direction='FROM_FACILITIES'По умолчанию, для анализа предельное значение не используется.

Double
number_of_facilities_to_find
(Дополнительный)

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

Long
time_of_day
(Дополнительный)

Указывает время и дату начала или окончания маршрутов. Значение обозначает время начала или время окончания маршрута в зависимости от значения параметра time_of_day_usage.

Если выбран атрибут импеданса на основе трафика, то решение будет создано с учетом заданных динамических условий трафика в указанное время дня. Дату и время можно указать в виде 5/14/2012 10:30 AM.

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

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

Date
time_zone
(Дополнительный)

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

  • LOCAL_TIME_AT_LOCATIONSПараметр time_of_day обращается к часовому поясу, в котором расположены пункты обслуживания или инциденты. Используется по умолчанию.
    • Если time_of_day_usage задан как START_TIME, а travel_direction – как FROM_FACILITIES, то это будет часовой пояс пунктов обслуживания.
    • Еслиtime_of_day_usage задан как START_TIME, а travel_direction – как TO_FACILITIES, то это будет часовой пояс инцидентов.
    • Еслиtime_of_day_usage задан как END_TIME, а travel_direction – как FROM_FACILITIES, то это будет часовой пояс инцидентов.
    • Если time_of_day_usage задан как END_TIME, а travel_direction – как TO_FACILITIES, то это будет часовой пояс пунктов обслуживания.
  • UTCЗначения параметра time_of_day определяются в формате Всемирного координированного времени (UTC). Используйте эту опцию, если хотите найти ближайшие пункты обслуживания для конкретного момента времени, например, текущего, но не знаете, в каком часовом поясе будут находиться пункты обслуживания или инциденты.
String
time_of_day_usage
(Дополнительный)

Определяет, на что указывает параметр time_of_day – на прибытие или на отправление.

  • START_TIMEtime_of_day интерпретируется как время отправления из пункта обслуживания или с места инцидента. Используется по умолчанию.Если выбрана эта опция, то параметр time_of_day указывает на то, что метод расчета должен выбрать лучший маршрут с учетом времени отправления.
  • END_TIMEtime_of_day интерпретируется как время прибытия в пункт обслуживания или на место инцидента. Этот параметр можно использовать для того, чтобы узнать, в какое время необходимо выехать, чтобы прибыть в пункт назначения в момент времени, заданный параметром time_of_day.
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
(Дополнительный)

Определяет, будут ли создаваться путевые листы в процессе анализа.

  • DIRECTIONS При решении будут создаваться пошаговые путевые листы.
  • NO_DIRECTIONSПри решении пошаговые путевые листы создаваться не будут. Используется по умолчанию.

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

Boolean

Производные выходные данные

NameОбъяснениеТип данных
out_network_analysis_layer

Только что созданный слой сетевого анализа.

Слой Network Analyst

Пример кода

MakeClosestFacilityAnalysisLayer, пример 1 (окно Python)

Запуск инструмента с использованием только необходимых параметров.

network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeClosestFacilityAnalysisLayer(network, "ClosestFireStations")
MakeClosestFacilityAnalysisLayer, пример 2 (окно Python)

Выполните инструмент с использованием всех параметров.

network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeClosestFacilityAnalysisLayer(network, "ClosestHospitals",
                                "Driving Time", "TO_FACILITIES", 5, 3,
                                "1/1/1900 9:00 AM", "UTC", "START_TIME",
                                "ALONG_NETWORK", ["Meters", "TravelTime"])
MakeClosestFacilityAnalysisLayer, пример 3 (автономный скрипт)

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

# Name: MakeClosestFacilityAnalysisLayer_Workflow.py
# Description: Find the closest warehouse from the store locations and save the
#              results to a layer file on disk.
# 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/Paris.gdb"
    network = os.path.join(input_gdb, "Transportation", "ParisMultimodal_ND")
    layer_name = "ClosestWarehouse"
    travel_mode = "Driving Time"
    facilities = os.path.join(input_gdb, "Analysis", "Warehouses")
    incidents = os.path.join(input_gdb, "Analysis", "Stores")
    output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")

    #Create a new closest facility analysis layer. 
    result_object = arcpy.na.MakeClosestFacilityAnalysisLayer(network,
                                    layer_name, travel_mode, "TO_FACILITIES",
                                    number_of_facilities_to_find=1)

    #Get the layer object from 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.
    sublayer_names = arcpy.na.GetNAClassNames(layer_object)
    #Stores the layer names that we will use later
    facilities_layer_name = sublayer_names["Facilities"]
    incidents_layer_name = sublayer_names["Incidents"]

    #Load the warehouses as Facilities using the default field mappings and
    #search tolerance
    arcpy.na.AddLocations(layer_object, facilities_layer_name,
                            facilities, "", "")

    #Load the stores as Incidents. Map the Name property from the NOM field
    #using field mappings
    field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
                                                    incidents_layer_name)
    field_mappings["Name"].mappedFieldName = "NOM"
    arcpy.na.AddLocations(layer_object, incidents_layer_name, incidents,
                          field_mappings, "")

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

    #Save the solved closest facility 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))

Информация о лицензиях

  • Basic: Да
  • Standard: Да
  • Advanced: Да