- JSON 表示法
- 访问
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表示法
- 过渡
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表示法
- EncodedPolyline
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表示法
- 休息时间
<ph type="x-smartling-placeholder">
- </ph>
- JSON 表示法
车辆的路线可以沿时间轴分解,如下所示(我们假设有 n 次访问):
| | | | | T[2], | | |
| Transition | Visit #0 | | | V[2], | | |
| #0 | aka | T[1] | V[1] | ... | V[n-1] | T[n] |
| aka T[0] | V[0] | | | V[n-2],| | |
| | | | | T[n-1] | | |
^ ^ ^ ^ ^ ^ ^ ^
vehicle V[0].start V[0].end V[1]. V[1]. V[n]. V[n]. vehicle
start (arrival) (departure) start end start end end
请注意,我们对以下两个方面有所不同:
- “准时事件”,例如车辆开始和结束以及每次访问的开始和结束(也称为到达和离开)。它们发生在特定的某一秒。
- “时间间隔”,例如访问本身以及访问之间的转换。虽然时间间隔有时的时长可能为零(即开始和结束时间相同),但它们的时长通常为正数。
不变量:
- 如果有 n 次访问,则会出现 n+1 次转换。
- 访问始终围绕在其之后的转换(索引相同)和之后的转换(索引 + 1)。
- 车辆启动后始终是转场 #0。
- 车辆结束始终在过渡 #n 之前。
放大后,下面是在 Transition
和 Visit
期间会发生的情况:
---+-------------------------------------+-----------------------------+-->
| TRANSITION[i] | VISIT[i] |
| | |
| * TRAVEL: the vehicle moves from | PERFORM the visit: |
| VISIT[i-1].departure_location to | |
| VISIT[i].arrival_location, which | * Spend some time: |
| takes a given travel duration | the "visit duration". |
| and distance | |
| | * Load or unload |
| * BREAKS: the driver may have | some quantities from the |
| breaks (e.g. lunch break). | vehicle: the "demand". |
| | |
| * WAIT: the driver/vehicle does | |
| nothing. This can happen for | |
| many reasons, for example when | |
| the vehicle reaches the next | |
| event's destination before the | |
| start of its time window | |
| | |
| * DELAY: *right before* the next | |
| arrival. E.g. the vehicle and/or | |
| driver spends time unloading. | |
| | |
---+-------------------------------------+-----------------------------+-->
^ ^ ^
V[i-1].end V[i].start V[i].end
最后,下面展示了如何在过渡期间安排 TRAVEL、BREAKS、DELAY 和 WAIT。
- 不会重叠。
- DELAY 是唯一的,且必须是下次访问(或车辆结束)之前的连续时间段。因此,只需知道延迟时长,即可知道其开始时间和结束时间。
- 这些 BREAKS 是连续且不重叠的时间段。响应会指定每个插播时间点的开始时间和时长。
- TRAVEL 和 WAIT 是“可抢占”的:在此转换过程中,它们可能会多次中断。客户可以假设出差“尽快”然后“等待”填充剩余时间。
(复杂)示例:
TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
|| | | | | | | ||
|| T | B | T | | B | | D ||
|| r | r | r | W | r | W | e ||
|| a | e | a | a | e | a | l ||
|| v | a | v | i | a | i | a ||
|| e | k | e | t | k | t | y ||
|| l | | l | | | | ||
|| | | | | | | ||
--++-----------------------------------------------------------------++-->
JSON 表示法 |
---|
{ "vehicleIndex": integer, "vehicleLabel": string, "vehicleStartTime": string, "vehicleEndTime": string, "visits": [ { object ( |
字段 | |
---|---|
vehicleIndex |
执行路线的车辆,由其在源 |
vehicleLabel |
执行此路线的车辆的标签,等于 |
vehicleStartTime |
车辆开始行驶路线的时间。 时间戳采用 RFC3339 世界协调时间(UTC,即“祖鲁时”)格式,精确到纳秒,最多九个小数位。示例: |
vehicleEndTime |
车辆完成行驶路线的时间。 时间戳采用 RFC3339 世界协调时间(UTC,即“祖鲁时”)格式,精确到纳秒,最多九个小数位。示例: |
visits[] |
表示路线的一系列按顺序进行的访问。Visits[i] 是路线中的第 i 次访问。如果此字段为空,车辆会被视为未使用。 |
transitions[] |
路由的有序转换列表。 |
hasTrafficInfeasibilities |
当
由于交通原因,预计行程时间 ( |
routePolyline |
路线的编码多段线表示形式。仅当 |
breaks[] |
为执行此路线的车辆安排的休息时间。 |
metrics |
此路线的时长、距离和负载指标。 |
routeCosts |
路由的费用,按与费用相关的请求字段细分。键是相对于输入 OptimizationToursRequest 的 proto 路径,例如:"model.shipments.pickups.cost",这些值是相应费用字段生成的总费用,汇总到整个路线中。换句话说,cost["model.shipments.pickups.cost"] 是路线中所有提货费用的总和。模型中定义的所有费用均在此处详细报告,但与 TransitionAttributes 相关的费用自 2022 年 1 月起仅以汇总方式报告。 包含一系列 |
routeTotalCost |
路线的总费用。费用映射中所有费用的总和。 |
访问
在路线期间进行的访问。本次访问对应于 Shipment
的自取或交付。
JSON 表示法 |
---|
{
"shipmentIndex": integer,
"isPickup": boolean,
"visitRequestIndex": integer,
"startTime": string,
"loadDemands": {
string: {
object ( |
字段 | |
---|---|
shipmentIndex |
来源 |
isPickup |
如果为 true,则该访问对应于 |
visitRequestIndex |
|
startTime |
访问的开始时间。请注意,车辆可能会提前到达造访地点。时间与 时间戳采用 RFC3339 世界协调时间(UTC,即“祖鲁时”)格式,精确到纳秒,最多九个小数位。示例: |
loadDemands |
总访问加载需求,即运单和访问请求 包含一系列 |
detour |
由于在造访路线前造访过货物,以及因时间范围而可能需等待的时间,需要额外的绕行时间。如果访问是送餐,系统会根据相应的取货造访计算绕行时间,并且等于:
否则,它根据车辆
该时长以秒为单位,最多包含九个小数位,以“ |
shipmentLabel |
相应 |
visitLabel |
相应 |
转换
路线上两个事件之间的转换。请参阅 ShipmentRoute
的说明。
如果车辆没有 startLocation
和/或 endLocation
,则相应的行程指标为 0。
JSON 表示法 |
---|
{ "travelDuration": string, "travelDistanceMeters": number, "trafficInfoUnavailable": boolean, "delayDuration": string, "breakDuration": string, "waitDuration": string, "totalDuration": string, "startTime": string, "routePolyline": { object ( |
字段 | |
---|---|
travelDuration |
此过渡期间的旅行时长。 该时长以秒为单位,最多包含九个小数位,以“ |
travelDistanceMeters |
转换期间移动的距离。 |
trafficInfoUnavailable |
如果通过 |
delayDuration |
应用于此过渡的延迟时间总和。如果有,延迟从下一个事件(访问或车辆结束)前正好 该时长以秒为单位,最多包含九个小数位,以“ |
breakDuration |
此过渡期间发生的插播时间点的时长总和(如果有)。每个广告插播时间点的开始时间和时长的详细信息存储在 该时长以秒为单位,最多包含九个小数位,以“ |
waitDuration |
此转换期间的等待时间。等待时长对应闲置时间,且不包括暂停时间。另请注意,此等待时间可能会分成几个不连续的时间间隔。 该时长以秒为单位,最多包含九个小数位,以“ |
totalDuration |
转换的总时长(为方便起见提供)。它等于:
该时长以秒为单位,最多包含九个小数位,以“ |
startTime |
此转换的开始时间。 时间戳采用 RFC3339 世界协调时间(UTC,即“祖鲁时”)格式,精确到纳秒,最多九个小数位。示例: |
routePolyline |
过渡期间所遵循路线的编码多段线表示形式。仅当 |
vehicleLoads |
在此次过渡期间,对于此车辆的 第一次转换期间的负载是车辆路线的起始负载。然后,在每次访问之后,都会加上或减去访问的 包含一系列 |
EncodedPolyline
多段线的编码表示形式。如需详细了解多段线编码,请访问以下网址:https://developers.google.com/maps/documentation/utilities/polylinealgorithm:https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding。
JSON 表示法 |
---|
{ "points": string } |
字段 | |
---|---|
points |
表示多段线的编码点的字符串。 |
休息时间
表示广告插播执行的数据。
JSON 表示法 |
---|
{ "startTime": string, "duration": string } |
字段 | |
---|---|
startTime |
休息的开始时间。 时间戳采用 RFC3339 世界协调时间(UTC,即“祖鲁时”)格式,精确到纳秒,最多九个小数位。示例: |
duration |
休息时长。 该时长以秒为单位,最多包含九个小数位,以“ |