بهعنوان بخشی از سرویس سفر «جابهجایی درخواستی»، میتوانید بااستفاده از روش SearchVehicles، وسایل نقلیه اطراف را پیدا کنید.
روش SearchVehicles به شما امکان میدهد وسایل نقلیه دردسترس اطراف را در برنامه تلفن همراه مصرفکننده خود پیدا کنید که برای یک درخواست سفر یا تحویل خاص مناسبتر هستند. SearchVehicles API فهرست رتبهبندیشدهای از وسایل نقلیه را برمیگرداند که
مشخصههای آنها با مشخصههای سفر درخواستشده مطابقت دارد. رتبهبندی براساس انتخاب شما از بین زمان تخمینی رسیدن، فاصله، یا فاصله مستقیم از نقطه سوار شدن مرتب میشود.
| جستجوی مشخصهها | مشخصههای خودرو |
|---|---|
|
|
استفاده از روش SearchVehicles
برای استفاده از SearchVehicles، این فرایند کلی را دنبال کنید:
- براساس سفری که باید واگذار شود،
SearchVehiclesRequestبسازید. - با درخواست ساختهشده،
SearchVehiclesAPI (vehicleService.searchVehicles) را فراخوانی کنید. 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 | الزامی. خودروها را براساس یکی از موارد زیر مرتب کنید:
|
| تعداد | الزامی. حداکثر تعداد خودروها برای برگرداندن از ۱ تا ۵۰. |
| فیلتر کردن | اختیاری. یک پُرسمان فیلتر برای اعمال هنگام جستجوی وسایل نقلیه. |
| 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، به این نشانی مراجعه کنید:
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.