차량의 경로는 시간축을 따라 다음과 같이 분해할 수 있습니다(방문 횟수가 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
다음과 같이 구분됩니다.
- 차량 시작 및 종료, 각 방문의 시작 및 종료(도착 및 출발)와 같은 '정확한 이벤트' 몇 초 안에 발생합니다.
- '시간 간격'(예: 방문 자체, 방문 간 전환) 시간 간격의 길이가 0인 경우(즉, 시작과 종료가 같은 초에 발생하는 경우)도 있지만, 대부분의 경우 길이가 양수입니다.
불변:
- 방문이 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
마지막으로, 전환 중에 여행, 휴식, 지연, 대기를 조정하는 방법은 다음과 같습니다.
- 겹치지 않습니다.
- 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 'Zulu' 형식의 타임스탬프입니다(나노초 단위, 소수점 이하 9자리). 예를 들면 |
vehicleEndTime |
차량이 경로를 완료하는 시간입니다. RFC3339 UTC 'Zulu' 형식의 타임스탬프입니다(나노초 단위, 소수점 이하 9자리). 예를 들면 |
visits[] |
경로를 나타내는 방문의 순서가 지정된 순서로서 방문수[i] 는 경로의 i번째 방문입니다. 이 필드가 비어 있으면 차량이 사용되지 않는 것으로 간주됩니다. |
transitions[] |
경로의 순서가 지정된 전환 목록입니다. |
hasTrafficInfeasibilities |
교통정보로 인해 예상 이동 시간( |
routePolyline |
경로의 인코딩된 폴리라인 표현입니다. 이 필드는 |
breaks[] |
이 경로를 운행하는 차량에 예정된 휴식 시간입니다. |
metrics |
이 경로에 대한 소요 시간, 거리, 부하 측정항목입니다. |
routeCosts |
비용 관련 요청 필드별로 나눠진 경로의 비용입니다. 키는 입력 OptimizeToursRequest를 기준으로 한 프로토 경로(예: 'model.shipments.pickups.cost')이고 값은 전체 경로에 대해 집계된 해당 비용 필드에서 생성된 총 비용입니다. 즉, costs["model.shipments.pickups.cost"]는 경로의 모든 수령 비용의 합계입니다. 모델에 정의된 모든 비용은 여기에서 자세히 보고됩니다. 단, 2022년 1월 기준으로 집계 방식으로만 보고되는 TransitionAttributes 관련 비용은 예외입니다. |
routeTotalCost |
경로의 총 비용입니다. 비용 맵의 모든 비용 합계입니다. |
방문
경로 중에 실행된 방문입니다. 이 방문은 Shipment
의 수령 또는 배송에 해당합니다.
JSON 표현 |
---|
{
"shipmentIndex": integer,
"isPickup": boolean,
"visitRequestIndex": integer,
"startTime": string,
"loadDemands": {
string: {
object ( |
필드 | |
---|---|
shipmentIndex |
소스 |
isPickup |
이 값이 true이면 방문이 |
visitRequestIndex |
|
startTime |
방문이 시작되는 시간입니다. 차량이 이보다 일찍 방문 위치에 도착할 수 있습니다. 시간은 RFC3339 UTC 'Zulu' 형식의 타임스탬프입니다(나노초 단위, 소수점 이하 9자리). 예를 들면 |
loadDemands |
배송 및 방문 요청 |
detour |
방문 전에 경로에서 방문한 배송 상품과 시간대에서 발생할 수 있는 대기 시간으로 인한 추가 우회 시간입니다. 방문이 배송인 경우 우회 경로는 해당하는 수령 방문에서 계산되며 다음과 같습니다.
그 외의 경우에는 차량
소수점 아래가 최대 9자리까지이고 ' |
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 |
이 전환 중의 이동 시간입니다. 소수점 아래가 최대 9자리까지이고 ' |
travelDistanceMeters |
전환 중 이동한 거리입니다. |
trafficInfoUnavailable |
|
delayDuration |
이 전환에 적용된 지연 시간의 합계입니다. 지연 시간이 있는 경우 다음 이벤트 (방문 또는 차량 종료) 정확히 소수점 아래가 최대 9자리까지이고 ' |
breakDuration |
이 전환 중에 발생한 중단 시간의 합계입니다(있는 경우). 각 휴식 시간의 시작 시간 및 길이에 관한 세부정보는 소수점 아래가 최대 9자리까지이고 ' |
waitDuration |
전환 중에 대기한 시간입니다. 대기 시간은 유휴 시간에 해당하며 휴식 시간을 포함하지 않습니다. 또한 이 대기 시간은 연속되지 않은 여러 간격으로 나뉨을 수 있습니다. 소수점 아래가 최대 9자리까지이고 ' |
totalDuration |
편의상 제공되는 총 전환 기간입니다. 다음과 같습니다.
소수점 아래가 최대 9자리까지이고 ' |
startTime |
이 전환의 시작 시간입니다. RFC3339 UTC 'Zulu' 형식의 타임스탬프입니다(나노초 단위, 소수점 이하 9자리). 예를 들면 |
routePolyline |
전환 중에 따라간 경로의 인코딩된 폴리라인 표현입니다. 이 필드는 |
routeToken |
출력 전용입니다. Navigation SDK에 전달하여 내비게이션 중에 경로를 재구성하고 경로를 변경하는 경우 경로가 생성될 때의 원래 의도를 준수할 수 있는 불투명 토큰입니다. 이 토큰을 불투명 BLOB로 취급합니다. 서비스가 정확히 동일한 경로를 반환하더라도 값이 변경될 수 있으므로 요청 간에 값을 비교하지 마세요. 이 필드는 |
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 'Zulu' 형식의 타임스탬프입니다(나노초 단위, 소수점 이하 9자리). 예를 들면 |
duration |
휴식 시간입니다. 소수점 아래가 최대 9자리까지이고 ' |