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

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

מידע בסיסי על יצירת נסיעות

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

  • CreateTrip() שיטה: gRPC או REST
  • הודעה CreateTripRequest: ‏gRPC בלבד

שדות הנסיעה

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

שדות של נסיעות
שם נדרש? תיאור
parent כן מחרוזת שכוללת את מזהה הפרויקט. המזהה הזה צריך להיות זהה למזהה שמשמש בכל השילוב של Fleet Engine, עם אותם תפקידים בחשבון השירות.
trip_id כן מחרוזת שאתם יוצרים ומזהה באופן ייחודי את הנסיעה הזו. יש הגבלות מסוימות על מזהי נסיעות, כפי שמצוין בהפניה.
trip_type כן מגדירים את הערכים הבאים של TripType לסוג הטיול שיוצרים:
  • יעד יחיד: מגדירים את הערך SHARED או EXCLUSIVE.
  • כמה יעדים: מגדירים את הערך EXCLUSIVE.
  • אחת אחרי השנייה: מגדירים לערך EXCLUSIVE.
  • Shared pooling: מגדירים את הערך SHARED.
pickup_point כן נקודת המוצא של הנסיעה.
יעדים ביניים כן

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

vehicle_waypoints כן

נסיעות בשירות הסעות משותף בלבד: השדה הזה תומך בשילוב של נקודות ציון מכמה נסיעות. הוא מכיל את כל נקודות הדרך שנותרו לרכב שהוקצה, וגם את נקודות הדרך לאיסוף ולהורדה של הנסיעה הזו. כדי להגדיר את השדה הזה, אפשר להפעיל את CreateTrip או את UpdateTrip. אפשר גם לעדכן את ציוני הדרך של הרכב באמצעות השדה waypoints על ידי הפעלת השיטה UpdateVehicle. השירות לא מחזיר את המידע הזה בקריאות GetTrip מטעמי פרטיות.

number_of_passengers לא מספר הנוסעים בנסיעה.
dropoff_point לא היעד של הנסיעה.
vehicle_id לא המזהה של הרכב שהוקצה לנסיעה.

דוגמה: יצירת טיול רצוף

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

// A vehicle with ID 'my-vehicle' is already created and it is assigned to a trip with ID 'current-trip'.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String VEHICLE_ID =" my-vehicle";
static final String TRIP_ID = "back-to-back-trip");

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

String parent = "providers/" + PROJECT_ID;

Trip trip = Trip.newBuilder()
    .setTripType(TripType.EXCLUSIVE)
    .setPickupPoint(
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder()
                .setLatitude(-6.195139).setLongitude(106.820826)))
    .setDropoffPoint(
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder()
                .setLatitude(-6.1275).setLongitude(106.6537)))
    .setVehicleId(VEHICLE_ID)
    .build();

// Create trip request
CreateTripRequest createTripRequest = CreateTripRequest.newBuilder()
    .setParent(parent)
    .setTripId(TRIP_ID)
    .setTrip(trip)
    .build();

// Error handling.
try {
  // Fleet Engine automatically assigns a 'waypoints' list to the trip containing
  // the vehicle's current trip waypoints.
  Trip createdTrip =
      tripService.createTrip(createTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case ALREADY_EXISTS:
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

עדכון נסיעות צמודות

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

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

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

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

  • התקשרות אל getVehicle() מחזירה remainingWaypoints שכולל:
    א ניתוק ← ב איסוף ← ב ניתוק.
  • אחת מהפונקציות getTrip() או onTripRemainingWaypointsUpdated של קריאת החזרה (callback) של Trip A מחזירה את הערך remainingWaypoints, שמכיל את הפרטים הבאים:
    Drop-off.
  • הפונקציה getTrip() או הקריאה החוזרת onTripRemainingWaypointsUpdated של Trip B מחזירה את הערך remainingWaypoints שכולל:
    ‫Drop-off → B Pickup → וגם B Drop-off.

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