ShipmentRoute

차량의 경로는 시간 축을 따라 다음과 같이 분해할 수 있습니다 (방문 횟수는 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이 표시됩니다.

확대하면 TransitionVisit 중에 발생하는 상황은 다음과 같습니다.

---+-------------------------------------+-----------------------------+-->
   |           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를 정렬하는 방법은 다음과 같습니다.

  • 겹치지 않습니다.
  • 지연은 고유하며 다음 방문 (또는 차량 종료) 직전의 연속된 기간이어야 합니다. 따라서 지연 기간을 알면 시작 시간과 종료 시간을 알 수 있습니다.
  • 휴식 시간은 연속적이고 겹치지 않는 기간입니다. 대답은 각 휴식 시간의 시작 시간과 지속 시간을 지정합니다.
  • 이 전환 중에 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 (Visit)
    }
  ],
  "transitions": [
    {
      object (Transition)
    }
  ],
  "hasTrafficInfeasibilities": boolean,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "breaks": [
    {
      object (Break)
    }
  ],
  "metrics": {
    object (AggregatedMetrics)
  },
  "vehicleFullness": {
    object (VehicleFullness)
  },
  "routeCosts": {
    string: number,
    ...
  },
  "routeTotalCost": number
}
필드
vehicleIndex

integer

경로를 실행하는 차량으로, 소스 ShipmentModel의 색인으로 식별됩니다.

vehicleLabel

string

이 경로를 실행하는 차량의 라벨입니다. 지정된 경우 ShipmentModel.vehicles(vehicleIndex).label와 같습니다.

vehicleStartTime

string (Timestamp format)

차량이 경로를 시작하는 시간입니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

vehicleEndTime

string (Timestamp format)

차량이 경로를 완료하는 시간입니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

visits[]

object (Visit)

경로를 나타내는 방문의 순서가 지정된 시퀀스입니다. visits[i] 는 경로의 i번째 방문입니다. 이 필드가 비어 있으면 차량이 사용되지 않은 것으로 간주됩니다.

transitions[]

object (Transition)

경로의 전환 순서가 지정된 목록입니다.

hasTrafficInfeasibilities

boolean

OptimizeToursRequest.consider_road_traffic이 true로 설정된 경우 이 필드는 교통량 기반 이동 시간 추정치를 사용하여 경로 시간의 불일치가 예측됨을 나타냅니다. 방문 및 차량 시간 범위를 충족하면서도 첫 번째 방문 전, 마지막 방문 후 또는 방문 사이에 교통 상황에 따라 조정된 이동, 지연, 휴식을 완료할 시간이 부족할 수 있습니다. 예를 들면 다음과 같습니다.

  startTime(previous_visit) + duration(previous_visit) +
  travelDuration(previous_visit, next_visit) > startTime(next_visit)

트래픽으로 인해 이동 시간 추정치가 travelDuration(previous_visit, next_visit)로 증가하여 next_visit이 현재 시간대보다 늦게 도착할 수 있습니다. 또한 이동 시간 추정치 증가 및 방문 또는 휴식 시간대 제한으로 인해 휴식이 방문과 겹칠 수 있습니다.

routePolyline

object (EncodedPolyline)

경로의 인코딩된 폴리라인 표현입니다. 이 필드는 OptimizeToursRequest.populate_polylines이 true로 설정된 경우에만 채워집니다.

breaks[]

object (Break)

이 경로를 실행하는 차량에 예정된 휴식 시간입니다. breaks 시퀀스는 시간 간격을 나타내며 각 간격은 해당 startTime에서 시작하여 duration초 동안 지속됩니다.

metrics

object (AggregatedMetrics)

이 경로의 시간, 거리, 부하 측정항목입니다. AggregatedMetrics 필드는 맥락에 따라 모든 ShipmentRoute.transitions 또는 ShipmentRoute.visits에 대해 합산됩니다.

vehicleFullness

object (VehicleFullness)

VehicleFullness 필드를 사용하여 상한이 적용된 측정항목이 각 차량 한도에 얼마나 근접한지 계산합니다. 필드는 상한이 적용된 측정항목 필드 (예: AggregatedMetrics.travel_distance_meters)와 관련 차량 한도 (예: Vehicle.route_distance_limit) 간의 비율입니다.

실험적: 이 필드의 동작 또는 존재는 향후 변경될 수 있습니다.

routeCosts

map (key: string, value: number)

비용 관련 요청 필드로 분류된 경로의 비용입니다. 키는 입력 OptimizeToursRequest를 기준으로 하는 프로토 경로입니다(예: 'model.shipments.pickups.cost'). 값은 해당 비용 필드에서 생성된 총비용으로, 전체 경로에 걸쳐 집계됩니다. 즉, costs["model.shipments.pickups.cost"] 는 경로의 모든 수령 비용의 합계입니다. 모델에 정의된 모든 비용은 여기에 자세히 보고됩니다. 단, 2022년 1월부터 집계된 방식으로만 보고되는 TransitionAttributes와 관련된 비용은 예외입니다.

routeTotalCost

number

경로의 총비용입니다. 비용 맵의 모든 비용의 합계입니다.

방문

경로 중에 수행된 방문입니다. 이 방문은 Shipment의 수령 또는 배송에 해당합니다.

JSON 표현
{
  "shipmentIndex": integer,
  "isPickup": boolean,
  "visitRequestIndex": integer,
  "startTime": string,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "detour": string,
  "shipmentLabel": string,
  "visitLabel": string,
  "visitType": enum (VisitType),
  "injectedSolutionLocationToken": integer
}
필드
shipmentIndex

integer

소스 ShipmentModelshipments 필드 색인입니다.

isPickup

boolean

true인 경우 방문이 Shipment 수령에 해당합니다. 그렇지 않으면 배송에 해당합니다.

visitRequestIndex

integer

Shipment의 픽업 또는 배송 필드에 있는 VisitRequest의 색인입니다 (isPickup 참고).

startTime

string (Timestamp format)

방문이 시작된 시간입니다. 차량이 방문 위치에 이 시간보다 일찍 도착할 수 있습니다. 시간은 ShipmentModel와 일치합니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

loadDemands

map (key: string, value: object (Load))

배송 및 방문 요청 loadDemands의 합계인 총 방문 부하 수요입니다. 방문이 배송인 경우 값은 음수입니다. 수요는 Transition.loads와 동일한 유형으로 보고됩니다 (이 필드 참고).

detour

string (Duration format)

방문 전 경로에서 방문한 배송으로 인한 추가 우회 시간과 시간대로 인해 발생할 수 있는 대기 시간입니다. 방문이 배송인 경우 우회는 해당 수령 방문에서 계산되며 다음과 같습니다.

startTime(delivery) - startTime(pickup)
- (duration(pickup) + travel duration from the pickup location
to the delivery location).

그렇지 않으면 차량 startLocation에서 계산되며 다음과 같습니다.

startTime - vehicleStartTime - travel duration from
the vehicle's `startLocation` to the visit.

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.

shipmentLabel

string

Shipment에 지정된 경우 해당 Shipment.label의 사본입니다.

visitLabel

string

VisitRequest에 지정된 경우 해당 VisitRequest.label의 사본입니다.

visitType

enum (VisitType)

선택사항입니다. 방문 유형을 지정합니다. Visit.is_pickup 필드를 재정의합니다.

injectedSolutionLocationToken

integer

방문 위치에 관한 정보를 나타내는 불투명 토큰입니다.

이 필드는 이 방문에 대해 VisitRequest.avoid_u_turns가 true로 설정된 경우 또는 요청 OptimizeToursRequest에서 ShipmentModel.avoid_u_turns가 true로 설정된 경우 결과 경로의 방문에 채워질 수 있습니다.

실험 단계: 자세한 내용은 https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request를 참고하세요.

VisitType

방문이 수령인지, 배송인지, Stop 방문인지 나타냅니다. Stop 방문은 멀티모달 최적화가 사용 설정된 경우에만 사용됩니다.

열거형
VISIT_TYPE_UNSPECIFIED 지정되지 않은 방문 유형입니다.
PICKUP_SHIPMENT 방문은 배송 상품 수령에 해당합니다.
DELIVER_SHIPMENT 방문은 배송에 해당합니다.

전환

경로의 두 이벤트 간 전환입니다. ShipmentRoute 설명을 참고하세요.

차량에 startLocation 또는 endLocation이 없는 경우 해당 이동 측정항목은 0입니다.

JSON 표현
{
  "travelDuration": string,
  "travelDistanceMeters": number,
  "trafficInfoUnavailable": boolean,
  "delayDuration": string,
  "breakDuration": string,
  "waitDuration": string,
  "totalDuration": string,
  "startTime": string,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "routeToken": string,
  "vehicleLoads": {
    string: {
      object (VehicleLoad)
    },
    ...
  }
}
필드
travelDuration

string (Duration format)

이 전환 기간의 여행 기간입니다.

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.

travelDistanceMeters

number

전환 중에 이동한 거리입니다.

trafficInfoUnavailable

boolean

OptimizeToursRequest.consider_road_traffic를 통해 교통정보가 요청되었는데 Transition의 교통정보를 가져올 수 없는 경우 이 불리언이 true로 설정됩니다. 일시적일 수도 있고 (실시간 교통 서버의 드문 문제) 영구적일 수도 있습니다 (이 위치에 대한 데이터가 없음).

delayDuration

string (Duration format)

이 전환에 적용된 지연 시간의 합계입니다. 지연이 있는 경우 다음 이벤트 (방문 또는 차량 종료)가 시작되기 정확히 delayDuration초 전에 시작됩니다. TransitionAttributes.delay 페이지를 참고하세요.

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.

breakDuration

string (Duration format)

이 전환 중에 발생한 광고의 총 재생 시간입니다(있는 경우). 각 광고의 시작 시간과 재생 시간에 관한 세부정보는 ShipmentRoute.breaks에 저장됩니다.

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.

waitDuration

string (Duration format)

이 전환 중에 대기한 시간입니다. 대기 시간은 유휴 시간에 해당하며 휴식 시간은 포함되지 않습니다. 이 대기 시간은 연속되지 않는 여러 간격으로 나뉠 수 있습니다.

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.

totalDuration

string (Duration format)

편의를 위해 제공되는 전환의 총 지속 시간입니다. 다음과 같습니다.

  • 다음 방문 startTime (또는 마지막 전환인 경우 vehicleEndTime) - 이 전환의 startTime
  • ShipmentRoute.has_traffic_infeasibilities이 false인 경우 다음도 적용됩니다. `totalDuration = travelDuration + delayDuration`
  • breakDuration + waitDuration`.

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.

startTime

string (Timestamp format)

이 전환의 시작 시간입니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

routePolyline

object (EncodedPolyline)

전환 중에 따른 경로의 인코딩된 다중선 표현입니다. 이 필드는 populateTransitionPolylines이 true로 설정된 경우에만 채워집니다.

routeToken

string

출력 전용입니다. 탐색 중에 경로를 재구성하고 경로가 생성될 때 원래 의도를 따르기 위해 Navigation SDK에 전달할 수 있는 불투명 토큰입니다(경로 변경의 경우). 이 토큰을 불투명 blob으로 처리합니다. 서비스에서 정확히 동일한 경로를 반환하더라도 값이 변경될 수 있으므로 요청 간에 값을 비교하지 마세요. 이 필드는 populateTransitionPolylines이 true로 설정된 경우에만 채워집니다.

vehicleLoads

map (key: string, value: object (VehicleLoad))

이 전환 중에 차량이 로드됩니다. 이 차량의 Vehicle.load_limits에 표시되거나 이 경로에서 실행된 일부 배송에 0이 아닌 Shipment.load_demands이 있는 각 유형에 대해

첫 번째 전환 중의 적재량은 차량 경로의 시작 적재량입니다. 그런 다음 각 방문 후 방문의 loadDemands이 방문이 픽업인지 배송인지에 따라 다음 전환의 적재량에 추가되거나 차감됩니다.

EncodedPolyline

다중선의 인코딩된 표현입니다. 폴리라인 인코딩에 관한 자세한 내용은 https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding을 참고하세요.

JSON 표현
{
  "points": string
}
필드
points

string

다중선의 인코딩된 포인트를 나타내는 문자열입니다.

휴식 시간

광고 시점의 실행을 나타내는 데이터입니다.

JSON 표현
{
  "startTime": string,
  "duration": string
}
필드
startTime

string (Timestamp format)

휴식 시작 시간입니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

duration

string (Duration format)

휴식 시간입니다.

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.

VehicleFullness

VehicleFullness는 차량의 탑승률을 계산하는 측정항목입니다. 각 VehicleFullness 필드는 0~1이며, 상한이 적용된 측정항목 필드(예: AggregatedMetrics.travel_distance_meters)와 관련 차량 한도(예: Vehicle.route_distance_limit) 간의 비율로 계산됩니다(있는 경우). 그렇지 않으면 탑승률 비율이 설정되지 않은 상태로 유지됩니다. 한도가 0이면 필드가 1로 설정됩니다. 참고: 경로에 트래픽 불가능성이 적용되는 경우 일부 원시 탑승률 비율이 1.0을 초과할 수 있습니다(예: 차량이 거리 한도를 초과할 수 있음). 이러한 경우 탑승률 값을 1.0으로 제한합니다.

JSON 표현
{
  "maxFullness": number,
  "distance": number,
  "travelDuration": number,
  "activeDuration": number,
  "maxLoad": number,
  "activeSpan": number
}
필드
maxFullness

number

이 메시지의 다른 모든 필드의 최댓값입니다.

distance

number

AggregatedMetrics.travel_distance_metersVehicle.route_distance_limit의 비율입니다. Vehicle.route_distance_limit이 설정되지 않으면 이 필드가 설정되지 않습니다.

travelDuration

number

[AggregatedMetrics.travel_duration_seconds][] 와 Vehicle.travel_duration_limit의 비율입니다. Vehicle.travel_duration_limit이 설정되지 않으면 이 필드가 설정되지 않습니다.

activeDuration

number

[AggregatedMetrics.total_duration_seconds][] 와 Vehicle.route_duration_limit의 비율입니다. Vehicle.route_duration_limit이 설정되지 않으면 이 필드가 설정되지 않습니다.

maxLoad

number

모든 유형의 [AggregatedMetrics.max_load][] 와 각 Vehicle.load_limits 간의 최대 비율입니다. 모든 Vehicle.load_limits 필드가 설정되지 않은 경우 이 필드는 설정되지 않습니다.

activeSpan

number

특정 차량의 비율 (vehicleEndTime - vehicleStartTime) / (latestVehicleEndTime - earliestVehicleStartTime)입니다. 분모가 없으면 (ShipmentModel.global_end_time - ShipmentModel.global_start_time)이 대신 사용됩니다.