描述
此 ArcPy 类用于执行车辆配送问题分析。
语法
VehicleRoutingProblem (in_network, {version})
参数 | 说明 | 数据类型 |
in_network | 将用于网络分析的网络数据集或服务。可以使用网络数据集的目录路径、网络数据集图层对象、网络数据集图层的字符串名称或网络分析服务的门户 URL 来指定参数。网络必须包含至少一个出行模式。 要使用门户 URL,您必须使用具有路径选择权限的帐户登录门户。 当对象使用 ArcGIS Online 作为 in_network 时,求解分析将消耗配额。有关详细信息,请参阅服务配额概述 | String |
version | 分析中要使用的方案版本。应使用 VehicleRoutingProblemSchemaVersion 枚举指定此参数。 ArcGIS Pro 2.7 中引入了更新的 VehicleRoutingProblem 对象方案,可提供增强的可用性以及更紧密地匹配 ArcGIS Pro 2.6 中引入的车辆配送图层方案。 如果可能,建议所有新分析均使用方案版本 Two。但是,门户 URL 网络数据源目前不支持方案版本 Two。如果分析将使用门户 URL 作为网络数据源,或者脚本需要与 ArcGIS Pro 2.7 之前的软件版本兼容,请使用方案版本 One。 默认值为方案版本 One。 | Object |
属性
属性 | 说明 | 数据类型 |
allowSaveLayerFile (可读写) | 指定是否允许在结果对象上使用 saveAsLayerFile 方法将分析结果另存为图层文件。值为 True 表示可以保存图层文件。值为 False 表示无法保存图层文件。如果分析引用网络数据集,则默认设置为 True;如果其引用门户服务,则为 False。如果分析引用门户服务,则允许保存图层文件可能会降低分析速度。 | Boolean |
allowSaveRouteData (可读写) | 指定是否允许在结果对象上使用 saveRouteData 方法将分析结果保存为 ZIP 文件。值为 True 表示可以保存路径数据。值为 False 表示无法保存图层文件。如果分析引用网络数据集,则默认设置为 True;如果其引用门户服务,则为 False。如果分析引用门户服务,则允许保存路径数据可能会降低分析速度。 | Boolean |
defaultDate (可读写) | 指定一天中的时间(不包含日期)的时间字段值的默认日期。默认为 None,其表示所有日期时间字段都包含日期和时间值。 | DateTime |
directionsDistanceUnits (可读写) | 报告输出转弯方向的行驶距离时使用的单位。该属性将返回并被设置为 DistanceUnits 枚举的成员,且仅在 returnDirections 属性为 True 时可用。默认值是分析时使用的出行模式中距离属性的单位。 | Object |
directionsLanguage (可读写) | 将显示输出转弯方向文本的语言。返回该属性并将表示受支持方向语言的两个或五个字符的语言代码之一设置为字符串。可从 arcpy.nax.ListDirectionsLanguages 函数中获得可用的方向语言列表。默认值为 en(英语)或当前激活的语言包的语言。此属性仅在 returnDirections 属性为 True 时可用。 | String |
directionsStyle (可读写) | 用于输出转弯方向文本的样式。该属性将返回并被设置为 DirectionsStyle 枚举的成员,且仅在 returnDirections 属性为 True 时可用。 默认值为 Desktop。 | Object |
distanceUnits (可读写) | 报告分析输出中的行驶距离时使用的单位。无论网络数据集中成本属性的单位如何,输出都将转换为此属性中设置的单位并以该单位进行报告。该属性将返回并被设置为 DistanceUnits 枚举的成员。默认设置为 DistanceUnits.Kilometers。 | Object |
excessTransitFactor (可读写) | 对减少停靠点对的额外行驶时间的重要性作出评价。额外行驶时间是指超出停靠点对间直线行驶所需时间的数量。额外时间可能由司机休息或前往中间停靠点和站点造成。 该属性将返回并被设置为 Importance 枚举的成员。默认设置为 Importance.Medium。 当设置为 Importance.Low 时,求解程序尝试找到最小化总体解决方案成本的结果(不考虑额外行驶时间)。此设置通常应用于快递服务。由于快递运输的是包裹而不是人员,因此无需担心行驶时间。使用此设置时,快递可以按照最适合的顺序为停靠点对提供服务,并且总体解决方案成本最低。 当设置为 Importance.Medium 时,求解程序在减少超出行驶时间和减少总体解决方案成本之间寻求一种平衡。 当设置为 Importance.High 时,求解程序尝试找到停靠点对之间额外行驶时间最少的解决方案(以增加总体行驶成本为代价)。如果您正在停靠点对间运载乘客并且想缩短他们的乘车时间,则这种情况适合使用此设置。这是出租车服务的特征。 | Object |
ignoreInvalidLocations (可读写) | 指定是否忽略无效的输入位置。值为 True 表示忽略无效的输入位置,仅使用有效位置即可成功进行分析。值为 False 表示不会忽略无效位置,从而导致分析失败。 | Boolean |
networkDataSource (只读) | 分析时使用的网络数据集的完整目录路径。 | String |
overrides (可读写) | 求解网络分析问题时,指定可影响求解程序行为的其他设置。 必须在 JavaScript 对象表示法 (JSON) 中指定此参数的值。例如,有效值的格式如下:{"overrideSetting1" : "value1", "overrideSetting2" : "value2"}。覆盖设置名称始终以双引号括起。该值可以是数字、布尔值或字符串。 此参数的默认值为无值,表示不覆盖任何求解程序设置。 覆盖是高级设置,应仅在谨慎分析应用设置前后得到的结果之后使用。要获得每个求解程序支持的覆盖设置及其可接受值的列表,请联系 Esri 技术支持。 | String |
returnDirections (可读写) | 指定是否将生成转弯方向。值为 True 表示在求解分析时将生成转弯方向。值为 False 表示不会生成转弯方向。生成方向可能会降低分析速度。默认值为 False。 | Boolean |
returnStopShapes (可读写) | 当设置为 True 时,求解程序将为输出停靠点生成点状。当设置为 False 时,输出停靠点将以表格格式返回。默认设置为 False。 当分析使用 VehicleRoutingProblemSchemaVersion.Two 方案版本时,该参数不适用并将忽略该参数。 | Boolean |
routeShapeType (可读写) | 要生成的表示输出路径的形状类型。路径始终沿网络计算;但是,您可以选择使用不反映网络路径的形状来表示它们。该属性将返回并被设置为 RouteShapeType 枚举的成员。默认设置为 RouteShapeType.TrueShapeWithMeasures。 | Object |
searchQuery (可读写) | 当在网络中定位输入时,指定查询以将搜索范围限制在源要素类的要素子集内。这在不想查找可能不适合网络位置的要素时很有用。例如,如果正在加载面的质心,但不想定位在地方道路上,则可定义一个仅搜索主要道路的查询。 该参数值被指定为具有嵌套列表的列表。嵌套列表由两个值组成,分别表示所有网络源的名称和 SQL 表达式。对于不同的网络源要素类类型,SQL 表达式的语法略有不同。例如,如果要查询存储在文件或企业级地理数据库中的源要素类、shapefile 或 SDC,需将字段名用双引号括起:"CFCC"。如果要查询存储在个人地理数据库中的源要素类,需将字段用方括号括起:[CFCC]。 如果您不想指定特定源的查询,请使用 "#" 作为 SQL 表达式的值,或者将源名称和 SQL 表达式从参数值中排除。如果您不想指定所有网络源的查询,请使用 "#" 作为参数值。 例如,参数值 [["Streets","\"CFCC\" = 'A15'"], ["Streets_ND_Junctions",""]] 指定了 Streets 源要素类的 SQL 表达式,而没有指定 Streets_ND_Junctions 源要素类的表达式。注意:用于括字段名 CFCC 的双引号通过反斜杠字符进行转义,以避免 Python 解释程序出现分析错误。 默认情况下不使用查询。 | List |
searchTolerance (可读写) | 在网络上定位输入要素所需的最大搜索距离。返回该属性并将其设置为双精度,然后通过 searchToleranceUnits 属性访问该值的单位。默认值为 5000。 | Double |
searchToleranceUnits (可读写) | searchTolerance 属性的单位。该属性将返回并被设置为 DistanceUnits 枚举的成员。默认设置为 DistanceUnits.Meters。 | Object |
spatiallyClusterRoutes (可读写) | 当设置为 True 时,分配给路径的停靠点将在空间上聚类。对停靠点进行聚类往往在较小区域保持路径,并减小路径线彼此相交的频率;然而,聚类可能会增加总行程时间。当设置为 False 时,求解器不会对空间聚类停靠点进行优先排序,并且路径可能会相交。如果指定了路径区,请使用此选项。 默认设置为 True。 | Boolean |
timeUnits (可读写) | 报告分析输出中的行驶时间时使用的单位。无论网络数据集中成本属性的单位如何,输出都将转换为使用在此属性中设置的单位并以该单位进行报告。该属性将返回并被设置为 TimeUnits 枚举的成员。默认设置为 TimeUnits.Minutes。 | Object |
timeWindowFactor (可读写) | 对支持时间窗的重要性作出评价。 该属性将返回并被设置为 Importance 枚举的成员。默认设置为 Importance.Medium。 当设置为 Importance.Low 时,求解程序将提高减少驾驶时间的重要性,降低按时到达停靠点的重要性。如果积压的服务请求逐渐增多,则可以使用此设置。如果为了在当日内为更多的停靠点提供服务并减少积压的订单数,则可选择此设置,即使迟到可能会为客户带来不便。 当设置为 Importance.Medium 时,求解程序将平衡减少驾驶时间的重要性与在时间窗内到达的重要性。 当设置为 Importance.High 时,求解程序将提高按时到达停靠点的重要性,降低减少驾驶时间的重要性。进行时间紧迫的配送或非常注重客户服务的组织将选择此设置。 | Object |
timeZoneForTimeFields (可读写) | 指示输入数据中的时间字段是否解释为输入位置的本地时间或协调世界时间 (UTC)。该属性将返回并被设置为 TimeZoneUsage 枚举的成员。默认设置为 TimeZoneUsage.LocalTimeAtLocations。 | Object |
travelMode (可读写) | 要用于分析的出行模式。 VRP 将仅使用基于时间的阻抗进行求解,因此仅基于时间的阻抗出行模式可用。 返回值并将其设置为 arcpy.nax.TravelMode 对象,但也可以使用出行模式的字符串名称或包含出行模式的有效 JSON 表示的字符串进行设置。默认为用于分析的网络数据集上定义的默认出行程模式。 | Object |
方法概述
方法 | 说明 |
addFields (input_type, field_description) | 将自定义字段添加到指定的输入类。 |
count (input_type) | 返回为输入类型添加的行数。 |
fieldMappings (input_type, {use_location_fields}, {list_candidate_fields}) | 生成将输入类型名称字段映射到 arcpy.nax.NAClassFieldMap 对象的字典,以允许您将字段从输入数据映射到求解程序属性。字典可以用作 load 方法 field_mappings 参数的输入。 |
fieldNames (input_type, {use_location_fields}) | 获取指定输入类型支持的字段名称列表。 |
insertCursor (input_type, field_names) | 在指定的输入类型上建立写入光标。此游标可用于将行直接添加到输入。 |
load (input_type, features, {field_mappings}, {append}, {max_features}) | 设置用于分析的输入要素。 |
solve () | 使用在 VehicleRoutingProblem 对象上设置的属性和已加载的输入执行车辆配送问题分析。 |
方法
addFields (input_type, field_description)
参数 | 说明 | 数据类型 |
input_type | 应添加字段的输入的类型。 在使用 VehicleRoutingProblemSchemaVersion.One 方案版本时,应使用 VehicleRoutingProblemInputDataType 枚举设置此参数;在使用 VehicleRoutingProblemSchemaVersion.Two 方案版本时,应使用 VehicleRoutingProblemInputDataType2 枚举设置此参数。 | Object |
field_description [field_description,...] | 将添加到输入类的字段及其属性。该值应构造为列表的列表,其中每行包含以下各项:
可用字段类型如下:
如果字段已经存在于表中或任何字段属性无效,则该方法将返回错误。 | List |
count (input_type)
参数 | 说明 | 数据类型 |
input_type | 用于计数的输入要素类型。 在使用 VehicleRoutingProblemSchemaVersion.One 方案版本时,应使用 VehicleRoutingProblemInputDataType 枚举设置此参数;在使用 VehicleRoutingProblemSchemaVersion.Two 方案版本时,应使用 VehicleRoutingProblemInputDataType2 枚举设置此参数。 | Object |
数据类型 | 说明 |
Integer | 行数。 |
fieldMappings (input_type, {use_location_fields}, {list_candidate_fields})
参数 | 说明 | 数据类型 |
input_type | 返回其字段映射的输入类型。 在使用 VehicleRoutingProblemSchemaVersion.One 方案版本时,应使用 VehicleRoutingProblemInputDataType 枚举设置此参数;在使用 VehicleRoutingProblemSchemaVersion.Two 方案版本时,应使用 VehicleRoutingProblemInputDataType2 枚举设置此参数。 在使用 VehicleRoutingProblemSchemaVersion.One 方案版本或 VehicleRoutingProblemSchemaVersion.Two 方案版本时,请参阅适用于每种输入类型的字段的描述。 | Object |
use_location_fields | 指示网络位置字段是否应包含在返回的字段映射字典中。网络位置字段可描述网络中对象所在的点。您可以使用网络位置字段更精确地控制分析输入在网络上的定位方式,并且由于求解程序不必从输入的几何计算位置字段,因此在调用 solve 方法时可以节省时间。您可以使用计算位置工具计算要素类的位置字段。 当此参数设置为 True 时,返回的字段映射字典将包含网络位置字段。默认为 False;字段映射字典不包括网络位置字段。 (默认值为 False) | Boolean |
list_candidate_fields [list_candidate_fields,...] | 用于生成映射字段名称的 arcpy.Field 对象列表,可以使用 arcpy.ListFields 函数通过给定的要素类或表获取。尚未与输入类型字段匹配的字段名称也将在映射中返回。使用额外字段调用 load 方法可以将其添加到求解程序的输入要素中,这样字段可以直通至输出并包含在其中。如果未指定此参数,则仅使用适当属性的默认值创建字段映射。 (默认值为 None) | Field |
数据类型 | 说明 |
Dictionary | 如果字典中的键为字段名称和值,则其为 arcpy.nax.NAClassFieldMap 对象。 |
fieldNames (input_type, {use_location_fields})
参数 | 说明 | 数据类型 |
input_type | 返回其支持的字段名称的输入类型。 在使用 VehicleRoutingProblemSchemaVersion.One 方案版本时,应使用 VehicleRoutingProblemInputDataType 枚举设置此参数;在使用 VehicleRoutingProblemSchemaVersion.Two 方案版本时,应使用 VehicleRoutingProblemInputDataType2 枚举设置此参数。 在使用 VehicleRoutingProblemSchemaVersion.One 方案版本或 VehicleRoutingProblemSchemaVersion.Two 方案版本时,请参阅适用于每种输入类型的字段的描述。 | Object |
use_location_fields | 指示网络位置字段是否包含在返回的字段名称列表中。网络位置字段可描述网络中对象所在的点。您可以使用网络位置字段更精确地控制分析输入在网络上的定位方式,并且由于求解程序不必从输入的几何计算位置字段,因此在调用 solve 方法时可以节省时间。您可以使用计算位置工具计算要素类的位置字段。 当此参数设置为 True 时,返回的字段名称列表将包含网络位置字段。默认为 False;字段名称列表不包括网络位置字段。 (默认值为 False) | Boolean |
数据类型 | 说明 |
String | 指定输入类型支持的字段名称列表。 |
insertCursor (input_type, field_names)
参数 | 说明 | 数据类型 |
input_type | 游标可用于插入行的输入类型。 在使用 VehicleRoutingProblemSchemaVersion.One 方案版本时,应使用 VehicleRoutingProblemInputDataType 枚举设置此参数;在使用 VehicleRoutingProblemSchemaVersion.Two 方案版本时,应使用 VehicleRoutingProblemInputDataType2 枚举设置此参数。 | Object |
field_names [field_names,...] | 当使用游标插入行时要设置其值的输入类型的字段名称列表。您可以使用 fieldNames 方法获取输入类型支持的字段名称。 在使用 VehicleRoutingProblemSchemaVersion.One 方案版本或 VehicleRoutingProblemSchemaVersion.Two 方案版本时,请参阅适用于每种输入类型的字段的描述。 除常规字段外,还可以使用以下几何令牌之一设置输入的几何:
基于点的输入类型仅支持 SHAPE@XY 和 SHAPE@XYZ 令牌。在使用 SHAPE@XY 和 SHAPE@XYZ 令牌时,应在分析中所使用的网络数据源的空间参考中指定 x、y 和 z 值。 | String |
数据类型 | 说明 |
Object | 可用于写入要素的 SolverInsertCursor 对象。 |
load (input_type, features, {field_mappings}, {append}, {max_features})
参数 | 说明 | 数据类型 |
input_type | 要加载的输入要素类型。 在使用 VehicleRoutingProblemSchemaVersion.One 方案版本时,应使用 VehicleRoutingProblemInputDataType 枚举设置此参数;在使用 VehicleRoutingProblemSchemaVersion.Two 方案版本时,应使用 VehicleRoutingProblemInputDataType2 枚举设置此参数。 | Object |
features | 要加载的输入要素。此参数接受以下输入类型: 对于图层输入,仅加载所选要素。如果图层具有定义查询,则将仅加载定义查询可见的要素子集。该方法同样支持范围地理处理环境;仅加载指定范围内的要素。 | String |
field_mappings | 将输入类型名称字段映射到 arcpy.nax.NAClassFieldMap 对象的字典,用于表示输入要素字段的映射。可以使用 fieldMappings 方法构造此参数的有效输入。 如果未指定字段映射,则将映射输入要素中与输入类型所支持的字段名称相同的所有字段。 (默认值为 None) | Dictionary |
append | 指示是否应将正在加载的要素附加到输入类型的现有要素集。True 值表示应附加新要素;并保留现有要素。如果要从多个要素类或表中加载输入以用于单个分析,此功能将非常有用。这是默认设置。False 值表示应删除输入类型的所有现有要素,并替换为当前正在加载的要素。 (默认值为 True) | Boolean |
max_features | 可以加载到输入类型的最大要素数。如果要创建工具或服务,并且希望在输入大小超出可用资源时返回错误,此功能将非常有用。如果输入要素超出 max_features 限制,则 load 方法将返回 arcpy.nax.LimitError。 如果未指定值,则不会对输入要素的计数强制执行限制。 (默认值为 None) | Integer |
代码示例
执行车辆配送问题分析。
# An example showing how to perform vehicle routing problem analysis using inputs from feature classes and tables.
import arcpy
arcpy.CheckOutExtension("network")
nds = "C:/data/NorthAmerica.gdb/Routing/Routing_ND"
nd_layer_name = "Routing_ND"
input_orders = "C:/data/io.gdb/Orders"
input_depots = "C:/data/io.gdb/Depots"
input_routes = "C:/data/io.gdb/Vehicles"
output_stops = "C:/data/io.gdb/AssignedStops"
output_routes = "C:/data/io.gdb/Routes"
output_directions = "C:/data/io.gdb/Directions"
unassigned_stops = "C:/data/io.gdb/UnassignedStops"
# Create a network dataset layer and get the desired travel mode for analysis
arcpy.nax.MakeNetworkDatasetLayer(nds, nd_layer_name)
nd_travel_modes = arcpy.nax.GetTravelModes(nd_layer_name)
travel_mode = nd_travel_modes["Driving Time"]
# Instantiate a VehicleRoutingProblem solver object
vrp = arcpy.nax.VehicleRoutingProblem(nds)
# Set properties
vrp.travelMode = travel_mode
vrp.distanceUnits = arcpy.nax.DistanceUnits.Miles
vrp.routeShapeType = arcpy.nax.RouteShapeType.TrueShape
vrp.returnDirections = True
vrp.returnStopShapes = True
# Load inputs
vrp.load(arcpy.nax.VehicleRoutingProblemInputDataType.Orders, input_orders)
vrp.load(arcpy.nax.VehicleRoutingProblemInputDataType.Depots, input_depots)
vrp.load(arcpy.nax.VehicleRoutingProblemInputDataType.Routes, input_routes)
# Solve the analysis
result = vrp.solve()
# Export the results to feature classes
if result.solveSucceeded:
result.export(arcpy.nax.VehicleRoutingProblemOutputDataType.Stops, output_stops)
result.export(arcpy.nax.VehicleRoutingProblemOutputDataType.Routes, output_routes)
result.export(arcpy.nax.VehicleRoutingProblemOutputDataType.Directions, output_directions)
if result.isPartialSolution:
print("Some of the orders were not assigned.")
result.export(arcpy.nax.VehicleRoutingProblemOutputDataType.UnassignedStops, unassigned_stops)
else:
print("Solved failed")
print(result.solverMessages(arcpy.nax.MessageSeverity.All))
可以使用 VehicleRoutingProblemSchemaVersion.Two 方案版本执行车辆配送问题分析。
# An example showing how to perform vehicle routing problem analysis using inputs from feature classes and tables.
import arcpy
arcpy.CheckOutExtension("network")
nds = "C:/data/NorthAmerica.gdb/Routing/Routing_ND"
nd_layer_name = "Routing_ND"
input_orders = "C:/data/io.gdb/Orders"
input_depots = "C:/data/io.gdb/Depots"
input_routes = "C:/data/io.gdb/Vehicles"
output_orders = "C:/data/io.gdb/VisitedOrders"
output_routes = "C:/data/io.gdb/Routes"
output_depots_visits = "C:/data/io.gdb/DepotVisits"
# Create a network dataset layer and get the desired travel mode for analysis
arcpy.nax.MakeNetworkDatasetLayer(nds, nd_layer_name)
nd_travel_modes = arcpy.nax.GetTravelModes(nd_layer_name)
travel_mode = nd_travel_modes["Driving Time"]
# Instantiate a VehicleRoutingProblem solver object using schema version Two
vrp = arcpy.nax.VehicleRoutingProblem(nds, arcpy.nax.VehicleRoutingProblemSchemaVersion.Two)
# Set properties
vrp.travelMode = travel_mode
vrp.distanceUnits = arcpy.nax.DistanceUnits.Miles
vrp.routeShapeType = arcpy.nax.RouteShapeType.TrueShape
vrp.returnDirections = True
# Load inputs
vrp.load(arcpy.nax.VehicleRoutingProblemInputDataType2.Orders, input_orders)
vrp.load(arcpy.nax.VehicleRoutingProblemInputDataType2.Depots, input_depots)
vrp.load(arcpy.nax.VehicleRoutingProblemInputDataType2.Routes, input_routes)
# Solve the analysis
result = vrp.solve()
# Export the results to feature classes
if result.solveSucceeded:
result.export(arcpy.nax.VehicleRoutingProblemOutputDataType2.Orders, output_orders)
result.export(arcpy.nax.VehicleRoutingProblemOutputDataType2.Routes, output_routes)
result.export(arcpy.nax.VehicleRoutingProblemOutputDataType2.DepotVisits, output_depots_visits)
else:
print("Solve failed")
print(result.solverMessages(arcpy.nax.MessageSeverity.All))