بهعنوان بخشی از سرویس سفر «جابهجایی درخواستی»، میتوانید بااستفاده از روش SearchVehicles وسایل نقلیه اطراف را پیدا کنید.
روش SearchVehicles به شما امکان میدهد وسایل نقلیه دردسترس در نزدیکیتان را در
برنامه تلفن همراه مصرفکننده پیدا کنید که برای سفر یا درخواست
تحویل خاصی مناسبتر هستند. میانای برنامهسازی کاربردی SearchVehicles فهرستی رتبهبندیشده از وسایل نقلیه برمیگرداند که
مشخصههای آنها با مشخصههای سفر درخواستی مطابقت دارد. رتبهبندی براساس انتخاب شما از بین
زمان تخمینی رسیدن، فاصله، یا فاصله مستقیم از نقطه تحویل سفارش داده میشود.
| جستجوی مشخصهها | مشخصههای خودرو |
|---|---|
|
|
استفاده از روش SearchVehicles
برای استفاده از SearchVehicles، این فرایند کلی را دنبال کنید:
-
SearchVehiclesRequestرا براساس سفر اختصاص دادهشده بسازید. - با درخواست ساختهشده،
SearchVehiclesAPI (vehicleService.searchVehicles) را فراخوانی کنید. SearchVehicleResponseبرگشتی از API را پردازش کنید.
فیلدهای SearchVehiclesRequest
از فیلدهای مشخصه الزامی زیر برای ساختن
SearchVehiclesRequest استفاده کنید:
| فیلد | شرح |
|---|---|
| ولی | الزامی. باید در قالب providers/{provider} باشد. ارائهدهنده باید «شناسه پروژه» Google Cloud Project باشد که حساب سرویسِ برقرارکننده این تماس عضو آن است. |
| vehicle_types | الزامی. انواع وسایل نقلیه درخواستی، یا AUTO، TWO_WHEELER، TAXI، TRUCK، BICYCLE، یا PEDESTRIAN. |
| trip_types | الزامی. یا «انحصاری» (هر راننده در هر زمان یک سفر فعال دارد) یا «اشتراکی» (هر راننده در هر زمان یک یا چند سفر دارد). |
| minimum_capacity | الزامی. حداقل ظرفیت باقیمانده خودرو برای سفر جدید، چه برای مسافر و چه برای ارسال. |
| pickup_point | الزامی. مکان سوار شدن در سفر با مختصات طول/عرض جغرافیایی. |
| dropoff_point | اختیاری. مکان پیاده شدن سفر در مختصات عرض/طول جغرافیایی. اگر trip_types حاوی TripType.SHARED باشد، این فیلد الزامی است. |
| pickup_radius_meters | الزامی. شعاع محل جستجوی خودرو از نقطه سوار شدن به متر. |
| order_by | الزامی. خودروها را براساس یکی از موارد زیر مرتب کنید:
|
| تعداد | الزامی. حداکثر تعداد وسایل نقلیه برای برگشتن از ۱ تا ۵۰. |
| فیلتر کردن | اختیاری. پُرسمان فیلتری که هنگام جستجوی وسایل نقلیه اعمال میشود. |
| maximum_staleness | اختیاری. جستجو را به خودروهایی محدود میکند که بهروزرسانیهای مکان را در مدت زمان مشخصشده به Fleet Engine ارسال کردهاند. اگر این فیلد تنظیم نشده باشد، سرور از پنج دقیقه بهعنوان مقدار پیشفرض استفاده میکند. |
برای دیدن مجموعه کامل فیلدهای SearchVehicleRequest، به «مستندات مرجع» مراجعه کنید.
سناریوهای SearchVehiclesRequest
این بخش نمونههایی از نحوه ساخت SearchVehiclesRequest را نشان میدهد.
برای مثال، فرض کنید مشتری میخواهد در «رستوران X» سوار شود، و شما چهار وسیله نقلیه دارید:
- خودرو ۱: ۳۵۰۰ متر دورتر از «رستوران X».
- خودرو ۲: ۱۰۰ متر دورتر از RestaurantX با سفر فعال با سوار کردن و پیاده کردن در مکانهای الف و ب.
- خودروی ۳: ۲۰۰ متر دورتر از RestaurantX با یک توقف باقیمانده در فاصلهای بسیار دور.
- خودرو ۴: ۱۰۰۰ متر دورتر از «رستوران X».
در زیر درخواستهای مختلف براساس خودرویی که برمیگردانند نمایش داده شده است.
برگشت خودرو ۴
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، به این نشانی مراجعه کنید:
VehicleMatch message(gRPC)VehicleMatch resource(REST)
استفاده از پرسمانهای فیلتر
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.