כחלק משירות הנסיעות Mobility on-demand, אתם יכולים למצוא כלי רכב בקרבת מקום באמצעות השיטה SearchVehicles.
השיטה SearchVehicles מאפשרת לכם למצוא באפליקציה לנייד של הצרכן כלי רכב זמינים בקרבת מקום, שהכי מתאימים לבקשה ספציפית לנסיעה או למשלוח. SearchVehicles API מחזיר רשימה מדורגת של כלי רכב שהמאפיינים שלהם תואמים למאפייני הנסיעה המבוקשים. הדירוג נקבע לפי זמן ההגעה המשוער, המרחק או המרחק בקו אווירי מנקודת האיסוף, בהתאם לבחירה שלכם.
| מאפייני חיפוש | מאפייני הרכב |
|---|---|
|
|
שימוש בשיטת SearchVehicles
כדי להשתמש ב-SearchVehicles, פועלים לפי התהליך הכללי הזה:
- יוצרים
SearchVehiclesRequestעל סמך הנסיעה שרוצים להקצות. - שולחים קריאה ל-API של
SearchVehicles(vehicleService.searchVehicles) עם הבקשה שנוצרה. - מעבדים את ה-
SearchVehicleResponseשמוחזר מה-API.
שדות של SearchVehiclesRequest
כדי ליצור SearchVehiclesRequest, צריך להשתמש בשדות החובה הבאים של המאפיין:
| שדה | תיאור |
|---|---|
| הורה | נדרש. הפורמט צריך להיות providers/{provider}. הספק צריך להיות מזהה הפרויקט של פרויקט Google Cloud שאליו משויך חשבון השירות שמבצע את הקריאה הזו. |
| vehicle_types | נדרש. סוגי כלי הרכב המבוקשים: AUTO, TWO_WHEELER, TAXI, TRUCK, BICYCLE או PEDESTRIAN. |
| trip_types | נדרש. EXCLUSIVE (נסיעה פעילה אחת בכל פעם לכל נהג) או SHARED (נסיעה אחת או יותר בכל פעם לכל נהג). |
| minimum_capacity | נדרש. הקיבולת המינימלית שנותרה ברכב לנסיעה חדשה, לנוסעים או למשלוחים. |
| pickup_point | נדרש. מיקום האיסוף של הנסיעה בקואורדינטות של קו רוחב/קו אורך. |
| dropoff_point | אופציונלי. מיקום ההורדה של הנסיעה בקואורדינטות של קו רוחב/אורך. השדה נדרש אם הערך של trip_types הוא TripType.SHARED. |
| pickup_radius_meters | נדרש. הרדיוס במטרים של אזור החיפוש של הרכב מנקודת האיסוף. |
| order_by | נדרש. מסדרים את כלי הרכב לפי אחת מהאפשרויות הבאות:
|
| ספירה | נדרש. המספר המקסימלי של כלי רכב שיוחזרו, מ-1 עד 50. |
| סינון | אופציונלי. שאילתת מסנן להחלה כשמחפשים כלי רכב. |
| maximum_staleness | אופציונלי. החיפוש מוגבל רק לכלי הרכב ששלחו עדכון לגבי מיקום ל-Fleet Engine במהלך משך הזמן שצוין. אם השדה הזה לא מוגדר, השרת משתמש בערך ברירת המחדל של חמש דקות. |
במאמרי העזרה בנושא SearchVehicleRequest מופיע סט מלא של השדות.
תרחישים של SearchVehiclesRequest
בקטע הזה מוצגות דוגמאות לאופן שבו יוצרים SearchVehiclesRequest.
לדוגמה, נניח שלקוח רוצה שיאספו אותו ממסעדה, ויש לכם ארבעה כלי רכב:
- רכב 1: במרחק 3,500 מטרים ממסעדה X.
- רכב 2: נמצא במרחק של 100 מטרים מ-RestaurantX, בנסיעה פעילה עם איסוף והורדה במיקומים א' וב'.
- רכב 3: במרחק 200 מטרים מ-RestaurantX, עם משלוח אחד שנותר במרחק רב מאוד.
- רכב 4: במרחק של 1,000 מטרים מ-RestaurantX.
בהמשך מוצגות בקשות שונות לפי הרכב שהן מחזירות.
רכב 4 להחזרה
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA
החזרת רכב 3 ו-4
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, is_back_to_back enabled
התוצאה: רכב 2, 3 ו-4
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, current_trips_present = ALL
השדות של SearchVehiclesResponse
SearchVehiclesResponse מורכב מרשימה של ישויות VehicleMatch, שמדורגות לפי המאפיין order_by שצוין ב-SearchVehiclesRequest. כל ישות מסוג VehicleMatch כוללת את השדות הבאים:
| שדה | תיאור |
|---|---|
| כלי רכב | האובייקט Vehicle, כולל המאפיינים vehicle_id ו-Vehicle. |
| vehicle_pickup_eta | זמן ההגעה המשוער של הרכב למיקום האיסוף, אם הנסיעה הזו הייתה מוקצית לרכב בזמן אמת. |
| vehicle_pickup_distance_meter | המרחק במטרים בין הרכב לבין מיקום האיסוף של הנסיעה החדשה. |
| vehicle_pickup_straight_line_distance_meter | המרחק בקו ישר במטרים בין הרכב לבין מיקום האיסוף של הנסיעה החדשה. |
| vehicle_dropoff_eta | זמן ההגעה המשוער של הרכב למיקום ההורדה, אם הנסיעה הזו הייתה מוקצית לרכב בזמן אמת. |
| vehicle_trips_waypoints | רשימה של נקודות ציון שנותרו, כולל נקודות איסוף ומסירה, לנסיעות הפעילות שמוקצות כרגע לרכב. |
| vehicle_match_type | סוג הנסיעה של הרכב: EXCLUSIVE, BACK_TO_BACK, CARPOOL או CARPOOL_BACK_TO_BACK. |
רשימה מלאה של שדות VehicleMatch
-
VehicleMatch message(gRPC) VehicleMatch resource(REST)
שימוש בשאילתות סינון
ב-SearchVehicles וב-ListVehicles אפשר לסנן לפי מאפייני הרכב באמצעות שאילתת סינון.
שאילתות סינון תומכות בסינון רק לפי מאפיינים מותאמים אישית של כלי רכב, ואי אפשר להשתמש בהן בשדות אחרים. כשמשתמשים בו בחיפוש שכולל קריטריונים אחרים של שדות, כמו minimum_capacity או vehicle_types, שאילתת הסינון פועלת כסעיף AND.
לדוגמה, אם מחפשים רכב עם קיבולת מינימלית של 6 נוסעים ומסננים לפי קריטריון attributes כמו 'מתאים לחיות מחמד', יופיעו רק רכבים שמתאימים לחיות מחמד ויכולים להסיע לפחות 6 נוסעים.
דוגמאות לתחביר של שאילתות סינון מופיעות במאמר AIP-160. פרטים על יצירת מאפייני רכב מופיעים בקטע שדה מאפייני הרכב במדריך עדכון שדות של רכב.
דוגמה ל-SearchVehicles
בדוגמה הבאה מוסבר איך להשתמש ב-API של SearchVehicles באמצעות ספריית Java gRPC. לרשימה המלאה של השפות הנתמכות, ראו
ספריות לקוח לשירותי נסיעה על פי דרישה.
static final String PROJECT_ID = "project-id";
VehicleServiceBlockingStub vehicleService =
VehicleService.newBlockingStub(channel);
String parent = "providers/" + PROJECT_ID;
SearchVehiclesRequest searchVehiclesRequest = SearchVehiclesRequest.newBuilder()
.setParent(parent)
.setPickupPoint( // Grand Indonesia East Mall
TerminalLocation.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
.setDropoffPoint( // Balai Sidang Jkt Convention Center
TerminalLocation.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.213796).setLongitude(106.807195)))
.setPickupRadiusMeters(2000)
.setCount(10)
.setMinimumCapacity(2)
.addTripTypes(TripType.EXCLUSIVE)
.addVehicleTypes(VehicleType.newBuilder().setCategory(Category.AUTO).build())
.setCurrentTripsPresent(CurrentTripsPresent.ANY)
.setFilter("attributes.on_trip=\"false\"")
.setOrderBy(VehicleMatchOrder.PICKUP_POINT_ETA)
.build();
try {
SearchVehiclesResponse searchVehiclesResponse =
vehicleService.searchVehicles(searchVehiclesRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
List<VehicleMatch> vehicleMatches =
searchVehicleResponse.getMatchesList();
// Each VehicleMatch contains a Vehicle entity and information about the
// distance and ETA to the pickup point and drop-off point.