במסמך הזה מוסבר איך ליצור נסיעה עם כמה יעדים, להגדיר את הנסיעה הנכונה שדות, ולהקצות אותו לרכב למילוי. ההנחה היא שהגדרת את Fleet מנוע, יצרתם כלי רכב, יש לכם אפליקציית נהג תקינה (אופציונלי) אפליקציה לצרכן. כדאי להכיר גם את הנסיעות השונות תרחישים שזמינים לנסיעות על פי דרישה. אפשר לעיין במדריכים הקשורים הבאים לגבי ש:
- הגדרת Fleet Engine
- יצירת רכב
- תרחישי נסיעות בסקירה הכללית של נסיעות על פי דרישה
יסודות של יצירת נסיעות
בקטע הזה מתוארים פרטי הבקשה שדרושים ליצירת נסיעה ב: מנוע Fleet. יוצרים בקשת יצירה באמצעות gRPC ו-REST.
שדות נסיעה
צריך להשתמש בשדות הבאים כדי ליצור נסיעה ב-Fleet Engine. אפשר להשתמש בשדות שונים לסוגים השונים של נסיעות: נסיעות ליעד אחד או למספר יעדים, נסיעות ברצף או נסיעות משותפות בקבוצה. שלך יכול לספק את השדות האופציונליים כשיוצרים את הנסיעה, או להגדיר אותם מאוחר יותר כשתעדכנו את הנסיעה.
שם | נדרש? | תיאור |
---|---|---|
parent | כן | מחרוזת שכוללת את מזהה הפרויקט. המזהה הזה צריך להיות זהה למזהה שבו אתם משתמשים בכל השילוב של Fleet Engine, עם אותם תפקידים בחשבון השירות. |
trip_id | כן | מחרוזת שנוצרה לזיהוי ייחודי של הנסיעה. יש למזהי נסיעות הגבלות מסוימות, כפי שמצוין בחומר העזר. |
trip_type | כן | מגדירים את TripType לערכים הבאים בהתאם לסוג הנסיעה שיוצרים:
|
pickup_point | כן | נקודת המוצא של הנסיעה. |
יעדי ביניים | כן | נסיעות עם כמה יעדים בלבד: רשימת היעדים הביניים שהנהג פוקד בין האיסוף להורדה. בדומה ל- |
vehicle_waypoints | כן | נסיעות בשירות 'נסיעות משותפות' בלבד: השדה הזה תומך בשילוב של נקודות העצירה מכמה נסיעות.
היא מכילה את כל ציוני הדרך שנותרו בכלי הרכב, וגם
בתור נקודות הדרך לאיסוף ולהורדה בנסיעה הזו. אפשר להגדיר את השדה הזה
באמצעות התקשרות אל |
number_of_passengers | לא | מספר הנוסעים בנסיעה. |
dropoff_point | לא | יעד הנסיעה. |
vehicle_id | לא | המזהה של הרכב שהוקצה לנסיעה. |
דוגמה: יצירת נסיעה עם כמה יעדים
בהמשך מוסבר איך יוצרים נסיעה בלעדית עם כמה יעדים, עם נקודת איסוף, נקודת הורדה ויעד ביניים אחד.
static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "multi-destination-trip-A";
TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);
// Trip initial settings.
String parent = "providers/" + PROJECT_ID;
Trip trip = Trip.newBuilder()
.setTripType(TripType.EXCLUSIVE)
.setPickupPoint(
TerminalLocation.newBuilder().setPoint(
LatLng.newBuilder()
.setLatitude(-6.195139).setLongitude(106.820826)))
.setNumberOfPassengers(1)
.setDropoffPoint(
TerminalLocation.newBuilder().setPoint(
LatLng.newBuilder()
.setLatitude(-6.1275).setLongitude(106.6537)))
// Add the list of intermediate destinations.
.addAllIntermediateDestinations(
ImmutableList.of(
TerminalLocation.newBuilder().setPoint(
LatLng.newBuilder()
.setLatitude(-6.195139).setLongitude(106.820826)).build()))
.build();
// Create the Trip request.
CreateTripRequest createTripRequest = CreateTripRequest.newBuilder()
.setParent(parent)
.setTripId(TRIP_ID) // Trip ID assigned by the Provider server.
.setTrip(trip) // Initial state is NEW.
.build();
// Error handling.
try {
Trip createdTrip =
tripService.createTrip(createTripRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS: // Trip already exists.
break;
case PERMISSION_DENIED:
break;
}
return;
}
עדכון נסיעה עם כמה יעדים
צריך להגדיר את הנסיעה עם מזהה רכב כדי ש-Fleet Engine יוכל לעקוב אחרי הנסיעה את הרכב לאורך המסלול. מידע נוסף על עדכון נסיעה זמין במאמר הבא: עדכון נסיעות וניהול המצב שלהן.
אם לא תציינו יעדי נטישה או יעדי ביניים ליצור את הנסיעה, תמיד אפשר לעשות זאת בשלב הזה.
דוגמה לעדכון נסיעה
בדוגמה הבאה מוסבר איך לעדכן נסיעה כדי להוסיף רשימה של יעדים ביניים ולהגדיר מזהה רכב.
static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "multi-destination-trip-A";
String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;
TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);
// The trip settings to be updated.
Trip trip = Trip.newBuilder()
// Add the list of intermediate destinations.
.addAllIntermediateDestinations(
ImmutableList.of(
TerminalLocation.newBuilder().setPoint(
LatLng.newBuilder()
.setLatitude(-6.195139).setLongitude(106.820826)).build()))
.setVehicleId("8241890")
.build();
// The trip update request.
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
.setName(tripName)
.setTrip(trip)
.setUpdateMask(
FieldMask.newBuilder()
.addPaths("intermediate_destinations")
.addPaths("vehicle_id")
.build())
.build();
// Error handling.
try {
Trip updatedTrip =
tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND: // The trip doesn't exist.
break;
case PERMISSION_DENIED:
break;
}
return;
}
ניהול מצב הנסיעה בנסיעות עם כמה יעדים
אתם מציינים את מצב הנסיעה באמצעות אחת מהספירה של TripStatus
ערכים. כשמצב הנסיעה משתנה, למשל מENROUTE_TO_PICKUP
אל
ARRIVED_AT_PICKUP
, חובה לעדכן את מצב הנסיעה ב-Fleet Engine. נסיעה
המצב מתחיל תמיד בערך של NEW
ומסתיים בערך של
COMPLETE
או CANCELED
.
בנסיעה עם כמה יעדים, בנוסף לעדכון מצב הנסיעה כמו בנסיעה עם יעד יחיד, צריך לעדכן גם את הפרטים הבאים בכל פעם שהרכב מגיע ליעד ביניים:
intermediateDestinationIndex
intermediateDestinationsVersion
כדי לעשות זאת, משתמשים בערכים הבאים מהספירה TripStatus
.
ENROUTE_TO_PICKUP
ARRIVED_AT_PICKUP
ENROUTE_TO_INTERMEDIATE_DESTINATION
ARRIVED_AT_INTERMEDIATE_DESTINATION
ENROUTE_TO_DROPOFF
COMPLETE
נסיעה לדוגמה עם יעדי ביניים
בהמשך מוסבר איך יוצרים נסיעה עם כמה יעדים, שעברה את נקודת האיסוף ועכשיו בדרך ליעד הביניים הראשון.
static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "multi-destination-trip-A";
String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;
// Get the trip object from either the Fleet Engine or storage.
Trip trip = …;
TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);
// The trip settings to be updated.
Trip trip = Trip.newBuilder()
// Trip status cannot return to a previous state once it has passed.
.setTripStatus(TripStatus.ENROUTE_TO_INTERMEDIATE_DESTINATION)
// Enroute to the first intermediate destination.
.setIntermediateDestinationIndex(0)
// You must provide an intermediate_destinations_version to ensure that you
// have the same intermediate destinations list as the Fleet Engine.
.setIntermediateDestinationsVersion(
trip.getIntermediateDestinationsVersion())
.build();
// The trip update request.
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
.setName(tripName)
.setTrip(trip)
.setUpdateMask(
FieldMask.newBuilder()
.addPaths("trip_status")
.addPaths("intermediate_destination_index")
// intermediate_destinations_version must not be in the update mask.
.build())
.build();
// Error handling.
try {
Trip updatedTrip =
tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND: // The trip doesn't exist.
break;
case FAILED_PRECONDITION: // Either the trip status is invalid, or the
// intermediate_destinations_version doesn't
// match Fleet Engine's.
break;
case PERMISSION_DENIED:
break;
}
return;
}