- JSON 表示法
- 发货
- VisitRequest
- LatLng
- 航点
- 位置
- TimeWindow
- 车辆
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- 间隔时间
- LoadCost
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- 目标
- 类型
- DurationDistanceMatrix
- 行
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
运输模型包含一组必须由一组车辆执行的运输,同时尽可能降低总费用,总费用是以下各项的总和:
- 车辆路线规划费用(所有车辆的总时间费用、行驶时间费用和固定费用的总和)。
- 未履行发货义务的处罚。
- 运输的全球运费
| JSON 表示法 | 
|---|
| { "shipments": [ { object ( | 
| 字段 | |
|---|---|
| shipments[] | 
 必须在模型中执行的一组配送。 | 
| vehicles[] | 
 可用于执行访问的一组车辆。 | 
| objectives[] | 
 此模型的一组目标,我们将其转换为费用。如果不为空,输入模型必须不含费用。如需获取经过修改的请求,请使用  实验性功能:如需了解详情,请参阅 https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request。 | 
| globalStartTime | 
 模型的全局开始时间和结束时间:超出此范围的时间均不视为有效。 模型的时间跨度不得超过 1 年,即  使用  采用 RFC 3339 标准,生成的输出将始终在末尾带 Z,并使用 0、3、6 或 9 个小数位。不带“Z”的偏差时间也是可以接受的。示例: | 
| globalEndTime | 
 如果未设置,系统会默认使用 1971 年 1 月 1 日 00:00:00 UTC(即秒数:31536000,纳秒数:0) 采用 RFC 3339 标准,生成的输出将始终在末尾带 Z,并使用 0、3、6 或 9 个小数位。不带“Z”的偏差时间也是可以接受的。示例: | 
| globalDurationCostPerHour | 
 整个方案的“总时长”是指所有车辆的最早有效开始时间与最晚有效结束时间之间的差值。例如,用户可以为该数量分配每小时费用,以便尽可能优化作业完成时间。此费用必须与  | 
| durationDistanceMatrices[] | 
 指定模型中使用的时长和距离矩阵。如果此字段为空,系统会改用 Google 地图或大地距离,具体取决于  用法示例: 
 
  | 
| durationDistanceMatrixSrcTags[] | 
 用于定义时长和距离矩阵来源的标记; 标记对应于  | 
| durationDistanceMatrixDstTags[] | 
 用于定义时长和距离矩阵目的地的标记; 标记对应于  | 
| transitionAttributes[] | 
 添加到模型的转换属性。 | 
| shipmentTypeIncompatibilities[] | 
 不兼容的 shipment_type 组合(请参阅  | 
| shipmentTypeRequirements[] | 
 一系列  | 
| precedenceRules[] | 
 必须在模型中强制执行的一组优先级规则。 重要提示:使用优先级规则会限制可优化问题的大小。使用包含多个配送项的优先级规则的请求可能会被拒绝。 | 
| maxActiveVehicles | 
 限制有效车辆的数量上限。如果车辆的路线至少执行了一次运输,则该车辆处于活跃状态。如果驾驶员数量少于车辆数量,并且车队是异构的,则可以使用此参数来限制路线数量。然后,优化功能会选择最佳车辆子集。必须为严格正数。 | 
发货
单个商品从取件到送达的运输过程。为了将运输作业视为已完成,唯一车辆必须先访问其某个取件地点(并相应地减少其空闲运力),然后稍后访问其某个送货地点(并相应地重新增加其空闲运力)。
| JSON 表示法 | 
|---|
| { "displayName": string, "pickups": [ { object ( | 
| 字段 | |
|---|---|
| displayName | 
 用户为运输订单定义的显示名称。此字段的长度不得超过 63 个字符,可以使用 UTF-8 字符。 | 
| pickups[] | 
 与运输订单关联的一组取件选项。如果未指定,车辆只需访问与送货地点对应的地点即可。 | 
| deliveries[] | 
 与运输订单关联的一组配送方式替代方案。如果未指定,车辆只需访问与上车点对应的地点即可。 | 
| loadDemands | 
 运输的载荷需求(例如重量、体积、托盘数量等)。映射中的键应为描述相应负载类型的标识符,最好还包含单位。例如:“weight_kg”“volume_gallons”“pallet_count”等。如果给定键未出现在映射中,则相应的载荷会被视为 null。 | 
| allowedVehicleIndices[] | 
 可能执行此运输的车辆组。如果为空,则所有车辆都可以执行此操作。车辆由  | 
| costsPerVehicle[] | 
 指定使用每辆车辆运送此运输时产生的费用。如果指定了,则必须具有以下任一属性: 
 这些费用必须与  | 
| costsPerVehicleIndices[] | 
 应用  | 
| pickupToDeliveryAbsoluteDetourLimit | 
 指定与从上车点到下车点的最短路径相比的绝对绕道时间上限。如果指定,则必须为非负值,并且运输必须至少包含一个上门取件和一个送货。 例如,设 t 为从所选的取件替代方案直接前往所选的送货替代方案所需的最短时间。然后,设置  如果同一运输中同时指定了相对上限和绝对上限,则系统会对每个可能的取件/送货对使用更严格的上限。自 2017 年 10 月起,只有在行程时长不依赖于车辆时,才支持绕道。 该时长以秒为单位,最多包含九个小数位,以“ | 
| pickupToDeliveryTimeLimit | 
 指定从取件开始到送货开始的最长时长。如果指定,则必须为非负值,并且运输必须至少包含一个上门取件和一个送货。这不取决于为上门取件和送货选择了哪些替代方案,也不取决于车辆速度。此参数可与最大绕行限制一起指定:解决方案将遵循这两项规范。 该时长以秒为单位,最多包含九个小数位,以“ | 
| shipmentType | 
 非空字符串,用于指定此运输的“类型”。此功能可用于定义  与仅针对单次访问指定的  | 
| label | 
 为此配送指定标签。此标签会在响应的相应  | 
| ignore | 
 如果为 true,则跳过此配送,但不应用  如果模型中有任何  允许忽略在  | 
| penaltyCost | 
 如果未能完成配送,此处罚金将计入路线的总费用。如果客户选择了某个取件和送货选项,并已前往该选项的取件点或送货地址,则系统会将相应运输订单视为已完成。费用可以采用模型中所有其他与费用相关的字段所用的相同单位表示,并且必须为正值。 重要提示:如果未指定此处罚,则视为无限期,即必须完成发货。 | 
| pickupToDeliveryRelativeDetourLimit | 
 指定与从上车点到下车点的最短路径相比,绕路的最大相对时间。如果指定,则必须为非负值,并且运输必须至少包含一个上门取件和一个送货。 例如,设 t 为从所选的取件替代方案直接前往所选的送货替代方案所需的最短时间。然后,设置  如果同一运输中同时指定了相对上限和绝对上限,则系统会对每个可能的取件/送货对使用更严格的上限。自 2017 年 10 月起,只有在行程时长不依赖于车辆时,才支持绕道。 | 
VisitRequest
请求由车辆执行的访问:包含地理位置(或两个地理位置,见下文)、由时间范围表示的开业和打烊时间,以及服务时长(车辆到达取件或送货地点后所花时间)。
| JSON 表示法 | 
|---|
| { "arrivalLocation": { object ( | 
| 字段 | |
|---|---|
| arrivalLocation | 
 执行此  | 
| arrivalWaypoint | 
 车辆执行此  | 
| departureLocation | 
 车辆完成此  | 
| departureWaypoint | 
 车辆完成此  | 
| tags[] | 
 指定附加到访问请求的标记。不允许使用空字符串或重复的字符串。 | 
| timeWindows[] | 
 用于约束到达时间的访问时间窗口。请注意,车辆可能会在到达时间范围之外出发,即到达时间 + 时长不必在时间范围内。如果车辆在  如果没有  时间窗口必须互不相交,即任何时间窗口都不能与其他时间窗口重叠或相邻,并且必须按升序排列。 只有在只有一个时间范围时,才能设置  | 
| duration | 
 访问时长,即车辆从到达到离开所花的时间(应与可能的等待时间相加;请参阅  该时长以秒为单位,最多包含九个小数位,以“ | 
| cost | 
 在车辆路线上处理此访问请求的费用。您可以使用此属性为每笔订单的每种备选自提或外卖服务支付不同的费用。此费用必须与  | 
| loadDemands | 
 此访问请求的加载需求。这与  | 
| visitTypes[] | 
 指定访问类型。此值可用于分配车辆完成此访问所需的额外时间(请参阅  一种类型只能出现一次。 | 
| label | 
 为此  | 
| avoidUTurns | 
 指定在此位置的驾车路线中是否应避免 U 形转弯。系统会尽力避免 U 型转弯,但无法保证完全避免。这是一项实验性功能,行为可能会发生变化。 实验性功能:如需了解详情,请访问 https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request。 | 
LatLng
表示纬度/经度对的对象。该对象以一对双精度数表示,分别代表纬度度数和经度度数。除非另有说明,否则该对象必须符合 WGS84 标准。值必须介于标准化范围内。
| JSON 表示法 | 
|---|
| { "latitude": number, "longitude": number } | 
| 字段 | |
|---|---|
| latitude | 
 纬度(以度为单位)。它必须在 [-90.0, +90.0] 范围内。 | 
| longitude | 
 经度(以度为单位)。它必须在 [-180.0, +180.0] 范围内。 | 
航点
封装航点。路点用于标记 VisitRequest 的到达和出发地点,以及车辆的起始和终点位置。
| JSON 表示法 | 
|---|
| { "sideOfRoad": boolean, "vehicleStopover": boolean, // Union field | 
| 字段 | |
|---|---|
| sideOfRoad | 
 可选。指示此航点的位置是指示车辆在道路的特定侧停车的偏好设置。设置此值后,路线将穿过相应位置,以便车辆在相应位置偏离道路中心的一侧停车。此选项不适用于“步行”出行方式。 | 
| vehicleStopover | 
 表示航点是供车辆停靠的,目的是上车或下车。此选项仅适用于“驾车”出行模式,且“locationType”为“location”。 实验性:此字段的行为或存在性未来可能会发生变化。 | 
| 联合字段 location_type。表示地理位置的不同方式。location_type只能是下列其中一项: | |
| location | 
 使用地理坐标指定的点,包括可选的航向。 | 
| placeId | 
 与航点关联的地图注点地点 ID。 使用地点 ID 指定 VisitRequest 的到达或出发地点时,请使用足够具体的地点 ID 来确定用于导航到相应地点的 LatLng 位置。例如,表示建筑物的地点 ID 是合适的,但表示道路的地点 ID 则不建议使用。 | 
位置
封装位置(地理点和可选的标题)。
| JSON 表示法 | 
|---|
| {
  "latLng": {
    object ( | 
| 字段 | |
|---|---|
| latLng | 
 航点的地理坐标。 | 
| heading | 
 与交通流方向相关联的罗盘方向。此值用于指定上车点和下车点所在的道路边。航向值介于 0 到 360 之间,其中 0 指定正北,90 指定正东,依此类推。 | 
TimeWindow
时间范围用于约束事件的时间,例如到达时间或车辆的开始时间和结束时间。
硬性时间范围边界 startTime 和 endTime 会强制执行事件的最早和最晚时间,例如 startTime <= event_time <=
          endTime。软时间范围下限 softStartTime 表示希望事件在 softStartTime 或之后发生,通过使事件发生在 softStartTime 之前的时间与代价成正比来实现这一点。软时间范围上限 softEndTime 表示希望事件在 softEndTime 当天或之前发生,如果事件发生在 softEndTime 之后,则会产生与事件发生在 softEndTime 之后的时长成正比的代价。startTime、endTime、softStartTime 和 softEndTime 应在全球时间限制范围内(请参阅 ShipmentModel.global_start_time 和 ShipmentModel.global_end_time),并且应遵循以下要求:
  0 <= `startTime` <= `endTime` and
  0 <= `startTime` <= `softStartTime` and
  0 <= `softEndTime` <= `endTime`.
| JSON 表示法 | 
|---|
| { "startTime": string, "endTime": string, "softStartTime": string, "softEndTime": string, "costPerHourBeforeSoftStartTime": number, "costPerHourAfterSoftEndTime": number } | 
| 字段 | |
|---|---|
| startTime | 
 硬性时间范围的开始时间。如果未指定,则将设置为  采用 RFC 3339 标准,生成的输出将始终在末尾带 Z,并使用 0、3、6 或 9 个小数位。不带“Z”的偏差时间也是可以接受的。示例: | 
| endTime | 
 硬性时间范围的结束时间。如果未指定,则将设置为  采用 RFC 3339 标准,生成的输出将始终在末尾带 Z,并使用 0、3、6 或 9 个小数位。不带“Z”的偏差时间也是可以接受的。示例: | 
| softStartTime | 
 时间段的软开始时间。 采用 RFC 3339 标准,生成的输出将始终在末尾带 Z,并使用 0、3、6 或 9 个小数位。不带“Z”的偏差时间也是可以接受的。示例: | 
| softEndTime | 
 时间范围的非强制性结束时间。 采用 RFC 3339 标准,生成的输出将始终在末尾带 Z,并使用 0、3、6 或 9 个小数位。不带“Z”的偏差时间也是可以接受的。示例: | 
| costPerHourBeforeSoftStartTime | 
 如果事件发生在 softStartTime 之前,则向模型中的其他费用添加每小时费用,计算方式如下: 此费用必须为正数,并且只有在设置了 softStartTime 后才能设置此字段。 | 
| costPerHourAfterSoftEndTime | 
 如果事件发生在  此费用必须为正数,并且只有在设置了  | 
交通工具
对运输问题中的车辆进行建模。解决运输问题后,系统会为此车辆构建一条起点为 startLocation、终点为 endLocation 的路线。路线是一系列到访记录(请参阅 ShipmentRoute)。
| JSON 表示法 | 
|---|
| { "displayName": string, "travelMode": enum ( | 
| 字段 | |
|---|---|
| displayName | 
 车辆的用户定义显示名称。此字段的长度不得超过 63 个字符,可以使用 UTF-8 字符。 | 
| travelMode | 
 行驶模式,会影响车辆可行驶的道路和速度。另请参阅  | 
| routeModifiers | 
 一组需要满足的条件,这些条件会影响为指定车辆计算路线的方式。 | 
| startLocation | 
 车辆在接收任何运输件之前的起始地理位置。如果未指定,则车辆从首次上车开始计算。如果运输模型具有时长和距离矩阵,则不得指定  | 
| startWaypoint | 
 表示车辆在接收任何运输件之前的起始地理位置的航点。如果未指定  | 
| endLocation | 
 车辆完成最后一次  | 
| endWaypoint | 
 路点,表示车辆完成最后一次  | 
| startTags[] | 
 指定附加到车辆路线起点的标记。 不允许使用空字符串或重复的字符串。 | 
| endTags[] | 
 指定附加到车辆路线末尾的标记。 不允许使用空字符串或重复的字符串。 | 
| startTimeWindows[] | 
 车辆可以从起始位置出发的时间范围。它们必须在全球时限范围内(请参阅  属于同一重复字段的时间范围必须互不重叠,即任何时间范围都不能与其他时间范围重叠或相邻,并且必须按时间顺序排列。 只有在只有一个时间范围时,才能设置  | 
| endTimeWindows[] | 
 车辆可能到达终点位置的时间范围。它们必须在全球时限范围内(请参阅  属于同一重复字段的时间范围必须互不重叠,即任何时间范围都不能与其他时间范围重叠或相邻,并且必须按时间顺序排列。 只有在只有一个时间范围时,才能设置  | 
| unloadingPolicy | 
 对车辆强制执行的卸载政策。 | 
| loadLimits | 
 车辆的载重量(例如重量、体积、托盘数量)。映射中的键是负载类型的标识符,与  | 
| costPerHour | 
 车辆费用:所有费用相加,且必须与  车辆路线的每小时费用。此费用适用于相应路线所花费的总时间,包括行驶时间、等待时间和访问时间。使用  | 
| costPerTraveledHour | 
 车辆路线每小时的费用。此费用仅适用于路线所需的旅行时间(即  | 
| costPerKilometer | 
 车辆路线的每公里费用。此费用适用于  | 
| fixedCost | 
 如果此车辆用于处理运输,则应用的固定费用。 | 
| usedIfRouteIsEmpty | 
 只有当车辆的路线不为任何运输服务时,此字段才适用。它指示在这种情况下,车辆是否应被视为二手车。 如果为 true,则车辆会从起始位置前往终点位置(即使没有运送任何运输),并且系统会考虑从起始位置到终点位置的旅行时间和距离费用。 否则,车辆不会从起始位置前往终点位置,并且系统不会为此车辆安排  | 
| routeDurationLimit | 
 适用于车辆路线总时长的限制。在给定  | 
| travelDurationLimit | 
 对车辆路线的旅行时长施加的限制。在给定  | 
| routeDistanceLimit | 
 适用于车辆行驶路线总里程的限制。在给定的  | 
| extraVisitDurationForVisitType | 
 指定从 visitTypes 字符串到时长的映射。时长是指在使用指定  如果访问请求具有多种类型,系统会在映射中为每种类型添加时长。 | 
| breakRule | 
 描述要强制应用于此车辆的休息时间表。如果为空,则系统不会为此车辆安排休息时间。 | 
| label | 
 为此车辆指定标签。此标签会在响应中报告为相应  | 
| ignore | 
 如果为 true,则  如果运输由  如果运输由  | 
| travelDurationMultiple | 
 指定一个乘数,可用于增加或缩短此车辆的旅行时间。例如,将此值设置为 2.0 表示此车辆的速度较慢,行程时间是标准车辆的两倍。此倍数不会影响访问时长。如果指定了  警告:在应用此倍数后,但在执行任何数值运算之前,行程时间将舍入到最接近的秒数,因此,较小的倍数可能会导致精度损失。 另请参阅下面的  | 
TravelMode
车辆可使用的出行方式。
这些模式应为 Google Maps Platform Routes API 出行方式的子集,请参阅:https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode
注意:WALKING 路线目前处于 Beta 版阶段,有时可能缺少明确的步道或人行道。对于您在应用中显示的所有步行路线,都必须向用户显示此警告。
| 枚举 | |
|---|---|
| TRAVEL_MODE_UNSPECIFIED | 未指定的出行方式,相当于 DRIVING。 | 
| DRIVING | 与驾车路线对应的出行方式(汽车等)。 | 
| WALKING | 与步行路线对应的出行方式。 | 
RouteModifiers
封装一组可选条件,以便在计算车辆路线时满足这些条件。这与 Google Maps Platform Routes Preferred API 中的 RouteModifiers 类似;请参阅:https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers。
| JSON 表示法 | 
|---|
| { "avoidTolls": boolean, "avoidHighways": boolean, "avoidFerries": boolean, "avoidIndoor": boolean } | 
| 字段 | |
|---|---|
| avoidTolls | 
 指定是否在合理情况下避开收费公路。系统会优先选择不含收费道路的路线。仅适用于机动化出行方式。 | 
| avoidHighways | 
 指定是否在合理情况下避开高速公路。系统会优先选择不含高速公路的路线。仅适用于机动化出行方式。 | 
| avoidFerries | 
 指定是否在合理情况下避开轮渡。系统会优先显示不含轮渡的路线。仅适用于机动化出行方式。 | 
| avoidIndoor | 
 可选。指定是否在合理情况下避免在室内导航。系统会优先显示不包含室内导航的路线。仅适用于  | 
UnloadingPolicy
有关如何卸车的政策。仅适用于同时包含上门取件和送货服务的运输服务。
其他运输可以随意在路线上的任何位置进行,不受 unloadingPolicy 的影响。
| 枚举 | |
|---|---|
| UNLOADING_POLICY_UNSPECIFIED | 未指定卸货政策;送货必须在相应上货后进行。 | 
| LAST_IN_FIRST_OUT | 送货必须按照取件顺序的反向顺序进行 | 
| FIRST_IN_FIRST_OUT | 送货顺序必须与上门取件顺序相同 | 
LoadLimit
定义适用于车辆的载重限制,例如“此卡车载重不得超过 3500 千克”。请参阅 loadLimits。
| JSON 表示法 | 
|---|
| { "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( | 
| 字段 | |
|---|---|
| softMaxLoad | 
 负载的软上限。请参阅  | 
| costPerUnitAboveSoftMax | 
 如果此车辆的路线上的载荷超过  | 
| startLoadInterval | 
 车辆在路线起点处的可接受载荷间隔。 | 
| endLoadInterval | 
 车辆在路线结束时可接受的载荷间隔。 | 
| maxLoad | 
 可接受的最大负载量。 | 
| costPerKilometer | 
 此车辆将 1 个单位的载荷运送 1 公里的费用。这可以用作燃料消耗的代理:如果载荷是重量(以牛顿为单位),则载荷*公里的维度为能量。 实验性功能:如需了解详情,请参阅 https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request。 | 
| costPerTraveledHour | 
 这辆车在 1 小时内载重单位行驶的费用。 实验性功能:如需了解详情,请参阅 https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request。 | 
间隔
可接受的加载量间隔。
| JSON 表示法 | 
|---|
| { "min": string, "max": string } | 
| 字段 | |
|---|---|
| min | 
 | 
| max | 
 可接受的最大负载。必须大于等于 0。如果未指定,则此消息不会限制最大负载。如果同时指定了  | 
LoadCost
在 Transition 期间移动 1 个单位负载的费用。对于给定负载,费用是以下两部分的总和:
- min(load, loadThreshold) *costPerUnitBelowThreshold
- max(0, load - loadThreshold) *costPerUnitAboveThreshold
在这种情况下,解决方案会优先传送高需求,或者等到最后才传送高需求。例如,如果车辆具有
load_limit {
  key: "weight"
  value {
    costPerKilometer {
      loadThreshold: 15
      costPerUnitBelowThreshold: 2.0
      costPerUnitAboveThreshold: 10.0
    }
  }
}
其路线为开始、上车、上车、下车、下车、结束,其中包含以下转场效果:
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
则此 LoadCost 产生的费用为 (cost_below * load_below * kilometers + cost_above * load_above * kms)
- transition 0: 0.0
- 过渡 1:2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- 过渡 2:2.0 * 15 * 1.0 + 10.0 * (20 - 15) * 1.0 = 80.0
- 过渡 3:2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- 过渡 4:0.0
因此,整个路线的 LoadCost 为 120.0。
但是,如果路线是“开始、上车、送货、上车、送货、结束”,则转场效果如下:
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
则此 LoadCost 产生的费用为
- transition 0: 0.0
- 过渡 1:2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- 过渡 2:0.0
- 过渡 3:2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- 过渡 4:0.0
在这里,整个路线的 LoadCost 为 40.0。
LoadCost 会使具有大量转换的解决方案的开销增加。
实验性功能:如需了解详情,请参阅 https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request。
| JSON 表示法 | 
|---|
| { "loadThreshold": string, "costPerUnitBelowThreshold": number, "costPerUnitAboveThreshold": number } | 
| 字段 | |
|---|---|
| loadThreshold | 
 负载量,如果负载量超过此值,则移动单位负载的费用将从 costPerUnitBelowThreshold 更改为 costPerUnitAboveThreshold。必须大于等于 0。 | 
| costPerUnitBelowThreshold | 
 移动单位负载的费用,对于 0 到阈值之间的每个单位。必须是有限值,且大于等于 0。 | 
| costPerUnitAboveThreshold | 
 每超出阈值一个单位的负载,移动该单位负载的费用。在特殊情况下,如果阈值 = 0,则表示每单位的固定费用。必须是有限值,且大于等于 0。 | 
DurationLimit
用于定义车辆路线时长的上限。它可以是硬的,也可以是软的。
定义软上限字段时,必须同时定义软上限阈值及其相关费用。
| JSON 表示法 | 
|---|
| { "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } | 
| 字段 | |
|---|---|
| maxDuration | 
 一个硬限制,用于限制时长不得超过 maxDuration。 该时长以秒为单位,最多包含九个小数位,以“ | 
| softMaxDuration | 
 软性限制不会强制执行时长上限,但如果违反此限制,相应路线会产生费用。此费用与模型中定义的其他费用相加,单位相同。 如果已定义, 该时长以秒为单位,最多包含九个小数位,以“ | 
| quadraticSoftMaxDuration | 
 软限制不会强制执行时长上限,但如果违反此限制,路线会产生费用,费用与时长成二次方关系。此费用与模型中定义的其他费用相加,单位相同。 如果已定义, 
 该时长以秒为单位,最多包含九个小数位,以“ | 
| costPerHourAfterSoftMax | 
 如果违反  费用必须为非负数。 | 
| costPerSquareHourAfterQuadraticSoftMax | 
 如果违反  如果时长低于阈值,则额外费用为 0;否则,费用取决于时长,如下所示: 费用必须为非负数。 | 
DistanceLimit
用于定义可行驶的最大距离的限制。它可以是硬的,也可以是软的。
如果定义了软上限,则必须定义 softMaxMeters 和 costPerKilometerAboveSoftMax,并且它们必须为非负值。
| JSON 表示法 | 
|---|
| { "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } | 
| 字段 | |
|---|---|
| maxMeters | 
 一个硬限制,用于限制距离不得超过 maxMeters。上限必须是非负数。 | 
| softMaxMeters | 
 软限制不会强制执行最大距离限制,但如果违反了此限制,则会产生费用,该费用会与模型中定义的其他费用相加,并采用相同的单位。 如果已定义 softMaxMeters,则其值必须小于 maxMeters 且必须为非负数。 | 
| costPerKilometerBelowSoftMax | 
 发生的每公里费用(最高可达  
 | 
| costPerKilometerAboveSoftMax | 
 如果距离超出  费用必须为非负数。 | 
BreakRule
用于为车辆生成时间休息时段(例如午餐休息时段)的规则。休息时间是指车辆在其当前位置保持空闲状态且无法执行任何访问的连续时间段。中断可能会发生在以下情况下:
- 在两次访问之间的行程中(包括访问前后的时间,但不包括访问期间),在这种情况下,它会延长两次访问之间的相应转接时间;
- 或在车辆启动之前(车辆可能不会在休息期间启动),在这种情况下,它不会影响车辆启动时间。
- 或在车辆结束后(同上,使用车辆结束时间)。
| JSON 表示法 | 
|---|
| { "breakRequests": [ { object ( | 
| 字段 | |
|---|---|
| breakRequests[] | 
 休息时间序列。查看  | 
| frequencyConstraints[] | 
 可能有多个  | 
BreakRequest
必须事先知道适用于每辆车的休息点序列(即数量和顺序)。重复的 BreakRequest 定义了该序列,并按其必须出现的顺序排列。它们的时间范围 (earliestStartTime / latestStartTime) 可能会重叠,但必须与订单兼容(系统会进行检查)。
| JSON 表示法 | 
|---|
| { "earliestStartTime": string, "latestStartTime": string, "minDuration": string } | 
| 字段 | |
|---|---|
| earliestStartTime | 
 必需。休息时间开始的下限(包括该时间)。 采用 RFC 3339 标准,生成的输出将始终在末尾带 Z,并使用 0、3、6 或 9 个小数位。不带“Z”的偏差时间也是可以接受的。示例: | 
| latestStartTime | 
 必需。休息时间开始的上限(包括该时间)。 采用 RFC 3339 标准,生成的输出将始终在末尾带 Z,并使用 0、3、6 或 9 个小数位。不带“Z”的偏差时间也是可以接受的。示例: | 
| minDuration | 
 必需。广告插播时长下限。必须为正值。 该时长以秒为单位,最多包含九个小数位,以“ | 
FrequencyConstraint
您可以通过强制执行最小休息频率(例如“每 12 小时必须至少休息 1 小时”)来进一步约束上述休息时间的频率和时长。假设这可以解释为“在任何 12 小时的滑动时间窗口内,必须至少有 1 次至少 1 小时的休息时间”,那么该示例将转换为以下 FrequencyConstraint:
{
   minBreakDuration { seconds: 3600 }         # 1 hour.
   maxInterBreakDuration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}
除了 BreakRequest 中已指定的时间范围和最短时长之外,解决方案中休息时间的安排和时长还必须遵守所有此类约束条件。
在实践中,FrequencyConstraint 可能适用于非连续休息时间。例如,以下时间表遵循“每 12 小时 1 小时”示例:
  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
| JSON 表示法 | 
|---|
| { "minBreakDuration": string, "maxInterBreakDuration": string } | 
| 字段 | |
|---|---|
| minBreakDuration | 
 必需。此限制条件的最短插播时长。非负数。请参阅  该时长以秒为单位,最多包含九个小数位,以“ | 
| maxInterBreakDuration | 
 必需。路线中任何时间间隔(不包含至少部分  该时长以秒为单位,最多包含九个小数位,以“ | 
目标
目标会完全替换费用模型,因此与现有费用不兼容。每个目标都会映射到一系列预定义的费用,例如车辆、运输或过渡属性。
实验性功能:如需了解详情,请参阅 https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request。
| JSON 表示法 | 
|---|
| {
  "type": enum ( | 
| 字段 | |
|---|---|
| type | 
 目标的类型。 | 
| weight | 
 相对于其他目标,此目标应占多大权重。此值可以是任何非负数,权重的总和不必为 1。权重默认为 1.0。 | 
类型
将映射到一组费用的目标类型。
| 枚举 | |
|---|---|
| DEFAULT | 系统会使用一组默认费用,以确保提供合理的解决方案。注意:此目标可以单独使用,但如果用户未指定此目标,系统也会将其作为基准,以权重 1.0 的形式添加到用户指定的目标中。 | 
| MIN_DISTANCE | “MIN”目标。尽可能缩短总行驶里程。 | 
| MIN_WORKING_TIME | 尽可能缩短所有车辆的总工作时间。 | 
| MIN_TRAVEL_TIME | 与上述方法相同,但仅关注行程时间。 | 
| MIN_NUM_VEHICLES | 尽可能减少使用的车辆数量。 | 
DurationDistanceMatrix
指定从访问地点和车辆起始位置到访问地点和车辆终止位置的时长和距离矩阵。
| JSON 表示法 | 
|---|
| {
  "rows": [
    {
      object ( | 
| 字段 | |
|---|---|
| rows[] | 
 指定时长和距离矩阵的行。其元素数量必须与  | 
| vehicleStartTag | 
 用于定义此时长和距离矩阵适用于哪些车辆的标记。如果为空,则应用于所有车辆,并且只能有一个矩阵。 每项车辆启动都必须与一个矩阵完全匹配,即其中只有一个  所有矩阵都必须具有不同的  | 
行
指定时长和距离矩阵的行。
| JSON 表示法 | 
|---|
| { "durations": [ string ], "meters": [ number ] } | 
| 字段 | |
|---|---|
| durations[] | 
 指定行的时长值。其元素数量必须与  该时长以秒为单位,最多包含九个小数位,以“ | 
| meters[] | 
 给定行的距离值。如果模型中没有任何费用或约束条件涉及距离,则可以将此值留空;否则,其元素数量必须与  | 
TransitionAttributes
指定路线上两次连续访问之间的转换属性。同一转换可能适用多个 TransitionAttributes:在这种情况下,所有额外费用都会相加,并且系统会应用最严格的约束条件或限制(遵循自然的“AND”语义)。
| JSON 表示法 | 
|---|
| {
  "srcTag": string,
  "excludedSrcTag": string,
  "dstTag": string,
  "excludedDstTag": string,
  "cost": number,
  "costPerKilometer": number,
  "distanceLimit": {
    object ( | 
| 字段 | |
|---|---|
| srcTag | 
 用于定义这些属性适用的一组 (src->dst) 转场效果的标记。 来源访问或车辆启动匹配的条件是:其  | 
| excludedSrcTag | 
 请参阅  | 
| dstTag | 
 只有当目的地到访或车辆结束的  | 
| excludedDstTag | 
 请参阅  | 
| cost | 
 指定执行此转换的费用。此值应与模型中的所有其他费用采用相同的单位,且不得为负值。此费用需在所有其他现有费用之外支付。 | 
| costPerKilometer | 
 指定在执行此过渡期间对行驶距离应用的每公里费用。它与车辆上指定的任何  | 
| distanceLimit | 
 指定执行此过渡时行进的距离上限。 自 2021 年 6 月起,仅支持软限制。 | 
| delay | 
 指定执行此转换时产生的延迟时间。 此延迟始终发生在完成来源访问之后,并在开始目标访问之前。 该时长以秒为单位,最多包含九个小数位,以“ | 
ShipmentTypeIncompatibility
根据 shipmentType 指定不同配送信息之间的不兼容性。系统会根据不兼容模式限制同一路线上不兼容的配送信息的显示。
| JSON 表示法 | 
|---|
| {
  "types": [
    string
  ],
  "incompatibilityMode": enum ( | 
| 字段 | |
|---|---|
| types[] | 
 不兼容的类型列表。如果两个发货中列出的  | 
| incompatibilityMode | 
 应用于不兼容问题的模式。 | 
IncompatibilityMode
用于定义如何限制同一路线上不兼容的配送信息显示方式的模式。
| 枚举 | |
|---|---|
| INCOMPATIBILITY_MODE_UNSPECIFIED | 未指定的兼容性模式。不应使用此值。 | 
| NOT_PERFORMED_BY_SAME_VEHICLE | 在此模式下,两件类型不兼容的运输服务绝不能共用同一辆车辆。 | 
| NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY | 对于两种类型不兼容且采用  
 | 
ShipmentTypeRequirement
根据 shipmentType 指定不同配送之间的要求。具体要求由要求模式定义。
| JSON 表示法 | 
|---|
| {
  "requiredShipmentTypeAlternatives": [
    string
  ],
  "dependentShipmentTypes": [
    string
  ],
  "requirementMode": enum ( | 
| 字段 | |
|---|---|
| requiredShipmentTypeAlternatives[] | 
 
 | 
| dependentShipmentTypes[] | 
 对于  注意:不允许  | 
| requirementMode | 
 应用于相应要求的模式。 | 
RequirementMode
用于定义路线中依赖配送的显示方式的模式。
| 枚举 | |
|---|---|
| REQUIREMENT_MODE_UNSPECIFIED | 未指定要求模式。不应使用此值。 | 
| PERFORMED_BY_SAME_VEHICLE | 在此模式下,所有“依赖性”运输必须与至少一个“必需性”运输共用同一车辆。 | 
| IN_SAME_VEHICLE_AT_PICKUP_TIME | 在  因此,“依赖”的商品自提必须具有以下任一属性: 
 | 
| IN_SAME_VEHICLE_AT_DELIVERY_TIME | 与之前相同,但“依赖”运输服务的运输订单在送达时需要在车辆上装载“必需”运输服务的运输订单。 | 
PrecedenceRule
两项事件(每项事件都是商品的取件或送达)之间的优先级规则:“第二”事件必须在“第一”事件开始后至少 offsetDuration 才会开始。
多个优先级可以引用同一(或相关)事件,例如“B 的送达发生在 A 的送达之后”和“C 的送达发生在 B 的送达之后”。
此外,优先级仅在同时发货时才适用,否则会被忽略。
| JSON 表示法 | 
|---|
| { "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } | 
| 字段 | |
|---|---|
| firstIsDelivery | 
 指示“第一个”事件是否为传送事件。 | 
| secondIsDelivery | 
 指示“第二个”事件是否为传送。 | 
| offsetDuration | 
 “first”事件与“second”事件之间的偏移。可以为负数。 该时长以秒为单位,最多包含九个小数位,以“ | 
| firstIndex | 
 “first”事件的配送指数。必须指定此字段。 | 
| secondIndex | 
 “第二个”事件的配送编号。必须指定此字段。 |