ניתן לפרק את המסלול של כלי הרכב, לאורך ציר הזמן, באופן הבא (אנו מניחים שיש 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
לסיום, כך ניתן לארגן את הנסיעות, ההפסקות, ה-Shift וה-WAIT במהלך מעבר.
- אין חפיפה ביניהן.
- ה-OAuth הוא ייחודי וחייב להיות פרק זמן מתמשך שממש לפני הביקור הבא (או לפני הסיום של הרכב). לכן מספיק לדעת את משך ההשהיה כדי לדעת מהן שעות ההתחלה והסיום.
- ה-breakS הם תקופות זמן רציפות שאינן חופפות. התשובה מציינת את שעת ההתחלה ואת משך הזמן של כל הפסקה.
- נסיעות ו-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[] |
רצף ביקורים מסודר שמייצג מסלול. ביקורים[i] הוא הביקור ה-i במסלול. אם השדה הזה ריק, הרכב ייחשב כרכב שלא בשימוש. |
transitions[] |
רשימה מסודרת של המעברים במסלול. |
hasTrafficInfeasibilities |
כשהערך של
סביר להניח שההגעה אל next_visit תתבצע מאוחר יותר מחלון הזמן הנוכחי, בגלל העלייה המשוערת בזמן הנסיעה |
routePolyline |
ייצוג הקו הפוליגוני המקודד של המסלול. השדה הזה יאוכלס רק אם המדיניות |
breaks[] |
נקבעו הפסקות לרכב שמבצע את המסלול הזה. הרצף |
metrics |
מדדים של משך הזמן, המרחק והטעינה במסלול הזה. סיכום השדות של |
routeCosts |
עלות המסלול, בחלוקה לפי שדות בקשה הקשורים לעלות. המפתחות הם נתיבים של תבניות אב, ביחס לקלט OptimizeToursRequest, למשל "model.shipments.pickups.cost". הערכים הם העלות הכוללת שנוצרה על ידי שדה העלות המתאים, שנצבר לאורך כל המסלול. במילים אחרות, העלויות ["model.shipments.pickups.cost"] הן הסכום של כל עלויות האיסוף לאורך המסלול. כל העלויות שמוגדרות במודל מדווחות כאן בפירוט, חוץ מהעלויות שקשורות למאפייני מעבר, שמדווחות רק באופן מצטבר החל מ-1 בינואר 2022. אובייקט שמכיל רשימה של |
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 |
משך ההפסקה. משך זמן בשניות עם עד תשע ספרות עשרוניות, המסתיים ב-' |