applyTravelMode
汇总
用于访问位置分配网络分析图层中的分析属性。 GetSolverProperties 函数用于从位置分配网络分析图层中获取 LocationAllocationSolverProperties 对象。
讨论
LocationAllocationSolverProperties 对象提供对位置分配网络分析图层中所有分析属性的读取和写入权限。该对象可用于修改位置分配图层的所需分析属性,并可重新求解相应图层以确定合适结果。使用 创建位置分配分析图层 地理处理工具可创建新的位置分配图层。通过从新的位置分配图层获取 LocationAllocationSolverProperties 对象,可重新对现有图层进行后续分析,而无需每次分析都创建一个图层,以节省时间。
修改 LocationAllocationSolverProperties 对象的属性后,相应的图层可立即与其他函数和地理处理工具配合使用。无需刷新或更新图层,通过上述对象进行的修改便可生效。
语法
applyTravelMode()
属性
| 名称 | 说明 | 数据类型 |
|---|---|---|
|
accumulators (读取和写入) |
用于获取或设置累积为分析一部分的网络成本属性的列表。 空列表 |
String |
|
attributeParameters (读取和写入) |
用于获取或设置将在分析中使用的参数化属性。 该属性返回一个 Python 字典。 该字典关键字是由属性名称和参数名称这两个值组成的元组。 字典中每个项目的值均为参数值。 参数化的网络属性用于对属性值的某个动态方面进行建模。 例如,可使用某个参数对高度限制为 12 英尺的隧道进行建模。 在这种情况下,应将以英尺为单位的车辆高度指定为参数值。 如果车辆高度超过 12 英尺,此限制条件将评估为 尝试修改 请勿尝试修改
使用新的字典对象修改
如果网络分析图层没有参数化属性,则该属性将返回 |
Dictionary |
|
defaultCapacity (读取和写入) |
用于获取或设置当位置分配 设施点有 |
Double |
|
facilitiesToFind (读取和写入) |
用于获取或设置求解程序应定位的设施点数量。 如果 |
Integer |
|
ignoreInvalidLocations (读取和写入) |
指定是否忽略无效的输入位置。 通常,如果无法 在网络上定位 ,则位置无效。 当无效位置被忽略时,求解程序将跳过它们并尝试使用剩余位置执行分析。
|
String |
|
impedance (读取和写入) |
用于获取或设置用作阻抗的网络成本属性。 |
String |
|
impedanceCutoff (读取和写入) |
用于获取或设置请求点可分配给设施点时的最大阻抗。 |
Double |
|
impedanceParameter (读取和写入) |
用于获取或设置在 |
Double |
|
impedanceTransformation (读取和写入) |
用于获取或设置对设施点与请求点间网络成本进行变换的方程。 该属性值与
|
String |
|
outputPathShape (读取和写入) |
控制是否用直线表示位置分配分析的结果。 以下是可能值列表:
|
String |
|
problemType (读取和写入) |
用于获取或设置将求解的问题类型。 问题类型的选择取决于要定位的设施点种类。 不同种类的设施点具有不同的优先级和约束。 以下是可能值列表:
|
String |
|
restrictions (读取和写入) |
用于获取或设置适用于分析的约束属性的列表。 空列表 |
String |
|
solverName (只读) |
返回被用于获取求解程序属性对象的 Network Analyst 图层所引用的求解程序的名称。 从 |
String |
|
targetMarketShare (读取和写入) |
用于获取或设置当 |
Double |
|
timeOfDay (读取和写入) |
用于获取或设置离开的时间和日期。 可以从设施点或请求点离开,取决于是从请求点向设施点行驶还是从设施点向请求点行驶。 可以用值 可使用以下日期来指定一周中的每一天,而无需使用特定的日期:
例如,要指定应该在星期五 8:00 a.m. 离开,则将值指定为 datetime.datetime(1900, 1, 5, 8,0,0) 。
|
DateTime |
|
timeZoneUsage (读取和写入) |
指定
在求解跨多个时区的位置分配分析问题时,以下规则适用:
|
String |
|
travelDirection (读取和写入) |
控制计算网络成本时设施点与请求点之间的行驶方向。 以下是可能值列表:
|
String |
|
travelMode (只读) |
访问网络分析图层上设置为 |
Object |
|
useHierarchy (读取和写入) |
当执行分析时控制等级属性的使用。 以下是可能值列表:
|
String |
|
uTurns (读取和写入) |
用于获取或设置策略,该策略指示求解程序如何管理停靠点之间的遍历网络期间所产生的交汇点处的 U 形转弯。 以下是可能值列表:
|
String |
方法
applyTravelMode(travel_mode)
根据出行模式对象更新网络分析图层的分析属性。随后可对更新的网络分析图层进行求解以完成分析。
| 名称 | 说明 | 数据类型 |
|---|---|---|
|
travel_mode |
该变量引用一个源自网络数据集的出行模式对象。可通过调用 |
Object |
代码示例
该脚本显示如何使用位置分配分析为连锁零售店选择可以获得最大业务量的商店位置。该脚本首先使用相应的分析设置创建一个位置分配图层。接下来,将候选商店位置和区块组中心分别加载为设施点和需求点。对分析进行求解并保存至图层文件。使用 LocationAllocationSolverProperties 对象修改分析属性以执行两个后续分析。每次求解之后,图层均以文件格式储存。该脚本使用旧金山地区的数据。
旧版本:
GetNASublayer 函数用于调用网络分析图层的子图层。 该函数已在 ArcGIS Pro 2.7 中引入。 在以前的软件版本中,用于检索网络分析图层的子图层对象的最佳方法是使用网络分析 Layer 对象的 listLayers 方法,该方法将子图层名称用作通配符。
# Name: LocationAllocationSolverProperties_workflow_01.py
# Description: Test three different scenarios for optimizing the locations of
# new stores based on customer and competitor locations. Use the
# LocationAllocationSolverProperties object to update an existing
# Location-Allocation layer before re-running the analysis.
# Requirements: Network Analyst extension
# Import system modules
import arcpy
from arcpy import env
import os
try:
# 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 = "Location_Allocation"
scenario1_output = "NewStoreLocations"
scenario2_output = "StoreExpansionScenario"
scenario3_output = "MaximizedMarketShareStoreLocations"
facilities = os.path.join(input_gdb, "Analysis", "CandidateStores")
required_facility = os.path.join(input_gdb, "Analysis", "ExistingStore")
competitor_facility = os.path.join(input_gdb, "Analysis", "CompetitorStores")
demand_points = os.path.join(input_gdb, "Analysis", "TractCentroids")
# --- Scenario 1: Select the best three locations for stores
# 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, "Driving Time",
"TO_FACILITIES",
"MAXIMIZE_ATTENDANCE", cutoff=5,
number_of_facilities_to_find=3,
decay_function_type="LINEAR")
# 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)
# Store the layer names that we will use later
facilities_layer_name = sublayer_names["Facilities"]
demand_points_layer_name = sublayer_names["DemandPoints"]
# Get the facilities sublayer object to use later
facilities_sublayer = arcpy.na.GetNASublayer(layer_object, "Facilities")
# 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 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 facilities sublayer of the solved Location-Allocation layer as a
# feature class
arcpy.management.CopyFeatures(facilities_sublayer, scenario1_output)
# --- Scenario 2: Assuming the three stores selected previously have already
# been built, select the best locations for two more stores
# We need to re-solve the previous scenario as a store-expansion scenario, in
# which we will start with an existing store and optimally locate two
# additional stores.
# 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
field_mappings["Name"].mappedFieldName = "Name"
arcpy.na.AddLocations(layer_object, facilities_layer_name, required_facility,
field_mappings, "", append="APPEND")
# Solve the location-allocation layer
arcpy.na.Solve(layer_object)
# Save the facilities sublayer of the solved Location-Allocation layer as a
# feature class
arcpy.management.CopyFeatures(facilities_sublayer, scenario2_output)
# --- Scenario 3: Re-run the previous scenario with additional information:
# the locations of competing stores.
# Load the competitor store locations as the competitor facilities. Use the
# field mappings to set the facility type to Competitor. We need to append
# these competitor facilities to existing facilities.
field_mappings["FacilityType"].defaultValue = 2
arcpy.na.AddLocations(layer_object, facilities_layer_name,
competitor_facility, field_mappings, "",
append="APPEND")
# Get the LocationAllocationSolverProperties object from the
# Location-Allocation layer to modify the analysis settings for the layer.
solver_props = arcpy.na.GetSolverProperties(layer_object)
# Set the problem type to Maximize Market Share, and impedance transformation
# to Power with an impedance parameter value of 2.
solver_props.problemType = "MAXIMIZE_MARKET_SHARE"
solver_props.impedanceTransformation = "POWER"
solver_props.impedanceParameter = 2
# Solve the location-allocation layer
arcpy.na.Solve(layer_object)
# print the market share that was obtained
print(arcpy.GetMessage(0))
# Save the facilities sublayer of the solved Location-Allocation layer as a
# feature class
arcpy.management.CopyFeatures(facilities_sublayer, scenario3_output)
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 occured on line %i" % tb.tb_lineno)
print(str(e))
此脚本显示如何将 TruckingTime 出行模式应用到现有图层。
#Get the location-allocation layer object from a layer named
#"Location-Allocation" in the map
doc = arcpy.mp.ArcGISProject('current')
map_obj = doc.listMaps()[0]
la_layer = map_obj.listLayers('Location-Allocation')[0]
#Get the Trucking Time travel mode from the network dataset
desc = arcpy.Describe(la_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(la_layer)
solver_properties.applyTravelMode(trucking_mode)