描述
用于访问起始 - 目的地 (OD) 成本矩阵网络分析图层中的分析属性。GetSolverProperties 函数用于从 OD 成本矩阵网络分析图层中获取 ODCostMatrixSolverProperties 对象。
讨论
ODCostMatrixSolverProperties 对象提供对 OD 成本矩阵网络分析图层中所有分析属性的读取和写入权限。该对象可用于修改 OD 成本矩阵图层的分析属性,并重新求解相应图层以确定合适结果。可使用创建 OD 成本矩阵分析图层地理处理工具创建新的 OD 成本矩阵图层。通过从新的 OD 成本矩阵图层获取 ODCostMatrixSolverProperties 对象,可重新对现有图层进行后续分析,而无需每次分析都创建一个图层,以节省时间。
修改 ODCostMatrixSolverProperties 对象的属性后,相应的图层可立即与其他函数和地理处理工具配合使用。无需刷新或更新图层,通过上述对象进行的修改便可生效。
属性
属性 | 说明 | 数据类型 |
accumulators (可读写) | 用于获取或设置累积为分析一部分的网络成本属性的列表。空列表 [] 表示没有累积成本属性。 | String |
attributeParameters (可读写) | 用于获取或设置将在分析中使用的参数化属性。该属性返回一个 Python 字典。该字典关键字是由属性名称和参数名称这两个值组成的元组。字典中每个项目的值均为参数值。 参数化的网络属性用于对属性值的某个动态方面进行建模。例如,可使用某个参数对高度限制为 12 英尺的隧道进行建模。在这种情况下,应将以英尺为单位的车辆高度指定为参数值。如果车辆高度超过 12 英尺,此限制条件将评估为 True,从而限制车辆穿越隧道。类似的,桥梁还可以具有一个用来指定重量限制的参数。 尝试修改 attributeParameters 属性不会导致值更新。相反,您应始终使用新的字典对象来设置属性值。以下两个代码块将演示这两种方法的差异。 请勿尝试修改 attributeParameters 属性,这种编码方法不起作用。 使用新的字典对象修改 attributeParameters 属性。 | Dictionary |
defaultCutoff (可读写) | 用于获取或设置停止搜索给定原点的目的地时对应的默认阻抗值。值 None 用于指定不应使用中断。 | Double |
defaultTargetDestinationCount (可读写) | 用于获取或设置要为每个起点查找的目的地数。值 None 用于指定应该找到所有目的地。 | Integer |
impedance (可读写) | 用于获取或设置用作阻抗的网络成本属性。当确定起始点和目的地之间的路径时,该成本属性最小化。 | String |
outputPathShape (可读写) | 控制是否在输出 OD 成本矩阵中的每个起始点-目的地对之间都生成一条直线。以下是可能值列表:
| String |
restrictions (可读写) | 用于获取或设置适用于分析的约束属性的列表。空列表 [] 表示没有约束属性用于分析。 | String |
solverName (只读) | 返回被用于获取求解程序属性对象的网络分析图层所引用的求解程序的名称。从 ODCostMatrixSolverProperties 对象访问时,该属性始终返回字符串值 OD Cost Matrix Solver。 | String |
timeOfDay (可读写) | 用于获取或设置从起点离开的日期和时间。可以用值 None 指定不应使用任何日期和时间。 可使用以下日期来指定一周中的每一天,而无需使用特定的日期:
例如,要指定每个起始点的路径应该在星期三 8:00 a.m. 开始,则将值指定为 datetime.datetime(1900, 1, 3, 8,0,0)。 timeZoneUsage 参数指定该日期和时间是 UTC 还是订单所在时区。 | DateTime |
timeZoneUsage (可读写) | 指定 timeOfDay 参数的时区。
在对跨多个时区的 OD 成本矩阵分析进行求解时,如起始时间已设置,则所有原点都必须位于同一时区内。 | String |
travelMode (只读) | 访问网络分析图层上设置为 arcpy.na.TravelMode 对象的出行模式。 | Object |
useHierarchy (可读写) | 当执行分析时控制等级属性的使用。以下是可能值列表:
| String |
uTurns (可读写) | 用于获取或设置策略,该策略指示交汇点处的 U 形转弯在求解程序处理停靠点之间的遍历期间可如何出现。以下是可能值列表:
| String |
方法概述
方法 | 说明 |
applyTravelMode (travel_mode) | 根据出行模式对象更新网络分析图层的分析属性。随后可对更新的网络分析图层进行求解以完成分析。 |
方法
applyTravelMode (travel_mode)
参数 | 说明 | 数据类型 |
travel_mode | 该变量引用一个源自网络数据集的出行模式对象。可通过调用 arcpy.na.GetTravelModes 函数获得出行模式对象的列表。 | Object |
创建网络分析图层后,将为其分配所有分析属性的默认值。可使用从网络分析图层获得的求解程序属性对象更新各个分析属性。出行模式存储了一组预定义的分析设置,用于帮助执行特定分析,例如,步行时间出行模式存储了执行基于时间的步行分析所需的分析设置。
使用 applyTravelMode 方法,可一次性应用在一个出行模式中定义的所有分析设置。在分析属性完成更新后,可对网络分析图层进行求解以完成分析。
如果在更新求解程序属性时出错,例如,当提供的出行模式所引用的属性在当前网络数据集中不存在,或不再适用于创建求解程序属性对象的相应网络分析图层所使用的网络数据集时,不会产生任何异常。此方法将成功执行,但当您尝试求解此类网络分析图层时会出现错误。
如果 travel_mode 参数不引用出行模式对象或字符串,则将产生 TypeError 异常。如果 travel_mode 参数引用字符串并且该字符串无法在内部转换成出行模式对象的有效字符串表示,将产生 ValueError 异常。
代码示例
该脚本显示如何通过完整的工作流来更新 OD 成本矩阵求解程序属性。其基于旧金山地区的教程网络数据集。
# Name: ODSolverProperties_Workflow.py
# Description: Finds the full matrix of destribution centers and stores and then
# a second solve that only finds the closest destribution center
# Requirements: Network Analyst Extension
# Import system modules
import arcpy
from arcpy import env
import os
import datetime
try:
# Check out the 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 = "StoresToDCs"
travel_mode = "Driving Time"
in_origins = os.path.join(input_gdb, "Analysis/Stores")
in_destinations = os.path.join(input_gdb, "Analysis/CentralDepots")
full_matrix = os.path.join(output_dir, "Output.gdb", "full_matrix")
closest_DC = os.path.join(output_dir, "Output.gdb", "closest_DC")
# Create a new Origin Destination layer.
result_object = arcpy.na.MakeODCostMatrixAnalysisLayer(network,
layer_name, travel_mode)
# Get the layer object form the result object. The origin destination layer
# can now be referenced using the layer object.
layer_object = result_object.getOutput(0)
# Get the names of all the sublayers within the Origin Destination layer.
sub_layer_names = arcpy.na.GetNAClassNames(layer_object)
# Store the layer names that we will use later
origins_layer_name = sub_layer_names["Origins"]
destination_layer_name = sub_layer_names["Destinations"]
lines_layer_name = sub_layer_names["ODLines"]
# Load the stores locations as origins.
arcpy.na.AddLocations(layer_object, origins_layer_name, in_origins,
"", "")
# Load the distribution center location as destinations
arcpy.na.AddLocations(layer_object, destination_layer_name, in_destinations,
"", "")
# Solve the origin destination layer
arcpy.na.Solve(layer_object)
# Save the resulting line sublayer
arcpy.management.CopyFeatures(lines_layer_name, full_matrix)
# Get the solver properties object from the origin destination layer
solverProps = arcpy.na.GetSolverProperties(layer_object)
# Update the destination count to 1
solverProps.defaultTargetDestinationCount = 1
# Solve the origin destination layer
arcpy.na.Solve(layer_object)
# Save the resulting line sublayer
arcpy.management.CopyFeatures(lines_layer_name, closest_DC)
except Exception as e:
# If an error occurred, print line number and error message
import traceback
import sys
tb = sys.exc_info()[2]
print ("An error occurred on line %i" % tb.tb_lineno)
print (str(e))
此脚本显示如何将 TruckingTime 出行模式应用到现有图层。
#Get the OD cost matrix layer object from a layer named "OD Matrix" in
#the map
doc = arcpy.mp.ArcGISProject('current')
map_obj = doc.listMaps()[0]
od_layer = map_obj.listLayers('OD Matrix')[0]
#Get the Trucking Time travel mode from the network dataset
desc = arcpy.Describe(od_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(od_layer)
solver_properties.applyTravelMode(trucking_mode)