摘要
用于访问车辆配送 (VRP) 网络分析图层中的分析属性。GetSolverProperties 函数用于从车辆配送 (VRP) 网络分析图层中获取 VehicleRoutingProblemSolverProperties 对象。
讨论
VehicleRoutingProblemSolverProperties 对象提供对车辆配送 (VRP) 网络分析图层中所有分析属性的读取和写入权限。该对象可用于修改车辆配送 (VRP) 图层的分析属性,并可重新求解相应图层以确定合适结果。使用创建车辆配送图层地理处理工具可创建新的车辆配送图层。通过从新的车辆配送图层获取 VehicleRoutingProblemSolverProperties 对象,可重新对现有图层进行后续分析,而无需每次分析都创建一个新图层,以节省时间。
修改 VehicleRoutingProblemSolverProperties 对象的属性后,可立即使用其他函数和地理处理工具分析相应图层。无需刷新或更新图层,通过上述对象进行的修改便可生效。
属性
属性 | 说明 | 数据类型 |
attributeParameters (可读写) | 用于获取或设置将在分析中使用的参数化属性。该属性返回一个 Python 字典。该字典关键字是由属性名称和参数名称这两个值组成的元组。字典中每个项目的值均为参数值。 参数化的网络属性用于对属性值的某个动态方面进行建模。例如,可使用某个参数对高度限制为 12 英尺的隧道进行建模。在这种情况下,应将以英尺为单位的车辆高度指定为参数值。如果车辆高度超过 12 英尺,此限制条件将评估为 True,从而限制车辆穿越隧道。类似的,桥梁还可以具有一个用来指定重量限制的参数。 尝试修改 attributeParameters 属性不会导致值更新。相反,您应始终使用新的字典对象来设置属性值。以下两个代码块将演示这两种方法的差异。 请勿尝试修改 attributeParameters 属性,这种编码方法不起作用。
使用新的字典对象修改 attributeParameters 属性。
| Dictionary |
capacityCount (可读写) | 用于获取或设置描述有关车辆限制所需的容量限制维度数。 | Integer |
defaultDate (可读写) | 用于获取或设置未指定时间形式日期的时间字段值的隐式日期。如果某个停靠点对象的时间字段(如 TimeWindowStart1)只有时间值,则假定该日期为 defaultDate 属性值。例如,如果某个停靠点的 TimeWindowStart1 值为 9:00 AM 并且 defaultDate 为 datetime.date(2012, 3, 6),则其字段的整个时间值为 2012 年 3 月 6 日 9:00 A.M.。默认日期不影响已具有日期的时间字段值。 也可以使用以下日期将一周中的某天指定为默认日期:
例如,要将时间字段值的隐式日期指定为星期二,则将属性值指定为 1/2/1900。 | DateTime |
distanceAttribute (可读写) | 用于获取或设置定义沿网络元素的长度所用的距离成本属性。 | String |
distanceFieldUnits (可读写) | 用于获取或设置分析图层的子图层和表(网络分析类)的距离字段所用的距离单位。单位不必与指定为 timeAttribute 属性值的网络成本属性的单位相同。以下是可能值列表:
| String |
excessTransitTimeImportance (可读写) | 用于获取或设置减少额外行驶时间的重要性。额外行驶时间是指超出停靠点对间直线行驶所需时间的数量。额外时间是由于在需求点对的访问期间进行休息或者行驶至其他停靠点或站点而导致的。以下是可能值列表:
| String |
outputPathShape (可读写) | 用于获取或设置求解程序输出的路径要素的形状类型。以下是可能值列表:
| String |
restrictions (可读写) | 用于获取或设置适用于分析的约束属性的列表。空列表 [] 表示没有约束属性用于分析。 | String |
solverName (只读) | 返回被用于获取求解程序属性对象的 Network Analyst 图层所引用的求解程序的名称。从 Vehicle Routing Problem Solver 对象访问时,该属性始终返回字符串值 VehicleRoutingProblemSolverProperties。 | String |
streetDirectionsProperties (可读写) | 为 StreetDirectionsProperties 提供读写访问,使您可自定义车辆配送图层的方向输出。 | Object |
timeAttribute (可读写) | 用于获取或设置定义沿网络元素的遍历时间所用的基于时间的网络成本属性。查找解决方案时,利用求解程序使成本属性最小化。 | String |
timeFieldUnits (可读写) | 用于获取或设置分析图层的子图层和表(网络分析类)的时态字段所用的时间单位。单位不必与指定为 timeAttribute 属性值的网络成本属性的单位相同。以下是可能值列表:
| String |
timeWindowViolationImportance (可读写) | 用于获取或设置遵循时间窗且不引起冲突的重要性。如果路径在时间窗关闭后才到达停靠点、站点或中断点,将会产生时间窗冲突。该冲突是时间窗关闭与路径到达时间之间的时间间隔。以下是可能值列表:
| String |
timeZoneUsageForTimeFields (可读写) | 指定输入数据中日期时间字段的时区,例如用于时间窗的字段。
| String |
useHierarchy (可读写) | 当执行分析时控制等级属性的使用。以下是可能值列表:
| String |
uTurns (可读写) | 用于获取或设置策略,该策略指示交汇点处的 U 形转弯在求解程序处理停靠点之间的遍历期间可如何出现。以下是可能值列表:
| String |
方法概述
方法 | 说明 |
applyTravelMode (travel_mode) | 根据出行模式对象更新网络分析图层的分析属性。随后可对更新的网络分析图层进行求解以完成分析。 |
方法
applyTravelMode (travel_mode)
参数 | 说明 | 数据类型 |
travel_mode | 该变量引用一个源自网络数据集的出行模式对象。可通过调用 arcpy.na.GetTravelModes 函数获得出行模式对象的列表。 | Object |
创建网络分析图层后,将为其分配所有分析属性的默认值。可使用从网络分析图层获得的求解程序属性对象更新各个分析属性。出行模式存储了一组预定义的分析设置,用于帮助执行特定分析,例如,步行时间出行模式存储了执行基于时间的步行分析所需的分析设置。
使用 applyTravelMode 方法,可一次性应用在一个出行模式中定义的所有分析设置。在分析属性完成更新后,可对网络分析图层进行求解以完成分析。
如果在更新求解程序属性时出错,例如,当提供的出行模式所引用的属性在当前网络数据集中不存在,或不再适用于创建求解程序属性对象的相应网络分析图层所使用的网络数据集时,不会产生任何异常。此方法将成功执行,但当您尝试求解此类网络分析图层时会出现错误。
如果 travel_mode 参数不引用出行模式对象或字符串,则将产生 TypeError 异常。如果 travel_mode 参数引用字符串并且该字符串无法在内部转换成出行模式对象的有效字符串表示,将产生 ValueError 异常。
代码示例
VehicleRoutingProblemSolverProperties 示例 1
该脚本显示如何更新 ArcMap 内容列表中现有车辆配送图层的距离属性、默认日期、交汇点的 U 形转弯和输出 Shape 类型属性。它假设已经在新地图文档中根据旧金山地区的网络数据集创建名为 Store Delivery Routes 的车辆配送图层。
#Get the vehicle routing problem layer object from a layer named
#"Store Delivery Routes" in the table of contents
vrpLayer = arcpy.mapping.Layer("Store Delivery Routes")
#Get the solver properties object from the vehicle routing problem layer
solverProps = arcpy.na.GetSolverProperties(vrpLayer)
#Update the properties for the vehicle routing problem layer using the
#solver properties object
solverProps.distanceAttribute = "Meters"
#Set the default date to be Monday
solverProps.defaultDate = datetime.date(1900,1,1)
solverProps.uTurns = "NO_UTURNS"
solverProps.outputPathShape = "STRAIGHT_LINES"
ApplyTravelMode 示例 2(工作流)
此脚本显示如何使用“货运时间”出行模式查找货车车队的路径。
#Import modules
import os
import arcpy
#Define variables
workspace = "C:/data/SanDiego.gdb"
output_folder = "C:/data/output"
nds = os.path.join(workspace, "Transportation", "Streets_ND")
orders = os.path.join(workspace, "Orders")
depots = os.path.join(workspace, "TruckDepots")
routes = os.path.join(workspace, "Drivers")
analysis_layer_name = "TruckRoutes"
#Set environment variables
arcpy.env.overwriteOutput = True
#Check out the network analyst extension
arcpy.CheckOutExtension("network")
#Create a new closest facility analysis layer
make_layer_result = arcpy.na.MakeVehicleRoutingProblemLayer(nds, analysis_layer_name,
"TravelTime")
analysis_layer = make_layer_result.getOutput(0)
#Add orders, depots and routes to the analysis layer using default field mappings
sub_layer_names = arcpy.na.GetNAClassNames(analysis_layer)
order_layer_name = sub_layer_names["Orders"]
depot_layer_name = sub_layer_names["Depots"]
route_layer_name = sub_layer_names["Routes"]
arcpy.na.AddLocations(analysis_layer, order_layer_name, orders, "#", "#")
arcpy.na.AddLocations(analysis_layer, depot_layer_name, depots, "#", "#")
arcpy.na.AddLocations(analysis_layer, route_layer_name, routes, "#", "#")
#Get the Trucking Time travel mode from the network dataset
travel_modes = arcpy.na.GetTravelModes(nds)
trucking_mode = travel_modes["Trucking Time"]
#Apply the travel mode to the analysis layer
solver_properties = arcpy.na.GetSolverProperties(analysis_layer)
solver_properties.applyTravelMode(trucking_mode)
#Solve the analysis layer skipping any invalid orders and save the result as a layer file
arcpy.na.Solve(analysis_layer, "SKIP")
output_layer = os.path.join(output_folder, analysis_layer_name + ".lyr")
arcpy.management.SaveToLayerFile(analysis_layer, output_layer, "RELATIVE")
arcpy.AddMessage("Completed")