חיפוש רכבים

כחלק משירות הנסיעות Mobility on-demand, אתם יכולים למצוא כלי רכב בקרבת מקום באמצעות השיטה SearchVehicles.

השיטה SearchVehicles מאפשרת לכם למצוא באפליקציה לנייד של הצרכן כלי רכב זמינים בקרבת מקום, שהכי מתאימים לבקשה ספציפית לנסיעה או למשלוח. ה-API של SearchVehicles מחזיר רשימה מדורגת של כלי רכב שהמאפיינים שלהם תואמים למאפייני הנסיעה המבוקשים. הדירוג נקבע לפי זמן ההגעה המשוער, המרחק או המרחק בקו אווירי מנקודת האיסוף, בהתאם לבחירה שלכם.

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

שימוש בשיטה SearchVehicles

כדי להשתמש ב-SearchVehicles, פועלים לפי התהליך הכללי הבא:

  1. יוצרים SearchVehiclesRequest על סמך הנסיעה שרוצים להקצות.
  2. שולחים קריאה ל-API של SearchVehicles (vehicleService.searchVehicles) עם הבקשה שנוצרה.
  3. מעבדים את ה-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 נדרש. מסדרים את כלי הרכב לפי אחת מהאפשרויות הבאות:
  • ‫PICKUP_POINT_ETA, זמן ההגעה המשוער של הרכב לנקודת האיסוף.
  • ‫PICKUP_POINT_DISTANCE, המרחק בין הרכב לנקודת האיסוף.
  • ‫DROPOFF_POINT_ETA, זמן ההגעה המשוער של הרכב להשלמת הנסיעה בנקודת ההורדה.
  • ‫PICKUP_POINT_STRAIGHT_DISTANCE, המרחק בקו ישר (לא במסלול) בין הרכב לנקודת האיסוף.
ספירה נדרש. המספר המקסימלי של כלי רכב שיוחזרו, מ-1 עד 50.
סינון אופציונלי. שאילתת סינון שמופעלת כשמחפשים כלי רכב.
maximum_staleness אופציונלי. החיפוש מוגבל רק לכלי הרכב ששלחו עדכון לגבי מיקום ל-Fleet Engine במהלך משך הזמן שצוין. אם השדה הזה לא מוגדר, השרת משתמש בערך ברירת המחדל של חמש דקות.

במאמרי העזרה מופיעה קבוצת השדות המלאה של SearchVehicleRequest.

תרחישים של SearchVehiclesRequest

בקטע הזה מוצגות דוגמאות ליצירת SearchVehiclesRequest.

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

  • רכב 1: במרחק 3,500 מטרים מ-RestaurantX.
  • רכב 2: נמצא במרחק של 100 מטרים מ-RestaurantX, בנסיעה פעילה עם איסוף והורדה במיקומים א' וב'.
  • רכב 3: במרחק 200 מטרים מ-RestaurantX, עם נקודת מסירה אחת שנותרה במרחק רב.
  • רכב 4: במרחק של 1,000 מטרים ממסעדה X.

למטה מוצגות בקשות שונות לפי הרכב שהן מחזירות.

מחזיר את רכב 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, ראו:

שימוש בשאילתות סינון

ב-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.

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