جستجوی وسایل نقلیه

به‌عنوان بخشی از سرویس سفر «جابه‌جایی درخواستی»، می‌توانید بااستفاده از روش SearchVehicles، وسایل نقلیه اطراف را پیدا کنید.

روش SearchVehicles به شما امکان می‌دهد وسایل نقلیه دردسترس اطراف را در برنامه تلفن همراه مصرف‌کننده خود پیدا کنید که برای یک درخواست سفر یا تحویل خاص مناسب‌تر هستند. SearchVehicles API فهرست رتبه‌بندی‌شده‌ای از وسایل نقلیه را برمی‌گرداند که مشخصه‌های آن‌ها با مشخصه‌های سفر درخواست‌شده مطابقت دارد. رتبه‌بندی براساس انتخاب شما از بین زمان تخمینی رسیدن، فاصله، یا فاصله مستقیم از نقطه سوار شدن مرتب می‌شود.

جستجوی مشخصه‌ها مشخصه‌های خودرو
  • مکان‌های تحویل گرفتن و تحویل دادن
  • انواع خودرو و سفر درخواست‌شده
  • ظرفیت موردنیاز
  • سایر مشخصه‌های منطبق الزامی
  • آخرین مکان معلوم خودرو
  • وضعیت، نوع، یا ظرفیت وسیله نقلیه
  • دیگر مشخصه‌های سفارشی

استفاده از روش SearchVehicles

برای استفاده از SearchVehicles، این فرایند کلی را دنبال کنید:

  1. براساس سفری که باید واگذار شود، SearchVehiclesRequest بسازید.
  2. با درخواست ساخته‌شده، SearchVehicles API‏ (vehicleService.searchVehicles) را فراخوانی کنید.
  3. SearchVehicleResponse برگشتی از میانای برنامه‌سازی کاربردی را پردازش کنید.

فیلدهای 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، فاصله مستقیم (نه در مسیر) بین خودرو و نقطه سوار کردن.
تعداد الزامی. حداکثر تعداد خودروها برای برگرداندن از ۱ تا ۵۰.
فیلتر کردن اختیاری. یک پُرسمان فیلتر برای اعمال هنگام جستجوی وسایل نقلیه.
maximum_staleness اختیاری. جستجو را فقط به خودروهایی محدود می‌کند که در مدت مشخص‌شده به‌روزرسانی‌های مکان را به Fleet Engine ارسال کرده‌اند. اگر این فیلد تنظیم نشده باشد، سرور از پنج دقیقه به‌عنوان مقدار پیش‌فرض استفاده می‌کند.

برای دیدن مجموعه کامل فیلدهای SearchVehicleRequest، به اسناد مرجع مراجعه کنید.

سناریوهای SearchVehiclesRequest

این بخش نمونه‌هایی از نحوه ساخت SearchVehiclesRequest را نشان می‌دهد.

برای مثال، فرض کنید مشتری می‌خواهد از «رستوران X» سوار شود، و شما چهار خودرو دارید:

  • خودرو ۱: ۳۵۰۰ متر فاصله از RestaurantX.
  • خودرو ۲: ۱۰۰ متر دورتر از RestaurantX با سفر فعال با سوار کردن و پیاده کردن در مکان‌های الف و ب.
  • خودرو ۳: ۲۰۰ متر فاصله از RestaurantX با یک تحویل باقی‌مانده در فاصله بسیار دور.
  • خودرو ۴: ۱۰۰۰ متر دورتر از RestaurantX.

در زیر درخواست‌های مختلف براساس خودرویی که برمی‌گردانند نشان داده شده است.

خودرو ۴ را برمی‌گرداند

     Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA
    

خودرو ۳ و ۴ را برمی‌گرداند

     Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, is_back_to_back enabled
    

خودرو ۲، ۳، و ۴ را برمی‌گرداند

     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 عمل می‌کند.

برای مثال، اگر خودرویی را جستجو کنید که حداقل ظرفیت آن ۶ نفر باشد و attributes را فیلتر کنید، مثلاً حیوان‌خانگی‌پذیر، معیارهای شما فقط خودروهایی را برمی‌گرداند که هم حیوان‌خانگی‌پذیر باشند و هم بتوانند حداقل ۶ مسافر را حمل کنند.

برای نحو پرسمان فیلتر، به AIP-160 برای نمونه‌ها مراجعه کنید. برای جزئیات مربوط به ایجاد مشخصه‌های خودرو، فیلد مشخصه‌های خودرو را در راهنمای به‌روزرسانی فیلدهای خودرو ببینید.

نمونه SearchVehicles

مثال زیر نحوه استفاده از SearchVehicles API را بااستفاده از کتابخانه 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.

قدم بعدی چیست