Создать слой анализа Размещения-Распределения (Network Analyst)

Сводка

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

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

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

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

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

Синтаксис

MakeLocationAllocationAnalysisLayer(network_data_source, {layer_name}, {travel_mode}, {travel_direction}, {problem_type}, {cutoff}, {number_of_facilities_to_find}, {decay_function_type}, {decay_function_parameter_value}, {target_market_share}, {capacity}, {time_of_day}, {time_zone}, {line_shape}, {accumulate_attributes})
ParameterОбъяснениеТип данных
network_data_source

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

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

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

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

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

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

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

Задает направление движения между пунктами обслуживания и точками спроса при расчете новой сетевой стоимости.

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

Этот параметр может влиять на размещение точек проса относительно пунктов обслуживания в сети с односторонними ограничениями и различными импедансами на основе направления движения. Например, пункт обслуживания может располагаться в 15 минутах езды по направлению от точки спроса к пункту, но в 10 минутах езды при движении от пункта обслуживания к точке спроса.

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

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

  • MINIMIZE_IMPEDANCEЭтот параметр решает задачу размещения склада. Он выбирает набор пунктов обслуживания таким образом, чтобы сумма взвешенного импеданса (спрос в точке расположения, умноженный на импеданс пути до ближайшего пункта обслуживания) была минимальной. Эта задача часто называется задачей P-медианы. Этот тип задачи используется по умолчанию.
  • MAXIMIZE_COVERAGEЭтот параметр решает задачу размещения пожарной части. Он выбирает пункты обслуживания таким образом, чтобы все или большинство точек спроса находились в пределах заданного импеданса.
  • MAXIMIZE_CAPACITATED_COVERAGEЭтот параметр решает задачу размещения для пунктов обслуживания с конечной емкостью. Он выбирает пункты обслуживания таким образом, чтобы все или большинство точек спроса могли обслуживаться без превышения емкости любого из пунктов обслуживания. Помимо учета емкости, он выбирает пункты обслуживания таким образом, чтобы итоговая сумма взвешенных импедансов (спрос, распределенный к пункту обслуживания, умноженный на импеданс до или от пункта обслуживания) была минимальной.
  • MINIMIZE_FACILITIESЭтот параметр решает задачу размещения пожарной части. Он выбирает минимальное количество пунктов обслуживания, необходимое для покрытия всех или большинства точек спроса в пределах заданного импеданса.
  • MAXIMIZE_ATTENDANCEЭтот параметр позволяет решать задачу размещения магазинов, где доля спроса, размещенная на ближайшем пункте обслуживания, сокращается с удалением от пункта обслуживания. Выбирается набор пунктов обслуживания, удовлетворяющий максимальный распределенный спрос. Спрос за пределами заданного порога импеданса не влияет на выбранный набор пунктов обслуживания.
  • MAXIMIZE_MARKET_SHAREЭтот параметр решает задачу размещения конкурирующих пунктов обслуживания. При решении задачи пункты обслуживания выбираются таким образом, чтобы обеспечивалась наибольшая доля рынка в зоне присутствия конкурентов. Для определения доли спроса для каждого пункта обслуживания используется модель притягательности. Выбирается набор пунктов обслуживания, удовлетворяющих максимальный распределенный спрос.
  • TARGET_MARKET_SHAREЭтот параметр решает задачу размещения конкурирующих пунктов обслуживания. При решении задачи пункты обслуживания выбираются таким образом, чтобы обеспечить заданную целевую долю рынка в зоне присутствия конкурентов. Для определения доли спроса для каждого пункта обслуживания используется модель притягательности. При решении задачи выбирается минимальное количество пунктов обслуживания, обеспечивающих заданную целевую долю рынка.
String
cutoff
(Дополнительный)

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

Отсечение может быть изменено на основе точки по-запросу путем задания отдельных значений отсечения в подслое точек запроса в свойстве Cutoff_[Impedance]. Например, может оказаться, что люди в сельской местности готовы преодолевать расстояние в 10 миль, чтобы попасть к пункту обслуживания, а городские жители согласны преодолевать не более 2 миль. Такое поведение можно моделировать, задав значение Отсечения для слоя анализа, равное 10 и значение Cutoff_Miles каждой точки запроса внутри городских территорий, равное 2.

По умолчанию для анализа предельное значение не используется.

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

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

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

Все пункты обслуживания со значением FacilityType в поле Выбрано, заданным до решения, во время решения рассматриваются как кандидаты.

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

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

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

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

  • LINEARПреобразованный сетевой импеданс между пунктом обслуживания и точкой спроса – то же самое, что и импеданс кратчайшего сетевого пути между ними. При этом параметре значение импеданса всегда равно 1. Используется по умолчанию.
  • POWERПреобразованный сетевой импеданс между пунктом обслуживания и точкой спроса равен импедансу кратчайшего сетевого пути, возведенному в степень, указанную параметром импеданса. Используйте эту опцию с положительными значениями параметра импеданса для присвоения большего веса для ближайших пунктов обслуживания.
  • EXPONENTIALПреобразованный сетевой импеданс между пунктом обслуживания и точкой спроса равен математической константе e, возведенной в степень, указанную импедансом кратчайшего сетевого пути, умноженному на параметр импеданса. Используйте эту опцию с положительными значениями параметра импеданса для присвоения очень большого веса для ближайших пунктов обслуживания.Экспоненциальные преобразования обычно используются вместе с предельными значениями импеданса.

У точек запроса есть свойство ImpedanceTransformation, которое, если оно задано, перезаписывает свойство Значение параметра функции затухания слоя анализа на основе точек по-запросу. Вы можете увидеть, что функция затухания будет различной для городских и сельских жителей. Такое поведение можно моделировать, устанавливая преобразование импеданса для слоя анализа, соответствующее преобразованию для сельских жителей, а преобразование импеданса для точек спроса в городах – соответствующее преобразованию для городских жителей.

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

Предоставляет уравнению преобразования значение для параметра decay_function_type. Если используется LINEAR функция затухания, то значение параметра игнорируется. Для POWER и EXPONENTIAL функций затухания значение не должно быть равно нулю.

У точек спроса есть свойство ImpedanceTransformation, которое, если ему присвоено значение, переопределяет свойство decay_function_parameter_value слоя анализа на основе точки по запросу. Вы можете увидеть, что функция затухания будет различной для городских и сельских жителей. Такое поведение можно моделировать, устанавливая преобразование импеданса для слоя анализа, соответствующее преобразованию для сельских жителей, а преобразование импеданса для точек спроса в городах – соответствующее преобразованию для городских жителей.

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

Задает целевую долю рынка в процентах для ее достижения при значении параметра problem_type, равном TARGET_MARKET_SHARE. Это процент от общего веса спроса, который должны удовлетворить пункты обслуживания решения. Механизм решения выбирает количество пунктов обслуживания, необходимое для обеспечения доли на целевом рынке, заданной этим числовым значением.

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

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

У пунктов обслуживания есть свойство Емкость, и если для конкретного пункта обслуживания это свойство имеет какое-то значение, то оно используется для этого пункта обслуживания вместо параметра capacity этого пункта обслуживания.

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

Задает время и дату отправления. Время отправления может отсчитываться от пункта обслуживания или от точки спроса – в зависимости от заданного Направления движения (от точки спроса к пункту обслуживания или наоборот).

Если выбран атрибут импеданса на основе трафика, то решение будет создано с учетом заданных динамических условий трафика в указанное время дня. Дату и время можно указать в виде 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
(Дополнительный)

Часовой пояс параметра Время суток.

  • LOCAL_TIME_AT_LOCATIONSЗначение параметра Время суток относится к часовому поясу, в котором находятся пункты обслуживания или точки спроса. Если Направление движения установлено как от пунктов обслуживания к точкам спроса, то это будет часовой пояс пунктов обслуживания. Если Направление движения установлено как от точек спроса к пунктам обслуживания, то это будет часовой пояс точек спроса. Используется по умолчанию.
  • UTCЗначения параметра Время суток указываются во Всемирном координированном времени (UTC). Используйте эту опцию, если хотите выбрать наилучшее местоположение для конкретного времени, например текущего, но не знаете, в каком часовом поясе будут находиться пункты обслуживания или точки спроса.
String
line_shape
(Дополнительный)
  • NO_LINESВ ходе анализа доля в качестве выходных данных не создается никакая форма. Это поможет вам в случае, если вы решаете большую задачу, и при этом вам требуется только таблица решения и не нужна визуализация результатов на карте.
  • STRAIGHT_LINESВ качестве выходных данных будут использованы прямые линии, соединяющие пункты обслуживания решения с размещенными для них точками спроса. Используется по умолчанию.

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

String
accumulate_attributes
[accumulate_attributes,...]
(Дополнительный)

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

Для каждого из накопленных атрибутов стоимости в выходных объектах сетевого анализа добавляется параметр Total_[Impedance].

Этот параметр недоступен, если источником сетевых данных является сервис ArcGIS Online или сервис в версии Portal for ArcGIS, не поддерживающей накопление.

String

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

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

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

Слой Network Analyst

Пример кода

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

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

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

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

network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeLocationAllocationAnalysisLayer(network, "NewStores",
                                    "Driving Time", "TO_FACILITIES",
                                    "MAXIMIZE_ATTENDANCE", 3, 5, "POWER", 2, "",
                                    "", "1/1/1900 9:00 AM", "UTC",
                                    "STRAIGHT_LINES", ["TravelTime", "Meters"])
MakeLocationAllocationAnalysisLayer, пример 3 (рабочий процесс)

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

# Name: MakeLocationAllocationAnalysisLayer_Workflow.py
# Description: Choose the store locations that would generate the most business
#              for a retail chain. For this scenario, we will perform the
#              location-Allocation analysis using the maximize attendance
#              problem type.
# 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")
    layer_name = "NewStoreLocations"
    travel_mode = "Driving Time"
    facilities = os.path.join(input_gdb, "Analysis", "CandidateStores")
    required_facility = os.path.join(input_gdb, "Analysis", "ExistingStore")
    demand_points = os.path.join(input_gdb, "Analysis", "TractCentroids")
    output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")

    #Create a new location-allocation layer. In this case, the demand travels to
    #the facility. We wish to find 3 potential store locations out of all the
    #candidate store locations using the maximize attendance model.
    result_object = arcpy.na.MakeLocationAllocationAnalysisLayer(network,
                                    layer_name, travel_mode, "TO_FACILITIES",
                                    "MAXIMIZE_ATTENDANCE", cutoff=20,
                                    number_of_facilities_to_find=3)

    #Get the layer object from the result object. The location-allocation layer
    #can now be referenced using the layer object.
    layer_object = result_object.getOutput(0)

    #Get the names of all the sublayers within the location-allocation layer.
    sublayer_names = arcpy.na.GetNAClassNames(layer_object)
    #Stores the layer names that we will use later
    facilities_layer_name = sublayer_names["Facilities"]
    demand_points_layer_name = sublayer_names["DemandPoints"]

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

    #Load the existing store location as the required facility. Use the field
    #mappings to set the facility type to requried. We need to append this
    #required facility to existing facilities.
    field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
                                                    facilities_layer_name)
    field_mappings["FacilityType"].defaultValue = 1
    arcpy.na.AddLocations(layer_object, facilities_layer_name,
                            required_facility, field_mappings, "",
                            append="APPEND")

    #Load the tract centroids as demand points using default search tolerance
    #Use the field mappings to map the Weight property from POP2000 field.
    demand_field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
                                                    demand_points_layer_name)
    demand_field_mappings["Weight"].mappedFieldName = "POP2000"
    arcpy.na.AddLocations(layer_object, demand_points_layer_name, demand_points,
                          demand_field_mappings, "")

    #Solve the location-allocation layer
    arcpy.na.Solve(layer_object)

    #Save the solved location-allocation 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: Да