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

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

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

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

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

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

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

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

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