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

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

יסודות של יצירת נסיעות

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

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

שדות של נסיעות

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

שדות של נסיעות
שם נדרש? תיאור
parent כן מחרוזת שכוללת את מזהה הפרויקט. המזהה הזה צריך להיות זהה למזהה שבו אתם משתמשים בכל השילוב של Fleet Engine, עם אותם תפקידים בחשבון השירות.
trip_id כן מחרוזת שיוצרים שמזהה באופן ייחודי את הנסיעה הזו. על מזהי הנסיעות יש הגבלות מסוימות, כפי שמצוין בחומר העזר.
trip_type כן מגדירים את TripType לערכים הבאים לסוג הנסיעה שיוצרים:
  • יעד יחיד: מגדירים את הערך SHARED או EXCLUSIVE.
  • ריבוי יעדים: מגדירים את הערך EXCLUSIVE.
  • Back-to-back: מגדירים לערך 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 שמכילה את:
    A Drop-offB pickupB Drop-off.
  • הערך getTrip() או הקריאה החוזרת onTripRemainingWaypointsUpdated של Trip A מחזירה remainingWaypoints שמכילים:
    נטישה.
  • getTrip() או הפונקציה הלא פוליגונמית onTripRemainingWaypointsUpdated של נסיעה B מחזירות את remainingWaypoints שמכיל את:
    A Drop-offB Pickup → ו-B Drop-off.

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