ShipmentRoute

Bạn có thể phân ly tuyến đường của một xe dọc theo trục thời gian như sau (giả sử có n lượt truy cập):

  |            |            |          |       |  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

Xin lưu ý rằng chúng ta phân biệt giữa:

  • "sự kiện đúng giờ", chẳng hạn như thời điểm bắt đầu và kết thúc của xe cũng như thời điểm bắt đầu và kết thúc của mỗi lượt truy cập (còn gọi là thời điểm đến và thời điểm rời đi). Các sự kiện này xảy ra tại một giây nhất định.
  • "khoảng thời gian", chẳng hạn như chính lượt truy cập và quá trình chuyển đổi giữa các lượt truy cập. Mặc dù đôi khi khoảng thời gian có thể có thời lượng bằng 0, tức là bắt đầu và kết thúc cùng một giây, nhưng thường thì khoảng thời gian có thời lượng dương.

Biến không đổi:

  • Nếu có n lượt truy cập, thì sẽ có n+1 lượt chuyển đổi.
  • Một lượt truy cập luôn được bao quanh bởi một lượt chuyển đổi trước đó (cùng chỉ mục) và một lượt chuyển đổi sau đó (chỉ mục + 1).
  • Quá trình khởi động xe luôn đi kèm với quá trình chuyển đổi #0.
  • Phần kết thúc của xe luôn đứng trước chuyển đổi #n.

Khi phóng to, đây là những gì xảy ra trong 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

Cuối cùng, sau đây là cách sắp xếp TRAVEL (DI CHUYỂN), BREAKS (NGỪNG), DELAY (CHỜ) và WAIT (CHỜ) trong quá trình chuyển đổi.

  • Các lớp này không trùng lặp.
  • DELAY là duy nhất và phải là một khoảng thời gian liên tục ngay trước lượt truy cập tiếp theo (hoặc thời điểm kết thúc xe). Do đó, bạn chỉ cần biết thời lượng trễ để biết thời gian bắt đầu và kết thúc của trễ.
  • BREAKS là các khoảng thời gian liền kề, không trùng lặp. Phản hồi này chỉ định thời gian bắt đầu và thời lượng của mỗi khoảng nghỉ.
  • TRAVEL và WAIT là "có thể được ưu tiên": chúng có thể bị gián đoạn nhiều lần trong quá trình chuyển đổi này. Ứng dụng có thể giả định rằng hành trình diễn ra "càng sớm càng tốt" và "thời gian chờ" sẽ lấp đầy thời gian còn lại.

Ví dụ (phức tạp):

                               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     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
Biểu diễn dưới dạng 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)
  },
  "routeCosts": {
    string: number,
    ...
  },
  "routeTotalCost": number
}
Trường
vehicleIndex

integer

Xe thực hiện tuyến đường, được xác định bằng chỉ mục của xe trong nguồn ShipmentModel.

vehicleLabel

string

Nhãn của xe thực hiện tuyến đường này, bằng ShipmentModel.vehicles(vehicleIndex).label nếu được chỉ định.

vehicleStartTime

string (Timestamp format)

Thời gian xe bắt đầu hành trình.

Dấu thời gian ở định dạng "Zulu" RFC3339 UTC, có độ phân giải nano giây và tối đa 9 chữ số thập phân. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

vehicleEndTime

string (Timestamp format)

Thời gian xe hoàn tất tuyến đường.

Dấu thời gian ở định dạng "Zulu" RFC3339 UTC, có độ phân giải nano giây và tối đa 9 chữ số thập phân. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

visits[]

object (Visit)

Trình tự các lượt truy cập theo thứ tự đại diện cho một tuyến đường. visits[i] là lượt truy cập thứ i trong tuyến đường. Nếu trường này trống, thì xe sẽ được coi là không sử dụng.

transitions[]

object (Transition)

Danh sách các hiệu ứng chuyển đổi theo thứ tự cho tuyến đường.

hasTrafficInfeasibilities

boolean

Khi OptimizeToursRequest.consider_road_traffic được đặt thành true, trường này cho biết rằng sự không nhất quán về thời gian tuyến đường được dự đoán bằng cách sử dụng thông tin ước tính về thời gian di chuyển dựa trên lưu lượng truy cập. Có thể không đủ thời gian để hoàn tất hành trình đã điều chỉnh theo lưu lượng truy cập, độ trễ và thời gian nghỉ giữa các lượt truy cập, trước lượt truy cập đầu tiên hoặc sau lượt truy cập cuối cùng, trong khi vẫn đáp ứng khoảng thời gian truy cập và thời gian của xe. Ví dụ:

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

Thời điểm đến next_visit có thể trễ hơn khung thời gian hiện tại do thời gian di chuyển ước tính travelDuration(previous_visit, next_visit) tăng lên do lưu lượng truy cập. Ngoài ra, thời gian nghỉ có thể bị buộc phải trùng lặp với một lượt truy cập do thời gian di chuyển ước tính tăng lên và các quy định hạn chế về thời gian truy cập hoặc thời gian nghỉ.

routePolyline

object (EncodedPolyline)

Hình nhiều đường đã mã hoá đại diện cho tuyến đường. Trường này chỉ được điền nếu bạn đặt OptimizeToursRequest.populate_polylines thành true.

breaks[]

object (Break)

Thời gian nghỉ theo lịch cho xe thực hiện tuyến đường này. Trình tự breaks biểu thị các khoảng thời gian, mỗi khoảng thời gian bắt đầu tại startTime tương ứng và kéo dài duration giây.

metrics

object (AggregatedMetrics)

Các chỉ số về thời lượng, quãng đường và tải cho tuyến đường này. Các trường của AggregatedMetrics được cộng trên tất cả ShipmentRoute.transitions hoặc ShipmentRoute.visits, tuỳ thuộc vào ngữ cảnh.

routeCosts

map (key: string, value: number)

Chi phí của tuyến đường, được phân tích theo các trường yêu cầu liên quan đến chi phí. Các khoá là đường dẫn proto, tương ứng với OptimizeToursRequest đầu vào, ví dụ: "model.shipments.pickups.cost" và các giá trị là tổng chi phí do trường chi phí tương ứng tạo ra, được tổng hợp trên toàn bộ tuyến đường. Nói cách khác, costs["model.shipments.pickups.cost"] là tổng chi phí lấy hàng trên tuyến đường. Tất cả chi phí được xác định trong mô hình đều được báo cáo chi tiết tại đây, ngoại trừ chi phí liên quan đến TransitionAttributes chỉ được báo cáo theo cách tổng hợp kể từ ngày 1/1/2022.

routeTotalCost

number

Tổng chi phí của tuyến đường. Tổng tất cả chi phí trong bản đồ chi phí.

Truy cập

Một lượt truy cập được thực hiện trong một tuyến đường. Lượt truy cập này tương ứng với một lượt lấy hàng hoặc giao hàng của Shipment.

Biểu diễn dưới dạng JSON
{
  "shipmentIndex": integer,
  "isPickup": boolean,
  "visitRequestIndex": integer,
  "startTime": string,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "detour": string,
  "shipmentLabel": string,
  "visitLabel": string
}
Trường
shipmentIndex

integer

Chỉ mục của trường shipments trong ShipmentModel nguồn.

isPickup

boolean

Nếu đúng, lượt truy cập sẽ tương ứng với một lượt lấy hàng của Shipment. Nếu không, mã này sẽ tương ứng với một lượt phân phối.

visitRequestIndex

integer

Chỉ mục của VisitRequest trong trường đến lấy hàng hoặc giao hàng của Shipment (xem isPickup).

startTime

string (Timestamp format)

Thời gian bắt đầu lượt truy cập. Xin lưu ý rằng xe có thể đến sớm hơn thời gian này tại địa điểm ghé thăm. Thời gian nhất quán với ShipmentModel.

Dấu thời gian ở định dạng "Zulu" RFC3339 UTC, có độ phân giải nano giây và tối đa 9 chữ số thập phân. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

loadDemands

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

Tổng nhu cầu tải lượt truy cập là tổng số lô hàng và yêu cầu truy cập loadDemands. Các giá trị này sẽ âm nếu lượt truy cập là một lượt phân phối. Nhu cầu được báo cáo cho cùng một loại với Transition.loads (xem trường này).

detour

string (Duration format)

Thời gian rẽ đường bổ sung do các lô hàng đã được ghé thăm trên tuyến đường trước khi ghé thăm và thời gian chờ có thể xảy ra do các khung thời gian. Nếu lượt ghé thăm là lượt giao hàng, thì quãng đường vòng sẽ được tính từ lượt ghé thăm đến lấy hàng tương ứng và bằng:

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

Nếu không, giá trị này được tính từ startLocation của xe và bằng:

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

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

shipmentLabel

string

Bản sao của Shipment.label tương ứng, nếu được chỉ định trong Shipment.

visitLabel

string

Bản sao của VisitRequest.label tương ứng, nếu được chỉ định trong VisitRequest.

Hiệu ứng chuyển cảnh

Chuyển đổi giữa hai sự kiện trên tuyến đường. Xem nội dung mô tả về ShipmentRoute.

Nếu xe không có startLocation và/hoặc endLocation, thì các chỉ số tương ứng về hành trình sẽ là 0.

Biểu diễn dưới dạng 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)
    },
    ...
  }
}
Trường
travelDuration

string (Duration format)

Thời gian di chuyển trong quá trình chuyển đổi này.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

travelDistanceMeters

number

Quãng đường đã đi trong quá trình chuyển đổi.

trafficInfoUnavailable

boolean

Khi lưu lượng truy cập được yêu cầu thông qua OptimizeToursRequest.consider_road_traffic và không thể truy xuất thông tin lưu lượng truy cập cho Transition, boolean này được đặt thành true. Tình trạng này có thể là tạm thời (hiếm khi xảy ra sự cố trong máy chủ lưu trữ dữ liệu giao thông theo thời gian thực) hoặc vĩnh viễn (không có dữ liệu cho vị trí này).

delayDuration

string (Duration format)

Tổng thời lượng độ trễ áp dụng cho quá trình chuyển đổi này. Nếu có, độ trễ sẽ bắt đầu chính xác delayDuration giây trước sự kiện tiếp theo (lượt truy cập hoặc kết thúc xe). Vui lòng xem TransitionAttributes.delay.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

breakDuration

string (Duration format)

Tổng thời lượng của các khoảng nghỉ xảy ra trong quá trình chuyển đổi này (nếu có). Thông tin chi tiết về thời gian bắt đầu và thời lượng của mỗi khoảng nghỉ được lưu trữ trong ShipmentRoute.breaks.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

waitDuration

string (Duration format)

Thời gian chờ trong quá trình chuyển đổi này. Thời gian chờ tương ứng với thời gian rảnh và không bao gồm thời gian nghỉ. Ngoài ra, hãy lưu ý rằng thời gian chờ này có thể được chia thành nhiều khoảng không liên tục.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

totalDuration

string (Duration format)

Tổng thời lượng của quá trình chuyển đổi, được cung cấp để thuận tiện. Giá trị này bằng:

  • lượt truy cập tiếp theo startTime (hoặc vehicleEndTime nếu đây là lượt chuyển đổi cuối cùng) – startTime của lượt chuyển đổi này;
  • nếu ShipmentRoute.has_traffic_infeasibilities là sai, thì điều sau đây cũng đúng: `totalDuration = travelDuration + delayDuration
  • breakDuration + waitDuration`.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".

startTime

string (Timestamp format)

Thời gian bắt đầu chuyển đổi này.

Dấu thời gian ở định dạng "Zulu" RFC3339 UTC, có độ phân giải nano giây và tối đa 9 chữ số thập phân. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

routePolyline

object (EncodedPolyline)

Hình nhiều đường được mã hoá thể hiện tuyến đường được tuân theo trong quá trình chuyển đổi. Trường này chỉ được điền nếu bạn đặt populateTransitionPolylines thành true.

routeToken

string

Chỉ có đầu ra. Mã thông báo mờ có thể được truyền đến Navigation SDK để tái tạo tuyến đường trong quá trình điều hướng và trong trường hợp định tuyến lại, hãy tuân thủ ý định ban đầu khi tạo tuyến đường. Xem mã thông báo này là một blob mờ. Đừng so sánh giá trị của thuộc tính này trên các yêu cầu vì giá trị của thuộc tính này có thể thay đổi ngay cả khi dịch vụ trả về cùng một tuyến. Trường này chỉ được điền nếu bạn đặt populateTransitionPolylines thành true.

vehicleLoads

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

Tải xe trong quá trình chuyển đổi này, cho mỗi loại xuất hiện trong Vehicle.load_limits của xe này hoặc có Shipment.load_demands khác 0 trên một số lô hàng được thực hiện trên tuyến này.

Tải trong quá trình chuyển đổi đầu tiên là tải bắt đầu của tuyến đường xe. Sau đó, sau mỗi lượt truy cập, loadDemands của lượt truy cập sẽ được cộng hoặc trừ để tải lượt chuyển đổi tiếp theo, tuỳ thuộc vào việc lượt truy cập là lượt đến lấy hàng hay lượt giao hàng.

EncodedPolyline

Biểu diễn được mã hoá của một đường đa tuyến. Bạn có thể xem thêm thông tin về việc mã hoá đường đa tuyến tại đây: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.

Biểu diễn dưới dạng JSON
{
  "points": string
}
Trường
points

string

Chuỗi đại diện cho các điểm được mã hoá của đa tuyến.

Nghỉ giải lao

Dữ liệu đại diện cho việc thực thi một điểm ngắt.

Biểu diễn dưới dạng JSON
{
  "startTime": string,
  "duration": string
}
Trường
startTime

string (Timestamp format)

Thời gian bắt đầu nghỉ giải lao.

Dấu thời gian ở định dạng "Zulu" RFC3339 UTC, có độ phân giải nano giây và tối đa 9 chữ số thập phân. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

duration

string (Duration format)

Thời lượng của một khoảng nghỉ.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, kết thúc bằng "s". Ví dụ: "3.5s".