Сводка
Создает слой сетевого анализа Размещение-Распределение и задает его свойства анализа. Слой анализа Размещение-Распределение необходим при выборе определенного количества пунктов обслуживания из набора потенциальных местоположений, например, для оптимального и эффективного распределения спроса между пунктами обслуживания. Слой можно создать с помощью локального набора сетевых данных или размещенного в сети сервиса либо на портале.
Использование
После создания слоя анализа при помощи данного инструмента, вы можете добавлять в него объекты сетевого анализа при помощи инструмента Добавить положения, выполнять анализ при помощи инструмента Расчет и сохранять результаты на диске при помощи инструмента Сохранить в файл слоя.
При использовании данного инструмента в моделях геообработки, если модель запускается как инструмент, то выходной слой сетевого анализа должен быть задан в качестве параметра модели, в противном случае слой не добавится в содержание карты.
В 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 (Дополнительный) | Задает направление движения между пунктами обслуживания и точками спроса при расчете новой сетевой стоимости.
Этот параметр может влиять на размещение точек проса относительно пунктов обслуживания в сети с односторонними ограничениями и различными импедансами на основе направления движения. Например, пункт обслуживания может располагаться в 15 минутах езды по направлению от точки спроса к пункту, но в 10 минутах езды при движении от пункта обслуживания к точке спроса. | String |
problem_type (Дополнительный) | Тип решаемой задачи. Выбор типа задачи зависит от вида размещаемого пункта обслуживания. Различные типы пунктов обслуживания имеют различные приоритеты и ограничения.
| 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 (Дополнительный) | Этот параметр задает уравнение для преобразования сетевой стоимости между пунктами обслуживания и точками спроса. Это свойство вместе со свойством Значение параметра функции затухания задает, насколько сильно сетевой импеданс между пунктами обслуживания и точками спроса влияет на выбор пунктов обслуживания механизмом расчета.
У точек запроса есть свойство 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. Вместо конкретной даты может быть задан день недели, при помощи следующих условных дат:
| Date |
time_zone (Дополнительный) | Часовой пояс параметра Время суток.
| String |
line_shape (Дополнительный) |
Независимо от выбранного типа выходной формы, наилучший маршрут всегда определяется по сетевому импедансу и никогда – по евклидову расстоянию. Это значит, что различаются только формы маршрута, а не соответствующее им прохождение сети. | String |
accumulate_attributes [accumulate_attributes,...] (Дополнительный) | Список атрибутов стоимости, который будет суммироваться во время анализа. Эти накопившиеся атрибуты могут использоваться только для сведения; алгоритм решения при выполнении анализа использует только атрибут стоимости в соответствии с используемым режимом передвижения. Для каждого из накопленных атрибутов стоимости в выходных объектах сетевого анализа добавляется параметр Total_[Impedance]. Этот параметр недоступен, если источником сетевых данных является сервис ArcGIS Online или сервис в версии Portal for ArcGIS, не поддерживающей накопление. | String |
Производные выходные данные
Name | Объяснение | Тип данных |
out_network_analysis_layer | Только что созданный слой сетевого анализа. | Слой Network Analyst |
Пример кода
Запуск инструмента с использованием только необходимых параметров.
network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeLocationAllocationAnalysisLayer(network, "StoreLocations")
Выполните инструмент с использованием всех параметров.
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"])
В следующем автономном скрипте 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))
Environments
Информация о лицензиях
- Basic: Да
- Standard: Да
- Advanced: Да