描述
创建位置分配网络分析图层并设置其分析属性。位置分配分析图层对于从一组可能位置中选择指定数量的设施点(以便以最佳且高效的方式将需求点分配给设施点)十分有用。该图层可通过本地网络数据集进行创建,也可通过在线托管服务或门户托管服务进行创建。
使用方法
通过此工具创建分析图层后,您可以使用添加位置工具向图层中添加网络分析对象;使用求解工具来求解分析;以及使用保存至图层文件工具将结果保存到磁盘中。
在地理处理模型中使用此工具时,如果模型作为工具来运行,则必须将输出网络分析图层创建为模型参数;否则,输出图层将无法添加到地图内容中。
在 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})
参数 | 说明 | 数据类型 |
network_data_source | 将对其执行网络分析的网络数据集或服务。将门户 URL 用于服务。 | Network Dataset Layer;String |
layer_name (可选) | 要创建的网络分析图层的名称。 | String |
travel_mode (可选) | 分析中使用的出行模式名称。出行模式为一组网络设置(例如行驶限制和 U 形转弯),用于确定行人、车辆、卡车或其他交通媒介在网络中的移动方式。出行模式在网络数据源中进行定义。 arcpy.na.TravelMode 对象和包含出行模式有效 JSON 表示的字符串也可用作参数的输入。 | String |
travel_direction (可选) | 指定计算网络成本时设施点与请求点之间的行驶方向。
使用此选项会影响具有单向限制和根据方向不同阻抗不同的网络上的请求点到设施点的分配。例如,从请求点驾车到达设施点可能需要 15 分钟,但从设施点驾车行驶至请求点仅需 10 分钟。 | String |
problem_type (可选) | 将要求解的问题的类型。问题类型的选择取决于要定位的设施点种类。不同种类的设施点具有不同的优先级和约束。
| String |
cutoff (可选) | 请求点可分配给设施点的最大阻抗的单位是您所选出行模式所使用的阻抗属性的单位。最大阻抗以沿网络的最小成本路径进行测量。如果请求点位于中断外,则不会被分配。此属性可用于对人们为前往商店而愿意行进的最大距离,以及消防站到达社区中任一请求点所允许的最大时间进行建模。 可通过在 Cutoff_[阻抗] 属性中指定请求点子图层中的单个中断值来逐个请求点覆盖中断。例如,您可能会发现,乡村居民愿意走 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 |
派生输出
名称 | 说明 | 数据类型 |
out_network_analysis_layer | 新创建的网络分析图层。 | 网络分析图层 |
代码示例
仅使用必需参数执行此工具。
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))
环境
许可信息
- Basic: 是
- Standard: 是
- Advanced: 是