Trong dịch vụ chuyến đi theo yêu cầu của Mobility, bạn có thể tìm thấy các phương tiện ở gần bằng phương thức SearchVehicles.
Phương thức SearchVehicles cho phép bạn tìm thấy các phương tiện ở gần hiện có trong ứng dụng di động dành cho người tiêu dùng, phù hợp nhất với một chuyến đi cụ thể hoặc yêu cầu giao hàng. API SearchVehicles trả về danh sách các phương tiện được xếp hạng có thuộc tính khớp với thuộc tính của chuyến đi được yêu cầu. Thứ hạng được sắp xếp theo lựa chọn của bạn về thời gian đến dự kiến (ETA), khoảng cách hoặc khoảng cách đường thẳng từ điểm đón.
| Thuộc tính tìm kiếm | Thuộc tính xe |
|---|---|
|
|
Sử dụng phương thức SearchVehicles
Để sử dụng SearchVehicles, hãy làm theo quy trình chung sau:
- Tạo một
SearchVehiclesRequestdựa trên chuyến đi cần chỉ định. - Gọi API
SearchVehicles(vehicleService.searchVehicles) bằng yêu cầu đã tạo. - Xử lý
SearchVehicleResponsedo API trả về.
Trường SearchVehiclesRequest
Sử dụng các trường thuộc tính bắt buộc sau đây để tạo SearchVehiclesRequest:
| Trường | Mô tả |
|---|---|
| parent | Bắt buộc. Định dạng hợp lệ là providers/{provider}. Nhà cung cấp phải là Mã dự án của Dự án Google Cloud mà tài khoản dịch vụ thực hiện lệnh gọi này là thành viên. |
| vehicle_types | Bắt buộc. Các loại xe được yêu cầu, có thể là AUTO, TWO_WHEELER, TAXI, TRUCK, BICYCLE hoặc PEDESTRIAN. |
| trip_types | Bắt buộc. Có thể là EXCLUSIVE (mỗi tài xế chỉ có một chuyến đi đang hoạt động tại một thời điểm) hoặc SHARED (mỗi tài xế có một hoặc nhiều chuyến đi tại một thời điểm). |
| minimum_capacity | Bắt buộc. Sức chứa còn lại tối thiểu của xe cho một chuyến đi mới, có thể là cho hành khách hoặc giao hàng. |
| pickup_point | Bắt buộc. Vị trí đón của chuyến đi theo toạ độ vĩ độ/kinh độ. |
| dropoff_point | Không bắt buộc. Vị trí trả khách của chuyến đi theo toạ độ vĩ độ/kinh độ. Trường này là bắt buộc nếu trip_types chứa TripType.SHARED. |
| pickup_radius_meters | Bắt buộc. Bán kính (tính bằng mét) của khu vực tìm kiếm xe từ điểm đón. |
| order_by | Bắt buộc. Sắp xếp xe theo một trong những tiêu chí sau:
|
| count | Bắt buộc. Số lượng xe tối đa cần trả về, từ 1 đến 50. |
| filter | Không bắt buộc. Một truy vấn bộ lọc để áp dụng khi tìm kiếm xe. |
| maximum_staleness | Không bắt buộc. Giới hạn tìm kiếm chỉ đối với những xe đã gửi thông tin cập nhật vị trí cho Fleet Engine trong khoảng thời gian được chỉ định. Nếu bạn không đặt trường này, thì máy chủ sẽ sử dụng 5 phút làm giá trị mặc định. |
Hãy tham khảo tài liệu tham khảo để xem toàn bộ tập hợp các trường SearchVehicleRequest.
Các trường hợp SearchVehiclesRequest
Phần này trình bày các ví dụ về cách tạo SearchVehiclesRequest.
Ví dụ: giả sử một khách hàng muốn được đón tại Nhà hàng X và bạn có 4 chiếc xe:
- Xe 1: cách Nhà hàng X 3500 m.
- Xe 2: cách Nhà hàng X 100 m, có một chuyến đi đang hoạt động với điểm đón và trả khách tại vị trí A và B.
- Xe 3: cách Nhà hàng X 200 m, có một điểm trả khách còn lại ở rất xa.
- Xe 4: cách Nhà hàng X 1000 m.
Sau đây là các yêu cầu khác nhau theo xe mà chúng trả về.
Trả về Xe 4
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA
Trả về Xe 3 và 4
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, is_back_to_back enabled
Trả về Xe 2, 3 và 4
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, current_trips_present = ALL
Trường SearchVehiclesResponse
SearchVehiclesResponse bao gồm một danh sách các thực thể VehicleMatch, được xếp hạng theo thuộc tính order_by đã chỉ định trong SearchVehiclesRequest. Mỗi thực thể VehicleMatch có các trường sau:
| Trường | Mô tả |
|---|---|
| vehicle | Đối tượng Vehicle, bao gồm vehicle_id và các thuộc tính Vehicle. |
| vehicle_pickup_eta | Giờ đến dự kiến của xe tại vị trí đón nếu chuyến đi này được chỉ định cho xe ngay bây giờ. |
| vehicle_pickup_distance_meter | Khoảng cách (tính bằng mét) giữa xe và vị trí đón của chuyến đi mới. |
| vehicle_pickup_straight_line_distance_meter | Khoảng cách đường thẳng (tính bằng mét) giữa xe và vị trí đón của chuyến đi mới. |
| vehicle_dropoff_eta | Thời gian đến dự kiến của xe tại vị trí trả khách nếu chuyến đi này được chỉ định cho xe ngay bây giờ. |
| vehicle_trips_waypoints | Danh sách các điểm tham chiếu còn lại, bao gồm cả điểm đón và trả khách, cho các chuyến đi đang hoạt động hiện được chỉ định cho xe. |
| vehicle_match_type | Loại chuyến đi của xe, có thể là EXCLUSIVE, BACK_TO_BACK, CARPOOL hoặc CARPOOL_BACK_TO_BACK. |
Để xem danh sách đầy đủ các trường VehicleMatch, hãy xem:
VehicleMatch message(gRPC)VehicleMatch resource(REST)
Sử dụng truy vấn bộ lọc
SearchVehicles và ListVehicles hỗ trợ lọc các thuộc tính xe bằng truy vấn bộ lọc.
Truy vấn bộ lọc CHỈ hỗ trợ lọc các thuộc tính tuỳ chỉnh cho xe và không thể dùng cho các trường khác. Khi được dùng trong một nội dung tìm kiếm có chứa các tiêu chí trường khác, chẳng hạn như minimum_capacity hoặc vehicle_types, truy vấn bộ lọc sẽ hoạt động như một mệnh đề AND.
Ví dụ: nếu bạn tìm kiếm một chiếc xe có sức chứa tối thiểu là 6 và lọc một attributes như thân thiện với thú cưng, thì tiêu chí của bạn sẽ chỉ trả về những chiếc xe vừa thân thiện với thú cưng vừa có thể chở ít nhất 6 hành khách.
Để biết cú pháp truy vấn bộ lọc, hãy xem AIP-160 để biết các ví dụ. Để biết thông tin chi tiết về cách tạo thuộc tính xe, hãy xem Thuộc tính xe trong hướng dẫn Cập nhật trường xe.
Ví dụ về SearchVehicles
Ví dụ sau đây cho biết cách sử dụng API SearchVehicles bằng
thư viện gRPC Java. Để xem danh sách đầy đủ các ngôn ngữ được hỗ trợ, hãy xem
Thư viện ứng dụng cho các dịch vụ chuyến đi theo yêu cầu.
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.