נסיעות על פי דרישה

במסמך הזה מתוארים השירותים של נסיעות על פי דרישה ב-Fleet Engine. ההנחה היא שקראת את המאמר מהו Fleet Engine? ושאתם מודעים ליכולות הספציפיות של שירות Fleet Engine שדרושות לכם.

בזמן הקריאה של המסמך הזה, חשוב לזכור את הנקודות הבאות:

  • הקצאת נסיעות לכלי רכב היא דרך ליצור מודל של הקשר בעולם האמיתי בין הנסיעה לבין הנהג/ת שמסיימים אותה. מומלץ לקרוא את המאמר מבוא לכלי רכב כדי להבין טוב יותר איך כלי רכב פועלים ב-Fleet Engine.
  • במסמך הזה מתוארים גם רכיבים מסוימים של כלי רכב שחלים רק על נסיעות על פי דרישה.
  • מנוע הצי לנסיעות על פי דרישה משתמש בשני משאבים: Trip ו-Vehicle. ‏Fleet Engine מספק גם שירות gRPC וגם ממשקי REST:
    • TripService: gRPC ו-REST
    • VehicleService: gRPC ו-REST
    • כדי לפשט את המדריך, השתמשנו בדוגמאות ל-gRPC.

מהי נסיעה על פי דרישה?

ב-Fleet Engine, נסיעה מייצגת נסיעה על פי דרישה שיכולה להשיג מגוון מטרות תחבורה. לדוגמה:

  • אנשים: הסעת אדם אחד או יותר מנקודת האיסוף לנקודת ההורדה.
  • אוכל וסחורות: איסוף הזמנה אחת או יותר של אוכל ממיקום עסק נתון והעברת ההזמנות האלה לנמען אחד או יותר במיקומים שלהם.

רכיבי הנסיעה

באיור הבא מוצגים הרכיבים הבסיסיים של נסיעה: מזהה הרכב שהוקצה, סטטוס הנסיעה ונקודות העצירה בנסיעה. סוגי נקודות הדרך משתנים בהתאם לשלב המסע: איסוף, עצירה ביניים והורדה. בכל נסיעה, אפשר להוסיף יעד ביניים או נקודת דרך. בדוגמה לתמונה, הרכב הגיע לנקודת האיסוף

מודל נתונים לנסיעות

כשהקצאת הנסיעות לרכבים מתבצעת בקצה העורפי, צריך לדעת גם על נסיעות אחרות שתוזמנו לרכב. לכן, בתרשים הבא מוצג מודל הנתונים של המשאב Trip לצד התרשים של המשאב המשויך Vehicle. אפשר לעיין בשני התרשימים כדי להבין את היחסים בין שני המשאבים, תוך שמירה על הנקודות הבאות:

  • הנסיעה מוקצה לרכב לפי המזהה שלו.
  • השיוך בין הנסיעה לרכב הוא 'רבים לאחד'. כלומר, נסיעה מסוימת עשויה להיות הנסיעה היחידה שתוזמנה לרכב, או אחת מתוך נסיעות רבות ברכב.
  • אובייקטים של נסיעות מכילים שתי רשימות של נקודות דרך, אחת לנסיעה עצמה ואחת לרכב שהוקצה. בהמשך המאמר מוסבר על כך בפירוט.
  • לרכב על פי דרישה יש גם רשימה של נקודות עצירה בנסיעה, שמתוארת בהרחבה במסמך הזה.

מודל נתוני נסיעה

מודל נתוני הרכב

סוגי נסיעות

כשהשירות יוצר נסיעה, הוא יכול להגדיר את השדה tripType לאחת מהאפשרויות הבאות: EXCLUSIVE או SHARED.

טיולים בלעדיים

נסיעה בלעדית היא נסיעה שהמסלול שלה לא חופף לנסיעות אחרות, והרכב משלים אותה לפני או אחרי נסיעות אחרות בלוח הזמנים שלו. כלומר, כשהמערכת מקצה נסיעות בלעדיות, היא יכולה להקצות אותן לרכב רק כדי שהן יבוצעו ברצף, ולא בו-זמנית. לדוגמה, תוכלו ליצור נסיעות בלעדיות עם כל אחת מהתכונות הבאות:

  • נסיעה עם עצירה אחת לאיסוף ועצירה אחת להורדה של רכב ללא נסיעות אחרות בלוח הזמנים שלו.
  • נסיעה עם איסוף, נקודת ציון ביניים ושליחה של רכב ללא נסיעה אחרת בלוח הזמנים שלו.
  • נסיעה עם איסוף והורדה שנוספו בסוף נסיעה שכבר תוזמנה לרכב. במקרים כאלה, כל נסיעה היא בלעדית לנסיעה השנייה, אבל הנסיעות ממוינות ברצף. בנוסף, נסיעות כאלה יכולות לכלול יעדים ביניים, אם יש צורך.

נסיעות משותפות

נסיעה משותפת היא נסיעה שהמסלול שלה יכול לחפוף להזמנות אחרות של נסיעות. לגבי סוגי הנסיעות האלה, המערכת יכולה להקצות אותם כך שיקרו בו-זמנית עם יעדים שמתחלפים ביניהם. לדוגמה, ייתכן שההורדה של נסיעה אחת תתבצע אחרי האיסוף של נסיעה אחרת. בנוסף, לא ניתן להשתמש בציוני דרך ביניים בנסיעות משותפות.

בדרך כלל משתמשים בנסיעה משותפת באחד מהתרחישים של מאגר משותף שמתוארים בקטע תרחישים של נסיעות.

נקודות ציון בנסיעה

במפות Google, נקודת ציון היא מקום לאורך מסלול, שמוגדר בדרך כלל לפי קואורדינטות של רוחב/אורך. בנסיעות על פי דרישה, נקודת ציון מיוצגת על ידי אובייקט TripWaypoint שמכיל מידע נוסף, כמו:

  • מזהה הנסיעה
  • WaypointType – נקודת האיסוף, נקודת הביניים או נקודת ההורדה
  • נתוני הנתיב והמרחק בין נקודת הדרך הקודמת בנסיעה לבין הנקודה הנוכחית
  • מצב התנועה לאורך הדרך לנקודת העצירה בנסיעה
  • זמן הנסיעה וזמן ההגעה המשוער לנקודת ציון בנסיעה

עיינו במקורות המידע הבאים:

סוגי נקודות הדרך בנסיעה

נקודת ציון בנסיעה מוגדרת ביחס למחזור החיים הכללי של נסיעה ברכב:

  • נקודת ציון לאיסוף – משמשת כמיקום המוצא או ההתחלה של נסיעה, למשל כשנהג או נהגת אוספים הזמנה ממסעדה לצורך משלוח מאוחר יותר, או כשנהג או נהגת אוספים נוסע או נוסעת לצורך הורדה מאוחר יותר.
  • נקודת ציון ביניים – יעד ביניים שאפשר להשתמש בו למגוון מטרות, למשל כשנהג משחרר נוסע אחד מאותה קבוצת הזמנות, אבל הנסיעה עצמה לא הושלמה כי יש עוד נוסעים. נקודת הציון הזו היא אופציונלית וניתן להשתמש בה רק לנסיעות בלעדיות.
  • נקודת דרך להורדה – משמשת למיקום הסופי של הנסיעה, למשל כשהנוסע/ת שנותר/ה יוצא/ת מהרכב.

רשימות של נקודות דרך בנסיעות

ישות Trip כוללת שתי רשימות של נקודות ציון, כל אחת מהן היא שדה חוזר מסוג TripWaypoint. ברשימה אחת מתוארים השדות הנחוצים לנסיעה עצמה, וברשימה השנייה מתוארים כל נקודות הדרך שנותרו לרכב שמשויך לנסיעה. כך תוכלו לקבל תמונה מלאה של כל הרכיבים של המסלול: הנסיעה והמסלול המלא של הרכב.

  • נקודות הדרך הנותרות ברכב – שדה שנקרא vehicle_waypoints. הוא מכיל את כל נקודות העצירה שנותרו בכל הנסיעות שהוקצו לרכב.
  • נקודות הדרך שנותרו בנסיעה – שדה שנקרא remaining_waypoints. הוא מכיל נקודות דרך שהרכב צריך לעבור ברצף לפני נקודת ההורדה הסופית של הנסיעה. אפשר לראות את התרחישים בקטע תרחישי נסיעה.
    • בנסיעה עם יעד אחד שהוקצה לרכב ללא נסיעות אחרות בלוח הזמנים שלו, הדיווח יכלול רק את מיקום האיסוף ואת מיקום ההורדה, בהנחה שהרכב לא עזב את נקודת הציון לאיסוף.
    • בתרחישים אחרים של נסיעות שבהם הרכב מתוזמן גם לנסיעות אחרות, נקודות הדרך שנותרו בכל נסיעה בתוכנית הנסיעה יכללו את כל נקודות הדרך מנסיעות אחרות שהרכב צריך לעבור דרכן לפני שהוא מגיע לנקודת הדרך של הורדת הנוסע בנסיעה הזו. לדוגמה, בנסיעה רצופת שבה הרכב בדרך לנקודת ההורדה של נסיעה א', נקודות הדרך שנותרו בנסיעה ב' יכללו את נקודת הדרך של נסיעה א'. מערכת Fleet Engine מחשבת את המידע הזה באמצעות השדה vehicle_waypoints.

עיינו במסמך העזר של הישות Trip: gRPC או REST.

תרחישים של נסיעות

בתרשים הבא מפורטים תרחישים שונים של נסיעות שנתמכים. בתרחישים האלה, רק הנסיעה המשותפת בקבוצה היא מסוג SHARED, והשאר הן מסוג EXCLUSIVE. בתרשימים מוצגים גם סטטוס הנסיעה ונקודות העצירה שנותרו ברכב שמבצע את הנסיעה. המושגים האלה מתוארים בהמשך המדריך.

נסיעה ליעד אחד

נסיעה ליעד אחד היא נסיעה מסוג EXCLUSIVE עם מיקום אחד לאיסוף ומיקום אחד להורדה. לדוגמה, נהג אוסף נוסע ממיקום אחד ומסיע אותו למיקום אחר, או נהג אוסף הזמנה של משלוח אוכל ממסעדה ומסיר אותה ללקוח.

נסיעות עם כמה יעדים

נסיעה עם כמה יעדים היא נסיעה מסוג EXCLUSIVE שמכילה יעד ביניים אחד או יותר בין מיקומי האיסוף וההורדה. לדוגמה, שלושה לקוחות של שירות שיתוף הנסיעה מזמינים נסיעה יחד מהטלפון של אדם אחד, אבל לכל אחד מהם יש יעד נפרד.

נסיעות רצופות

נסיעות ברצף הן EXCLUSIVE נסיעות שמכילות סדרה של נסיעות עצמאיות שמתרחשות ברצף. כל נסיעה בשרשרת יכולה להיות עם יעד אחד או עם כמה יעדים. בתרחיש הזה, נהג מתחייב לאסוף לקוח נוסף לפני השלמת הנסיעה הנוכחית.

אפשר להקצות את הנסיעות האלה רק לכלי רכב שמאפשרים תזמון של נסיעות ברצף. אפשר לעיין במסמכי העזרה של Vehicle REST ו-gRPC.

נסיעות בקבוצה

נסיעה בקבוצה משותפת שונה מסוגים אחרים של נסיעות. קודם כול, היא צריכה להיות נסיעה מסוג SHARED ולא EXCLUSIVE. במקרה כזה, הרכב מבצע את הנסיעות בו-זמנית ולא ברצף, כמו בנסיעות בלעדיות. בנסיעה משותפת בשירות 'נסיעות שיתופיות', מסלול הנסיעה משותף עם נסיעות אחרות, אבל לא פרטי המיקומים של האיסוף וההורדה. במקום זאת, כל נסיעה היא הזמנה בלעדית, כך שמשתמש הקצה שהזמין נסיעה אחת לא יכול לראות את פרטי האיסוף או היעד של נסיעה אחרת מלבד שלו. לדוגמה:

  • שירות הסעות לנמל התעופה אוסף לקוחות שונים מהבית שלהם ומוריד אותם בבתי נתיבות שונים בנמל התעופה לאורך המסלול. אדם 2 יכול להשתמש באפליקציה שלכם לצרכנים כדי לעקוב אחרי התקדמות הנסיעה, אבל באפליקציה שלו יוצג רק החלק שלו בנסיעה, ולא המיקום שבו אדם 1 נאסף או המיקום שבו הוא יורד, למרות שחלקים מהנסיעות שלהם חופפים.
  • נהג של שירות משלוחי מזון אוסף שלוש הזמנות מאותה מסעדה כדי למסור אותן ללקוחות שונים. באמצעות האפליקציה שלכם לצרכן, משתמש מספר 3 יכול לראות איפה ומתי האוכל נאסף ואת המסלול של הנהג, אבל לא לראות את המיקומים שבהם האוכל נמסר למשתמשים מספר 1 ו-2.

סטטוס הנסיעה ומחזור החיים שלה

בקטע הזה מתוארים סטטוס הנסיעה וההשפעה שלו על הרכב, וכן תרחישים שונים שעשויים להתרחש במהלך הקצאה וניהול של נסיעות על פי דרישה.

בדרך כלל, נסיעה עוברת כמה שלבים, מהיצירה ועד להשלמה. באופן כללי, נסיעה יכולה להיות פעילה או לא פעילה, בהתאם לסטטוס שלה. סטטוס הנסיעה משפיע על מגוון תרחישים לדוגמה ב-Fleet Engine, וגם על היכולת שלכם לזהות את התקדמות הרכב במהלך המסע. בהמשך המאמר נסביר על התרחישים האלה.

בטבלה הבאה מפורטים הסטטוסים של הנסיעות לפי סוגים פעילים ולא פעילים.

סטטוסים של נסיעות פעילות סטטוסים של נסיעות לא פעילות
NEW
UNKNOWN_TRIP_STATUS
ENROUTE_TO_PICKUP
ARRIVED_AT_PICKUP
ENROUTE_TO_INTERMEDIATE_DESTINATION
ARRIVED_AT_INTERMEDIATE_DESTINATION
ENROUTE_TO_DROPOFF
COMPLETE
CANCELED

סטטוס הנסיעה ונקודות הדרך שנותרו לרכב

כשמקצים נסיעות נוספות לרכב שכבר מבצע נסיעה, חשוב להבין את הקשר בין נקודות הדרך שנותרו לרכב ואת ההשפעה של סטטוס הנסיעה על נקודות הדרך הנותרות.

לדוגמה, אפשר להקצות בקשה חדשה לנסיעה משותפת לרכב שתומך רק בנסיעות בלעדיות, ושהנוסעים בו נמצאים באמצע נסיעה. במקרה כזה, צריך ליצור מודל של נסיעה ברצף. כשמקצים נסיעה כזו, המערכת צריכה לוודא שנקודות העצירה בנסיעה החדשה מופיעות אחרי נקודות העצירה בנסיעה הנוכחית.

במהלך המסלול של הרכב, מערכת Fleet Engine מסירה נקודת ציון קודמת בנסיעה מרשימת נקודות הציון שנותרו ברכב רק כשהרכבים מדווחים שהם בדרך ליעד הבא או שהנסיעה הושלמה. כלומר, כל אחד מהפרטים הבאים:

  • ENROUTE_TO_INTERMEDIATE_DESTINATION
  • ENROUTE_TO_DROPOFF
  • הושלמו

כשסטטוס הנסיעה משתנה ל-COMPLETED, מנוע הצי של Fleet מסיר את נקודת הציון האחרונה של הנסיעה מרשימת נקודות הציון שנותרו ברכב.

לעומת זאת, שינויים בסטטוס שמציינים הגעה לנקודת ציון בדרך בדרך כלל לא משפיעים על רשימת נקודות הציון שנותרו לרכב:

  • ARRIVED_AT_PICKUP
  • ARRIVED_AT_INTERMEDIATE_DESTINATION
  • ARRIVED_AT_DROPOFF

כדי להמחיש את זה, נביא דוגמה לנסיעה על פי דרישה: נניח שהנהג אוסף לקוח מהבית, מעביר אותו לאולם שבו הוא מחכה שהלקוח ישלים משימה, ואז מעביר אותו בחזרה לבית. כשהנסיעה נוצרת בפעם הראשונה, יש לה שלושה נקודות ציון: PICKUP,‏ INTERMEDIATE ו-DROPOFF. בטבלה הבאה מוצגות התוצאות של שאילתה לגבי נקודות ציון שנותרו במצבים שונים של המסע:

סטטוס הנסיעה נקודות הדרך שנותרו
ARRIVED_AT_PICKUP PICKUP
INTERMEDIATE
DROPOFF
ENROUTE_TO_INTERMEDIATE_DESTINATION PICKUP
INTERMEDIATE
DROPOFF
ARRIVED_AT_INTERMEDIATE_DESTINATION PICKUP
INTERMEDIATE
DROPOFF
ENROUTE_TO_DROPOFF PICKUP
INTERMEDIATE
DROPOFF
ARRIVED_AT_DROPOFF PICKUP
INTERMEDIATE
DROPOFF
COMPLETE PICKUP
INTERMEDIATE
DROPOFF

דרישות הסטטוס לנסיעות שהוקצו מחדש או בוטלו

כדי לבצע את הפעולות הבאות, צריך להגדיר את סטטוס הנסיעה ל-NEW או ל-CANCELED.

  • כשמשנים את הקצאת כלי הרכב לנסיעה. לדוגמה, אם נהג דוחה הקצאת רכב לנסיעה, צריך להקצות את הנסיעה לרכב אחר.
  • כשמבטלים את ההקצאה של רכב לנסיעה. לדוגמה, אם נהג מבטל נסיעה בדרך ואתם רוצים לבטל את הקצאת הרכב, הסטטוס צריך להיות NEW או CANCELED.

תוצאות חיפוש על סמך סטטוס הנסיעה

כשמשתמשים בשירות SearchTrips ברכב ספציפי, הוא מחזיר את רשימת הנסיעות הפעילות ב-SearchTripsResponse. נסיעות פעילות מופיעות גם בשדה active_trips של הישות Vehicle. לפרטים נוספים, עיינו במסמכי העזרה של SearchTripsResponse: gRPC או REST.

לכן, כל הנסיעות בסטטוס פעיל מופיעות בשדה active_trips, אבל נסיעות שהושלמו או בוטלו לא מופיעות.

המאמרים הבאים