- ייצוג ב-JSON
- משלוח
- VisitRequest
- LatLng
- Waypoint
- מיקום
- TimeWindow
- רכב
- TravelMode
- RouteModifiers
- VehicleInfo
- TrailerInfo
- HazardousGoodsType
- UnloadingPolicy
- LoadLimit
- מרווח
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- DurationDistanceMatrix
- שורה
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
מודל משלוח מכיל קבוצה של משלוחים שצריך לבצע באמצעות קבוצה של כלי רכב, תוך צמצום העלות הכוללת, שהיא הסכום של:
- העלות של ניתוב כלי הרכב (סכום של העלות לכל זמן כולל, העלות לכל זמן נסיעה והעלות הקבועה בכל כלי הרכב).
- את הקנסות על משלוחים שלא בוצעו.
- עלות משך הזמן הגלובלי של המשלוחים
| ייצוג JSON |
|---|
{ "shipments": [ { object ( |
| שדות | |
|---|---|
shipments[] |
קבוצת משלוחים שצריך לבצע במודל. |
vehicles[] |
קבוצה של כלי רכב שאפשר להשתמש בהם לביצוע ביקורים. |
globalStartTime |
שעת ההתחלה ושעת הסיום הגלובלית של המודל: לא ניתן להתייחס לשעות מחוץ לטווח הזה כחוקיות. טווח הזמן של המודל חייב להיות קצר משנה. כלומר, הטווח של כשמשתמשים בשדות חותמת זמן בפורמט 'Zulu' בפורמט RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות אחרי הנקודה. דוגמאות: |
globalEndTime |
אם המדיניות לא מוגדרת, ייעשה שימוש ב-00:00:00 UTC , 1 בינואר 1971 (כלומר שניות: 31536000, ננו: 0) כברירת מחדל. חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
globalDurationCostPerHour |
'משך הזמן הגלובלי' של התוכנית הכוללת הוא ההפרש בין שעת ההתחלה היעילה המוקדמת ביותר לשעת הסיום היעילה האחרונה של כל הרכבים. המשתמשים יכולים להקצות עלות לשעה לכמות הזו כדי לנסות לבצע אופטימיזציה להשגת השלמת המשימה המהירה ביותר, לדוגמה. העלות הזו צריכה להיות באותה יחידה כמו |
durationDistanceMatrices[] |
מציין את מטריצות משך הזמן והמרחקים שמשמשות במודל. אם השדה הזה ריק, המערכת תשתמש במרחקים גיאודזיים או במפות Google, בהתאם לערך בשדה דוגמאות לשימוש:
|
durationDistanceMatrixSrcTags[] |
תגים המגדירים את המקורות של מטריצות משך הזמן והמרחק; התגים תואמים ל- |
durationDistanceMatrixDstTags[] |
תגים המגדירים את היעדים של מטריצות משך הזמן והמרחק; התגים תואמים ל- |
transitionAttributes[] |
מאפייני מעבר שנוספו למודל. |
shipmentTypeIncompatibilities[] |
קבוצות של shipment_types לא תואמים (ראו |
shipmentTypeRequirements[] |
מערכי של דרישות |
precedenceRules[] |
קבוצת כללי עדיפות שצריך לאכוף במודל. |
maxActiveVehicles |
מגבילה את המספר המקסימלי של כלי רכב פעילים. רכב נחשב לפעיל אם בוצעה בו לפחות משלוח אחד במסלול שלו. אפשר להשתמש באפשרות הזו כדי להגביל את מספר המסלולים במקרה שיש פחות נהגים מכלי רכב, וכי צי הרכבים הוא הטרוגני. לאחר מכן המערכת תבחר את קבוצת המשנה של כלי הרכב שהכי מתאימים. חייב להיות חיובי לחלוטין. |
משלוח
המשלוח של פריט אחד, מאחד מאירועי האיסוף שלו ועד לאחד מאירועי המסירה שלו. כדי שהמשלוח ייחשב כבוצע, הרכב הייחודי צריך לבקר באחד מנקודות האיסוף שלו (ולצמצם את נפחי הקיבולת הפנויים שלו בהתאם) ולאחר מכן לבקר באחד ממיקומי המשלוח, וכך להגדיל מחדש את הקיבולת הפנויה שלו בהתאם.
| ייצוג ב-JSON |
|---|
{ "displayName": string, "pickups": [ { object ( |
| שדות | |
|---|---|
displayName |
שם התצוגה שהמשתמש הגדיר למשלוח. הוא יכול להכיל עד 63 תווים ויכול להשתמש בתווי UTF-8. |
pickups[] |
קבוצה של חלופות לאיסוף המשוכות למשלוח. אם לא צוין מיקום, הרכב צריך להגיע רק למיקום שמתאים להעברות. |
deliveries[] |
קבוצה של אפשרויות משלוח חלופיות שקשורות למשלוח. אם לא מציינים זאת, הרכב צריך לבקר רק במיקום שתואם לאיסוף עצמי. |
loadDemands |
יש לטעון את הדרישות של המשלוח (לדוגמה, משקל, נפח, מספר המשטחים וכו'). המפתחות במפה צריכים להיות מזהים שמתארים את סוג העומס המתאים, רצוי שגם יחד עם היחידות. לדוגמה: 'weight_kg', 'volume_gallons', 'pallet_count' וכו'. אם מפתח מסוים לא מופיע במפה, העומס התואם נחשב כ-null. אובייקט שמכיל רשימה של זוגות |
allowedVehicleIndices[] |
קבוצת כלי הרכב שיכולים לבצע את המשלוח הזה. אם השדה ריק, כל כלי הרכב יכולים לבצע את הפעולה. הרכבים נכללים באינדקס שלהם ברשימה |
costsPerVehicle[] |
העלות שנצברת כשהמשלוח הזה נמסר על ידי כל רכב. אם צוין, הוא צריך להכיל EITHER:
העלויות האלה חייבות להיות באותה יחידה של |
costsPerVehicleIndices[] |
מדדים של כלי הרכב שעליהם חל |
pickupToDeliveryAbsoluteDetourLimit |
משך הזמן המרבי המוחלט של הסטייה מהמסלול בהשוואה לנתיב הקצר ביותר מהאיסוף אל המשלוח. אם יצוין, הערך חייב להיות חיובי, והמשלוח חייב לכלול לפחות איסוף ומשלוח. לדוגמה, נניח ש-t הוא הזמן הקצר ביותר שנדרש כדי לעבור מאפשרות האיסוף שנבחרה ישירות לאפשרות המסירה שנבחרה. לאחר מכן, אם מגדירים אכיפה של אם ציינתם מגבלות יחסיות ומגבלות מוחלטות על אותו משלוח, המערכת תשתמש במגבלה המגבילה יותר לכל צמד אפשרי של איסוף/מסירה. החל מאוקטובר 2017, יש תמיכה במסלולי עקיפה רק כשמשך הנסיעה לא תלוי בסוג הרכב. משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
pickupToDeliveryTimeLimit |
מציינת את משך הזמן המקסימלי מתחילת האיסוף ועד תחילת המשלוח של משלוח. אם יצוין, הערך חייב להיות חיובי, והמשלוח חייב לכלול לפחות איסוף ומשלוח. הזמן הזה לא תלוי בחלופות שנבחרו לאיסוף ולמשלוח, או במהירות הרכב. ניתן לציין זאת לצד מגבלות מקסימליות של עקיפה: הפתרון יתייחס לשני המפרטים. משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
shipmentType |
מחרוזת שאינה ריקה שמציינת "סוג" למשלוח הזה. אפשר להשתמש בתכונה הזו כדי להגדיר חוסר תאימות או דרישות בין שונה מ- |
label |
מציינת תווית למשלוח הזה. התווית הזו מדווחת בתגובה בשדה |
ignore |
אם הערך הוא True, אפשר לדלג על המשלוח הזה, אבל לא להחיל התעלמות משליחה גורמת לשגיאת אימות אם יש מותר להתעלם משליחה שמתבצעת ב- |
penaltyCost |
אם המשלוח לא יושלם, העונש הזה יתווסף לעלות הכוללת של הנתיבים. משלוח נחשב כסגור אם מתבצעת ביקור באחת מהאפשרויות לאיסוף ולמסירה. העלות עשויה לבוא לידי ביטוי באותה יחידה שמשמשת את כל השדות האחרים הקשורים לעלות במודל, והיא חייבת להיות חיובית. חשוב: אם לא מציינים את הקנס הזה, הוא נחשב כקנס ללא הגבלת זמן, כלומר חובה להשלים את המשלוח. |
pickupToDeliveryRelativeDetourLimit |
מציינת את זמן המעקף היחסי המקסימלי בהשוואה לנתיב הקצר ביותר מהאיסוף ועד למשלוח. אם יצוין, הערך חייב להיות חיובי, והמשלוח חייב לכלול לפחות איסוף ומשלוח. לדוגמה, נניח ש-t הוא הזמן הקצר ביותר שנדרש כדי לעבור מאפשרות האיסוף שנבחרה ישירות לאפשרות המסירה שנבחרה. לאחר מכן, אם מגדירים אכיפה של אם צוינו מגבלות יחסיות ומוחלטות באותה משלוח, המערכת תשתמש במגבלה המחמירה יותר לכל צמד אפשרי של איסוף/מסירה. נכון ל-2017/10, אפשר להשתמש במעקפים רק כאשר משך הנסיעה לא תלוי בכלי רכב. |
VisitRequest
בקשה לביקור שאפשר לבצע ברכב: יש לה מיקום גיאוגרפי (או שניים, ראו בהמשך), שעות פתיחה וסגירה שמיוצגות על ידי חלונות זמן ומשך זמן השירות (הזמן שהרכב נמצא במקום לאחר שהוא הגיע לאיסוף או להעברת מוצרים).
| ייצוג JSON |
|---|
{ "arrivalLocation": { object ( |
| שדות | |
|---|---|
arrivalLocation |
המיקום הגיאוגרפי שאליו הרכב הגיע במהלך ביצוע |
arrivalWaypoint |
ציון הדרך שאליו הרכב מגיע במהלך ביצוע |
departureLocation |
המיקום הגיאוגרפי שבו הרכב יוצא לאחר השלמת ה |
departureWaypoint |
נקודת הציון שממנה הרכב יוצא אחרי השלמת ה- |
tags[] |
מציינת תגים שמצורפים לבקשת הביקור. אסור להשתמש במחרוזות ריקות או כפולות. |
timeWindows[] |
חלונות זמן שמגבילים את שעת ההגעה לביקור. לתשומת ליבכם: כלי רכב עשוי לצאת מחוץ לחלון הזמן של שעת ההגעה, כלומר שעת ההגעה + משך הנסיעה לא חייבים להיות בתוך חלון זמן. אם הרכב יגיע לפני כאשר חסר חלונות הזמן חייבים להיות נפרדים, כלומר חלון זמן אחד לא יכול להיות חופף לחלון זמן אחר או להיות צמוד אליו, והם חייבים להיות בסדר עולה. אפשר להגדיר את |
duration |
משך הביקור, כלומר הזמן שחלף מהגעת הרכב עד ליציאה שלו (צריך להוסיף את זמן ההמתנה האפשרי, ראו משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
cost |
עלות השירות של בקשת הביקור הזו במסלול לרכב. כך אפשר לשלם עלויות שונות לכל אחת מהאפשרויות החלופיות לאיסוף או למשלוח של משלוח. העלות הזו חייבת להיות באותה יחידה של |
loadDemands |
דרישות העומס של בקשת הביקור הזו. זה בדיוק כמו השדה אובייקט שמכיל רשימה של |
visitTypes[] |
מציין את סוגי הביקורים. אפשר להשתמש בנתון הזה כדי להקצות זמן נוסף שנדרש לרכב כדי להשלים את הביקור הזה (ראו סוג מסוים יכול להופיע רק פעם אחת. |
label |
תווית של |
LatLng
אובייקט שמייצג צמד קואורדינטות של רוחב וקו אורך. הוא מופיע כצמד של מספרים שלמים (double) שמייצגים מעלות של קו רוחב ומעלות של קו אורך. האובייקט חייב לעמוד ב תקן WGS84, אלא אם צוין אחרת. הערכים חייבים להיות בטווח נורמלי.
| ייצוג JSON |
|---|
{ "latitude": number, "longitude": number } |
| שדות | |
|---|---|
latitude |
קו הרוחב במעלות. הוא חייב להיות בטווח [-90.0, +90.0]. |
longitude |
קו האורך במעלות. הוא חייב להיות בטווח [-180.0, +180.0]. |
נקודת ציון
כולל ציון דרך. נקודות ציון מציינות את מיקומי ההגעה והיציאה של VisitRequests, ואת מיקומי ההתחלה והסיום של כלי הרכב.
| ייצוג JSON |
|---|
{ "sideOfRoad": boolean, // Union field |
| שדות | |
|---|---|
sideOfRoad |
זה שינוי אופציונלי. מציין שהמיקום של נקודת הציון הזו מיועד להעדפה של כלי הרכב לעצור בצד מסוים של הכביש. כשמגדירים את הערך הזה, המסלול עובר דרך המיקום כדי שהרכב יוכל לעצור בצד הכביש שאליו נוטה המיקום ממרכז הכביש. האפשרות הזו לא פועלת במצב הנסיעה 'הליכה'. |
שדה איחוד location_type. דרכים שונות לייצוג מיקום. location_type יכול להיות רק אחת מהאפשרויות הבאות: |
|
location |
נקודה שמצוינת באמצעות קואורדינטות גיאוגרפיות, כולל כותרת אופציונלית. |
placeId |
מזהה המקום של נקודת העניין המשויך לציון הדרך. |
מיקום
כולל מיקום (נקודה גיאוגרפית וכותרת אופציונלית).
| ייצוג ב-JSON |
|---|
{
"latLng": {
object ( |
| שדות | |
|---|---|
latLng |
הקואורדינטות הגיאוגרפיות של ציון הדרך. |
heading |
כיוון המצפן שמשויך לכיוון של זרימת התנועה. ערך זה משמש לציון צד הדרך שישמש לאיסוף ושחרור. ערכי כותרת יכולים להיות בין 0 ל-360, כאשר 0 מציין כותרת לצפון, כאשר 90 מציין כותרת לכיוון מזרח וכדומה. |
TimeWindow
חלונות הזמן מגבילים את מועדי האירוע, כמו שעת ההגעה לביקור או שעות ההתחלה והסיום של הרכב.
גבולות קשיחים של חלון הזמן, startTime ו-endTime, אוכפים את השעה המוקדמת ביותר ואת השעה המאוחרת ביותר של האירוע, כך ש-startTime <= event_time <=
endTime. הגבול התחתון של חלון הזמן הרך, softStartTime, מבטא העדפה שהאירוע יתרחש בתאריך softStartTime או אחריו, על ידי צבירת עלות ביחס לפרק הזמן לפני האירוע softStartTime. הגבול העליון של חלון הזמן הרך, softEndTime, מבטא העדפה שהאירוע יתרחש בתאריך softEndTime או לפניו, על ידי צבירת עלות ביחס למשך הזמן שאחרי softEndTime האירוע. startTime, endTime, softStartTime ו-softEndTime צריכים לעמוד במגבלות הזמן הגלובליות (ראו ShipmentModel.global_start_time ו-ShipmentModel.global_end_time) ועליהם לפעול בהתאם לתנאים הבאים:
0 <= `startTime` <= `softStartTime` <= `endTime` and
0 <= `startTime` <= `softEndTime` <= `endTime`.
| ייצוג ב-JSON |
|---|
{ "startTime": string, "endTime": string, "softStartTime": string, "softEndTime": string, "costPerHourBeforeSoftStartTime": number, "costPerHourAfterSoftEndTime": number } |
| שדות | |
|---|---|
startTime |
שעת ההתחלה של החלון הקופץ. אם לא צוין ערך, הוא יוגדר ל- חותמת זמן בפורמט 'Zulu' בפורמט RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות אחרי הנקודה. דוגמאות: |
endTime |
שעת הסיום של חלון הזמנים הקפדני. אם לא צוין ערך, הוא יוגדר ל- חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
softStartTime |
שעת ההתחלה הרכה של חלון הזמן. חותמת זמן בפורמט UTC 'Zulu' של RFC3339, עם רזולוציה של ננו-שנייה ועד תשע ספרות עשרוניות. דוגמאות: |
softEndTime |
שעת הסיום המשוערת של חלון הזמן. חותמת זמן בפורמט 'Zulu' בפורמט RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות אחרי הנקודה. דוגמאות: |
costPerHourBeforeSoftStartTime |
עלות לשעה שתתווסף לעלויות אחרות במודל אם האירוע מתרחש לפני האירוע softStartTime, שמחושבת כך: העלות הזו חייבת להיות חיובית, ואפשר להגדיר את השדה רק אם הוגדר ערך softStartTime. |
costPerHourAfterSoftEndTime |
עלות לשעה שתתווסף לעלויות אחרות במודל אם האירוע מתרחש אחרי העלות הזו חייבת להיות חיובית, וניתן להגדיר את השדה רק אם |
כלי רכב
זו דוגמה של רכב בבעיה במשלוח. פתרון בעיה בשליחה יוצר מסלול עבור הרכב הזה שמתחיל ב-startLocation ומסתיים ב-endLocation. מסלול הוא רצף של ביקורים (ראו ShipmentRoute).
| ייצוג JSON |
|---|
{ "displayName": string, "travelMode": enum ( |
| שדות | |
|---|---|
displayName |
השם המוצג של הרכב, כפי שהמשתמש הגדיר. השם יכול להכיל עד 63 תווים, וניתן להשתמש בתווים בתקן UTF-8. |
travelMode |
מצב הנסיעה שמשפיע על הדרכים שבהן הרכב יכול להשתמש ועל המהירות שלו. מידע נוסף זמין במאמר |
routeModifiers |
קבוצה של תנאים שמשפיעים על אופן החישוב של המסלולים ברכב הנתון. |
startLocation |
מיקום גיאוגרפי שבו הרכב מתחיל לפני איסוף משלוחים. אם לא מציינים זאת, הרכב יתחיל באיסוף הראשון. אם למודל המשלוח יש מטריצות של משך זמן ומרחק, אי אפשר לציין |
startWaypoint |
נקודת ציון שמייצגת מיקום גיאוגרפי שבו הרכב מתחיל לפעול לפני איסוף המשלוחים. אם לא צוין אף אחד מהערכים |
endLocation |
מיקום גיאוגרפי שבו הרכב מסתיים אחרי שהושלמה |
endWaypoint |
נקודת ציון שמייצגת מיקום גיאוגרפי שבו הרכב מסתיים אחרי שהוא משלים את |
startTags[] |
מציין תגים שמצורפים לתחילת המסלול של הרכב. אסור להזין מחרוזות ריקות או כפולות. |
endTags[] |
ציון תגים שמצורפים לסוף המסלול של הרכב. אסור להזין מחרוזות ריקות או כפולות. |
startTimeWindows[] |
חלונות זמן שבמהלכם הרכב עשוי לצאת ממיקום ההתחלה. הם צריכים להיות בתוך מגבלות הזמן הגלובליות (ראו שדות חלונות זמן ששייכים לאותו שדה חוזר חייבים להיות נפרדים, כלומר אף חלון זמן לא יכול להיות חופף לחלון זמן אחר או להיות צמוד אליו, והם חייבים להיות בסדר כרונולוגי. אפשר להגדיר את |
endTimeWindows[] |
חלונות זמן שבהם הרכב עשוי להגיע למיקום הסיום שלו. הם חייבים להיות במסגרת מגבלות הזמן הגלובליות (עיינו בשדות חלונות זמן ששייכים לאותו שדה חוזר חייבים להיות נפרדים, כלומר אף חלון זמן לא יכול להיות חופף לחלון זמן אחר או להיות צמוד אליו, והם חייבים להיות בסדר כרונולוגי. אפשר להגדיר את |
unloadingPolicy |
מדיניות פריקה שחלה על הרכב. |
loadLimits |
הקיבולת של הרכב (משקל, נפח, מספר פלטפורמות, לדוגמה). המפתחות במפה הם המזהים של סוג העומס, בהתאם למפתחות של השדה אובייקט שמכיל רשימה של זוגות |
costPerHour |
עלויות הרכב: כל העלויות מצטברות וחייבות להיות באותה יחידה של עלות לשעה של מסלול הרכב. העלות הזו חלה על הזמן הכולל במסלול, והיא כוללת את זמן הנסיעה, זמן ההמתנה וזמן הביקור. שימוש ב- |
costPerTraveledHour |
עלות לשעה של נסיעה במסלול הרכב. העלות הזו חלה רק על זמן הנסיעה במסלול (כלומר, שדווח ב- |
costPerKilometer |
עלות לקילומטר ממסלול הרכב. העלות הזו חלה על המרחק שדווח ב |
fixedCost |
החלה של עלות קבועה אם הרכב הזה משמש לטיפול במשלוח. |
usedIfRouteIsEmpty |
השדה הזה רלוונטי רק לרכבים כשהמסלול שלהם לא מספק משלוחים. במקרה הזה, המערכת מציינת אם הרכב נחשב כמשומש או לא. אם הערך הוא True, הרכב עובר מתחילתו ועד סופו, גם אם אין משלוחים בכלל, ומביאות בחשבון את עלויות הזמן והמרחק שנובעים ממנו --> סיום הנסיעה. אחרת, הרכב לא נוסע ממיקום ההתחלה למיקום הסיום, ולא מתוזמנים לו |
routeDurationLimit |
המגבלה חלה על משך הזמן הכולל של המסלול של הרכב. ב- |
travelDurationLimit |
הגבלה שחלה על משך הנסיעה במסלול של הרכב. ב- |
routeDistanceLimit |
המגבלה חלה על המרחק הכולל של מסלול הרכב. ב- |
extraVisitDurationForVisitType |
מציין מפה ממחרוזות מסוג visitTypes ועד לפרקי הזמן. משך הזמן הוא הזמן שנוסף ל- אם לבקשת הביקור יש כמה סוגים, לכל סוג יתווסף משך זמן במפה. אובייקט שמכיל רשימה של |
breakRule |
תיאור לוח הזמנים של ההפסקות שייאכף ברכב הזה. אם השדה הזה ריק, לא יתוזמנו הפסקות ברכב הזה. |
label |
תווית לרכב. התווית הזו מדווחת בתגובה כ- |
ignore |
אם הערך הוא True, הערך של אם המשלוח מתבצע על ידי רכב שנדחה ב- אם משלוח מתבצע על ידי רכב שנדחה ב- |
travelDurationMultiple |
גורם מכפיל שאפשר להשתמש בו כדי להגדיל או להקטין את זמני הנסיעה של הרכב הזה. לדוגמה, אם קובעים את הערך 2.0, הרכב הזה איטי יותר וזמני הנסיעה בו גדולים פי שניים מאשר ברכבים רגילים. המספר הזה לא משפיע על משך הביקורים. זה משפיע על העלות אם מציינים אזהרה: זמני הנסיעה יעוגלו לשנייה הקרובה ביותר לאחר החלת המכפלה הזו, אבל לפני ביצוע פעולות מספריות. לכן, כפולה קטנה עלולה לפגוע בדיוק. מידע נוסף זמין בקטע |
TravelMode
מצבי נסיעה לשימוש בכלי רכב.
הקבוצות האלה צריכות להיות קבוצת משנה של מצבי הנסיעה המועדפים ב-API של המסלולים בפלטפורמה של מפות Google, מידע נוסף זמין בכתובת: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.
| טיפוסים בני מנייה (enum) | |
|---|---|
TRAVEL_MODE_UNSPECIFIED |
מצב נסיעה לא מוגדר, שווה ערך ל-DRIVING. |
DRIVING |
מצב נסיעה התואם למסלול הנסיעה (מכונית, ...). |
WALKING |
מצב נסיעה שתואם למסלול הליכה. |
TRUCK |
נסיעה במשאית. המצב הזה כרוך בהגבלות פיזיות ומשפטיות. |
RouteModifiers
כוללת קבוצה של תנאים אופציונליים שמתקיימים בחישוב מסלולים של כלי רכב. הערך הזה דומה ל-RouteModifiers בממשק ה-API המועדף של מסלולים בפלטפורמה של מפות Google. אפשר לקרוא מידע נוסף במאמר https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteModifiers.
| ייצוג JSON |
|---|
{
"vehicleInfo": {
object ( |
| שדות | |
|---|---|
vehicleInfo |
מציין את פרטי הרכב. |
VehicleInfo
כולל את פרטי הרכב, כמו מידע על המשאית.
| ייצוג ב-JSON |
|---|
{ "totalAxleCount": integer, "totalHeightMm": string, "totalLengthMm": string, "totalWidthMm": string, "totalWeightKg": string, "trailerInfo": [ { object ( |
| שדות | |
|---|---|
totalAxleCount |
המספר הכולל של הצירים. הערך חייב להיות גדול מ-2. נדרשת הפעלה של משאית או נגרר. ההגדרה חלה רק על מצב הנסיעה |
totalHeightMm |
גובה הרכב, כולל הגובה של כל גרר שמחובר אליו. צריך להגדיר את האפשרות הזו כדי שהאירוע יופעל כשמשתמשים בטרקטורים או בטריילרים. רלוונטי רק למצב הנסיעה |
totalLengthMm |
אורך הרכב, כולל אורך כל גרר שמחובר אליו. צריך להגדיר את האפשרות הזו כדי שהאירוע יופעל כשמשתמשים בטרקטורים או בטריילרים. ההגדרה חלה רק על מצב הנסיעה |
totalWidthMm |
רוחב הרכב, כולל הרוחב של נגררים מחוברים. נדרשת הפעלה של משאית או נגרר. ההגדרה חלה רק על מצב הנסיעה |
totalWeightKg |
משקל הרכב, כולל המשקלים של כל גורר שמחובר אליו. משקל בהקשר הזה מתייחס למשקל בפועל, ולא לדירוג המשקל. צריך להגדיר את האפשרות הזו כדי שהאירוע יופעל כשמשתמשים בטרקטורים או בטריילרים. רלוונטי רק למצב הנסיעה |
trailerInfo[] |
רלוונטי רק למצב הנסיעה |
hazardousGoodsTypes[] |
רשימת החומרים המסוכנים המועברים ברכב, אם יש כאלה. |
TrailerInfo
מידע על קרוואנים נפרדים שמחוברים לרכב. למשאיות יש לספק את האורך של כל נגרר. סך כל המאפיינים חייב לכלול את המאפיינים של טריילרים. לדוגמה, הערך של totalHeightMm תמיד חייב להיות גדול מ-trailerInfo.height_mm או שווה לו.
| ייצוג JSON |
|---|
{ "lengthMm": string } |
| שדות | |
|---|---|
lengthMm |
אורך הטריילר. |
HazardousGoodsType
סוגים שונים של חומרים מסוכנים.
| טיפוסים בני מנייה (enum) | |
|---|---|
HAZARDOUS_GOODS_TYPE_UNSPECIFIED |
לא ציינת סוג חומרים מסוכנים. |
EXPLOSIVES |
חומרי נפץ. |
GASES |
גזים. |
FLAMMABLE |
מוצרים דליקים. |
COMBUSTIBLE |
מוצרים דליקים. |
ORGANIC |
מוצרים אורגניים. |
POISON |
סחורות רעילות. |
RADIOACTIVE |
מוצרים רדיואקטיביים. |
CORROSIVE |
מוצרים מאכלים. |
ASPIRATION_HAZARD |
מוצרים מסוכנים. |
ENVIRONMENTAL_HAZARD |
סחורות מסוכנות לסביבה. |
OTHER |
סוגים אחרים של מוצרים. |
UnloadingPolicy
המדיניות בנושא אופן פריקה של רכב. האפשרות הזו רלוונטית רק לשליחויות עם איסוף ומשלוח.
משלוחים אחרים מתבצעים בחינם בכל מקום במסלול, ללא קשר ל-unloadingPolicy.
| טיפוסים בני מנייה (enum) | |
|---|---|
UNLOADING_POLICY_UNSPECIFIED |
מדיניות הסרת הנתונים שנטענו לא צוינה. המשלוחים צריכים להתבצע רק אחרי האיסוף התואם שלהם. |
LAST_IN_FIRST_OUT |
המשלוחים צריכים להתבצע בסדר הפוך לאיסופים |
FIRST_IN_FIRST_OUT |
המשלוחים צריכים להיות באותה הזמנה כמו באיסוף עצמי |
LoadLimit
הגדרת מגבלת עומס שחלה על רכב, למשל: "המשאית הזו יכולה לשאת עד 3,500 ק"ג". loadLimits.
| ייצוג ב-JSON |
|---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
| שדות | |
|---|---|
softMaxLoad |
מגבלה רכה של העומס. |
costPerUnitAboveSoftMax |
אם העומס בכל זאת יחרוג מ- |
startLoadInterval |
מרווח הזמן המקובל לטעינה של הרכב בתחילת המסלול. |
endLoadInterval |
מרווח העומס הקביל של הרכב בסוף המסלול. |
maxLoad |
כמות הטעינה המקסימלית הקבילה. |
מרווח
מרווח בין סכומי העומסים הקבילים.
| ייצוג ב-JSON |
|---|
{ "min": string, "max": string } |
| שדות | |
|---|---|
min |
עומס קביל מינימלי. הערך חייב להיות ≥ 0. אם מציינים את שניהם, הערך של |
max |
עומס מקסימלי מקובל. מספר זה חייב להיות 0 ומעלה. אם לא צוין, ההודעה הזו לא תוכל להגביל את הטעינה המקסימלית. אם מציינים את שניהם, הערך של |
DurationLimit
מגבלה שמגדירה את משך הזמן המקסימלי של מסלול של כלי רכב. הוא יכול להיות קשה או רך.
כשמגדירים שדה של מגבלה רכה, צריך להגדיר יחד גם את סף המגבלה הרכה וגם את העלות המשויכת אליה.
| ייצוג ב-JSON |
|---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
| שדות | |
|---|---|
maxDuration |
מגבלה קשיחה שמגבילה את משך הזמן ל-maxDuration לכל היותר. משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
softMaxDuration |
מגבלה רכה שלא אוכפת מגבלת משך זמן מקסימלית, אבל מופרת אותה, כרוכה בעלות על המסלול. העלות הזו מסתכמת לעלויות האחרות שמוגדרות במודל, עם אותה יחידה. אם משך זמן בשניות עם עד תשע ספרות עשרוניות, שמסתיים ב-' |
quadraticSoftMaxDuration |
מגבלה רכה שלא אוכפת מגבלה על משך הזמן המקסימלי, אבל אם היא מופרת, חלה על המסלול עלות של משך זמן ממעלה שנייה. העלות הזו מסתכמת לעלויות האחרות שמוגדרות במודל, עם אותה יחידה. אם
משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
costPerHourAfterSoftMax |
העלות לשעה שקיימת במקרה של הפרת הסף של העלות חייבת להיות לא שלילית. |
costPerSquareHourAfterQuadraticSoftMax |
העלות לשעה בריבוע אם חלה הפרה של הסף של העלות הנוספת היא 0 אם משך הזמן נמוך מהסף. אחרת, העלות תלויה במשך הזמן באופן הבא: העלות חייבת להיות לא שלילית. |
DistanceLimit
מגבלה שמגדירה מרחק מקסימלי שאפשר לעבור בו. הוא יכול להיות קשה או רך.
אם מוגדרת מגבלת softmax, צריך להגדיר גם את softMaxMeters וגם את costPerKilometerAboveSoftMax וגם לא להיות שליליים.
| ייצוג ב-JSON |
|---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerAboveSoftMax": number } |
| שדות | |
|---|---|
maxMeters |
מגבלה קשיחה שמגבילה את המרחק ל-maxMeters לכל היותר. המגבלה חייבת להיות לא שלילית. |
softMaxMeters |
מגבלה רכה שלא אוכפת מגבלת מרחק מקסימלית, אבל מופרת אותה, תוביל לעלות שנוספת לעלויות אחרות שמוגדרות במודל, עם אותה יחידה. אם מוגדרים softMaxMeters, הם חייבים להיות קטנים מ-maxMeters ולא יכולים להיות שליליים. |
costPerKilometerAboveSoftMax |
העלות לקילומטר תחויב אם המרחק חורג מהמגבלה העלות חייבת להיות לא שלילית. |
BreakRule
כללים ליצירת הפסקות זמן לרכב (למשל, הפסקות צהריים). הפסקה היא תקופה רציפה של זמן שבמהלכה הרכב נשאר במצב מנוחה במיקום הנוכחי שלו ולא יכול לבצע ביקור כלשהו. יכול להיות שתהיה הפסקה:
- במהלך הנסיעה בין שני ביקורים (כולל הזמן שלפני הביקור או אחריו, אבל לא באמצע הביקור). במקרה כזה, זמן הנסיעה המתאים בין הביקורים יתארך.
- או לפני הפעלת הרכב (לא ניתן להפעיל את הרכב באמצע הפסקה), במקרה כזה הוא לא משפיע על מועד הפעלת הרכב.
- או אחרי סיום הנסיעה ברכב (אותו הדבר, עם זמן סיום הנסיעה ברכב).
| ייצוג ב-JSON |
|---|
{ "breakRequests": [ { object ( |
| שדות | |
|---|---|
breakRequests[] |
רצף של הפסקות. הצגת ההודעה |
frequencyConstraints[] |
בכפוף ל |
BreakRequest
צריך לדעת מראש את רצף ההפסקות (כלומר, המספר והסדר שלהן) שחלים על כל רכב. הערכים החוזרים של BreakRequest מגדירים את הרצף הזה, בסדר שבו הם חייבים להתרחש. חלונות הזמן שלהם (earliestStartTime / latestStartTime) עשויים לחפוף, אבל הם חייבים להיות תואמים להזמנה (הבדיקה הזו מתבצעת).
| ייצוג JSON |
|---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
| שדות | |
|---|---|
earliestStartTime |
חובה. גבול תחתון (כולל) לתחילת ההפסקה. חותמת זמן בפורמט 'Zulu' בפורמט RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות אחרי הנקודה. דוגמאות: |
latestStartTime |
חובה. הגבול העליון (כולל) של תחילת ההפסקה. חותמת זמן בפורמט 'Zulu' בפורמט RFC3339 UTC, עם רזולוציה של ננו-שנייה ועד תשע ספרות אחרי הנקודה. דוגמאות: |
minDuration |
חובה. משך הזמן המינימלי של ההפסקה. חייב להיות חיובי. משך זמן בשניות עם עד תשע ספרות עשרוניות, שמסתיים ב-' |
FrequencyConstraint
אפשר להגביל עוד יותר את התדירות ואת משך ההפסקות שצוינו למעלה, על ידי אכיפה של תדירות מינימלית של הפסקות, למשל "חייבת להיות הפסקה של שעה לפחות בכל 12 שעות". בהנחה שאפשר לפרש את המשפט הזה כ"בכל חלון זמן נע של 12 שעות, חייבת להיות הפסקה אחת לפחות של שעה אחת לפחות", הדוגמה הזו תועבר ל-FrequencyConstraint הבא:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
התזמון והמשך ההפסקות בפתרון יהיו בהתאם לכל האילוצים האלה, בנוסף לחלונות הזמן ולמשכים המינימליים שכבר צוינו ב-BreakRequest.
בפועל, FrequencyConstraint עשוי לחול על הפסקות לא רצופות. לדוגמה, התזמון הבא עומד בדרישות של הדוגמה 'שעה אחת כל 12 שעות':
04:00 vehicle start
.. performing travel and visits ..
09:00 1 hour break
10:00 end of the break
.. performing travel and visits ..
12:00 20-min lunch break
12:20 end of the break
.. performing travel and visits ..
21:00 1 hour break
22:00 end of the break
.. performing travel and visits ..
23:59 vehicle end
| ייצוג JSON |
|---|
{ "minBreakDuration": string, "maxInterBreakDuration": string } |
| שדות | |
|---|---|
minBreakDuration |
חובה. משך ההפסקה המינימלי של האילוץ הזה. מספר חיובי. ראו את התיאור של משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
maxInterBreakDuration |
חובה. פרק הזמן המקסימלי המותר בכל מרווח זמן במסלול שלא כולל לפחות הפסקה חלקית של משך זמן בשניות עם עד תשע ספרות עשרוניות, שמסתיים ב-' |
DurationDistanceMatrix
מציינת מטריצת משך הזמן והמרחק ממיקומי היעד ונקודות ההתחלה של הרכבים לביקור ובמיקומי היעד של הרכבים.
| ייצוג ב-JSON |
|---|
{
"rows": [
{
object ( |
| שדות | |
|---|---|
rows[] |
מציין את השורות של מטריצות משך הזמן והמרחק. הוא צריך לכלול מספר רכיבים כמו |
vehicleStartTag |
תג שמגדיר לאילו כלי רכב חלה מטריצת משך הזמן והמרחק הזו. אם השדה ריק, הוא חל על כל כלי הרכב, וניתן להשתמש רק במטריצה אחת. כל התנעת הרכב צריכה להתאים בדיוק למטריצה אחת. כלומר, השדה של לכל המטריצות צריך להיות |
שורה
מציינת שורה של מטריצת משך הזמן והמרחק.
| ייצוג JSON |
|---|
{ "durations": [ string ], "meters": [ number ] } |
| שדות | |
|---|---|
durations[] |
הערכים של משך הזמן בשורה נתונה. הוא צריך לכלול מספר רכיבים כמו משך זמן בשניות עם עד תשע ספרות עשרוניות, שמסתיים ב-' |
meters[] |
ערכי מרחק בשורה נתונה. אם אין עלויות או מגבלות להתייחס למרחקים במודל, אפשר להשאיר את השדה הזה ריק. אחרת, הוא צריך לכלול כמה שיותר רכיבים כמו |
TransitionAttributes
מציין מאפיינים של מעברים בין שני ביקורים רצופים במסלול. כמה TransitionAttributes עשויים לחול על אותו מעבר: במקרה כזה, כל העלויות הנוספות מצטברות, והאילוץ או המגבלה המחמירים ביותר חלים (לפי הסמנטיקה הטבעית "AND").
| ייצוג JSON |
|---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
| שדות | |
|---|---|
srcTag |
תגים שמגדירים את קבוצת המעברים (src->dst) שהמאפיינים האלה חלים עליהם. ביקור במקור או התחלת נסיעה ברכב תואמים אם השדה |
excludedSrcTag |
|
dstTag |
ביקור ביעד או סיום נסיעה תואמים אם השדה |
excludedDstTag |
|
cost |
העלויות של ביצוע המעבר הזה. הערך הזה זהה ליחידה של כל העלויות האחרות במודל, ולא יכול להיות שלילי. הוא מוחל בנוסף לכל העלויות הקיימות. |
costPerKilometer |
מציינת עלות לקילומטר שחלה על מרחק הנסיעה בזמן ביצוע המעבר. הוא מצטבר לכל |
distanceLimit |
מציינת מגבלה על המרחק שהמשתמש עובר במהלך ביצוע המעבר הזה. החל מיוני 2021, יש תמיכה רק במגבלות רכות. |
delay |
מציינת עיכוב שחל במהלך ביצוע המעבר. העיכוב הזה מתרחש תמיד אחרי סיום הביקור במקור ולפני תחילת הביקור ביעד. משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
ShipmentTypeIncompatibility
מציינת חוסר תאימות בין משלוחים בהתאם לסוג המשלוח שלהם. ההצגה של משלוחים לא תואמים באותו מסלול מוגבלת בהתאם למצב חוסר התאימות.
| ייצוג JSON |
|---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
| שדות | |
|---|---|
types[] |
רשימה של סוגים לא תואמים. שני משלוחים עם |
incompatibilityMode |
המצב שחלה על חוסר התאימות. |
IncompatibilityMode
מצבים שמגדירים את האופן שבו משלוחים לא תואמים מוגבלים לאותו מסלול.
| טיפוסים בני מנייה (enum) | |
|---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
מצב אי-תאימות לא מוגדר. אין להשתמש בערך הזה אף פעם. |
NOT_PERFORMED_BY_SAME_VEHICLE |
במצב הזה, שני משלוחים עם סוגים לא תואמים אף פעם לא יכולים לחלוק את אותו רכב. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
בשתי משלוחים עם סוגי פריטים לא תואמים במצב אי-תאימות
|
ShipmentTypeRequirement
מציינת את הדרישות בין משלוחים על סמך סוג המשלוח שלהם. הפרטים הספציפיים של הדרישה מוגדרים לפי מצב הדרישה.
| ייצוג ב-JSON |
|---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
| שדות | |
|---|---|
requiredShipmentTypeAlternatives[] |
רשימה של סוגי משלוח חלופיים שנדרשים על ידי |
dependentShipmentTypes[] |
בכל משלוחים עם סוג בשדה הערה: אסור ליצור שרשראות של דרישות שבהן |
requirementMode |
המצב הוחל על הדרישה. |
RequirementMode
מצבים שמגדירים את המראה של משלוחים תלויים במסלול.
| טיפוסים בני מנייה (enum) | |
|---|---|
REQUIREMENT_MODE_UNSPECIFIED |
מצב הדרישה לא צוין. אין להשתמש בערך הזה אף פעם. |
PERFORMED_BY_SAME_VEHICLE |
במצב הזה, כל המשלוחים ה"תלויים" חייבים לחלוק את אותו רכב כמו לפחות אחד מהמשלוחים "הדרושים" שלהם. |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
כשמשתמשים במצב לכן, איסוף 'תלוי למשלוח' חייב לכלול את אחת מהאפשרויות הבאות:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
כמו קודם, למעט למשלוחים 'תלויים', נדרש משלוח 'נדרש' על הרכב שלהם בזמן המסירה. |
PrecedenceRule
כלל עדיפות בין שני אירועים (כל אירוע הוא איסוף או מסירה של משלוח): האירוע 'שני' צריך להתחיל לפחות offsetDuration אחרי שהאירוע 'ראשון' התחיל.
כמה קדימות יכולות להתייחס לאותם אירועים (או אירועים קשורים). למשל, 'איסוף ב' מתבצע אחרי מסירת פריט א' ו'איסוף של ב' מתבצע אחרי איסוף של ב'.
בנוסף, קדימות חלות רק כאשר מבצעים את שני המשלוחים ומתעלמים ממנה.
| ייצוג ב-JSON |
|---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
| שדות | |
|---|---|
firstIsDelivery |
מציין אם האירוע 'ראשון' הוא העברה. |
secondIsDelivery |
מציין אם האירוע 'השני' הוא מסירה. |
offsetDuration |
ההיסט בין האירוע 'הראשון' ל'שני'. היא יכולה להיות שלילית. משך הזמן בשניות, עם עד תשע ספרות עשרוניות, שמסתיימים ב-' |
firstIndex |
אינדקס המשלוח של האירוע 'ראשון'. חובה לציין את השדה הזה. |
secondIndex |
אינדקס המשלוח של האירוע 'שני'. חובה לציין את השדה הזה. |