Đang tìm người lái xe ở gần

Trong Giải pháp gọi xe và phân phối theo yêu cầu, chức năng Lên kế hoạch và điều phối tuyến đường cho phép bạn tìm thấy những người lái xe ở gần bằng cách cung cấp API SearchVehicles.

API SearchVehicles cho phép bạn tìm những tài xế lân cận hiện có trong ứng dụng người tiêu dùng Giải pháp gọi xe và giao hàng theo yêu cầu phù hợp nhất với một nhiệm vụ như gọi xe hoặc yêu cầu giao hàng. API SearchVehicles trả về danh sách tài xế được xếp hạng phù hợp với thuộc tính nhiệm vụ với thuộc tính của xe trong đội xe của bạn.

Các thuộc tính của việc cần làm có thể bao gồm:

  • Vị trí nhận xe và trả xe
  • Loại phương tiện và chuyến đi đã yêu cầu
  • Dung lượng bắt buộc
  • Các thuộc tính so khớp bắt buộc khác

Các thuộc tính xe có thể bao gồm:

  • Vị trí xác định gần đây nhất của xe
  • Trạng thái, loại hoặc sức chứa của xe
  • Các thuộc tính tuỳ chỉnh khác

Thứ hạng được sắp xếp theo lựa chọn của bạn về giờ đến dự kiến, khoảng cách hoặc khoảng cách theo đường thẳng tính từ điểm đón.

Xin lưu ý rằng bạn phải có các đặc quyền của Người dùng SDK người tiêu dùng hoặc người dùng cao cấp dịch vụ Fleet Engine để sử dụng API SearchVehicles. Để biết thêm thông tin, hãy xem phần Xác thực và uỷ quyền.

Sử dụng API Searchvehicles

Cách sử dụng API SearchVehicles:

  • Tạo SearchVehiclesRequest dựa trên tác vụ được giao.
  • Hãy gọi API SearchVehicles (vehicleService.searchVehicles) với yêu cầu đã tạo.
  • Xử lý SearchVehicleResponse mà 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 Nội dung mô tả
parent Bắt buộc. Phải ở định dạng provider/{provider}. Nhà cung cấp phải là Mã dự án (ví dụ: sample-cloud-project) của dự án trên Google Cloud mà tài khoản dịch vụ thực hiện cuộc gọi này là thành viên.
vehicle_types Bắt buộc. Các loại phương tiện được yêu cầu: TỰ ĐỘNG, TWO_WHEELER, TAXI, XE TẢI, XE ĐẠP hoặc NGƯỜI ĐI BỘ.
trip_types Bắt buộc. ĐỘC QUYỀN (một chuyến đi đang hoạt động tại một thời điểm cho mỗi tài xế) hoặc ĐƯỢC CHIA SẺ (một hoặc nhiều chuyến đi một lúc cho mỗi tài xế).
minimum_capacity Bắt buộc. Sức chứa tối thiểu còn lại của xe cho một nhiệm vụ mới, dù là chở khách hoặc giao hàng.
pickup_point Bắt buộc. Vị trí nhận nhiệm vụ theo toạ độ vĩ độ/kinh độ.
dropoff_point Không bắt buộc. Vị trí bỏ ngang của tác vụ 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 ở khu vực tìm kiếm xe tính từ điểm đón.
order_by Bắt buộc. Đặt hàng xe theo một trong các phương thức sau:
  • CHOOSEUP_POINT_ETA, giờ đến dự kiến của xe tại điểm đón.
  • CHOOSEUP_POINT_DISTANCE, khoảng cách giữa xe và điểm đón.
  • DROPOFF_POINT_ETA, giờ đến dự kiến của xe để hoàn thành chuyến đi tại điểm trả xe.
  • CHOOSEUP_POINT_STRAIGHT_DISTANCE, khoảng cách theo đường thẳng (không nằm trên tuyến đường) giữa xe và điểm đón.
số lượng Bắt buộc. Số lượng xe tối đa để trả lại là 1 đến 50.

Hãy tham khảo Tài liệu tham khảo để xem tập hợp đầy đủ SearchVehicleRequestfields.

Ví dụ về SearchvehiclesRequest

Phần này trình bày các ví dụ về cách tạo SearchVehiclesRequest.

Ví dụ: giả sử bạn cần giao một nhiệm vụ đến lấy hàng tại RestaurantX và 4 xe:

  • Xe 1, cách RestaurantX 3.500 m.
  • Xe 2, cách RestaurantX 100 m và đang chạy một chuyến, có thể đến lấy và trả xe tại vị trí A và B.
  • Xe 3, cách RestaurantX 200 m và còn một lần trả xe ở rất xa.
  • Xe 4, cách RestaurantX 1000 m.

SearchVehiclesRequest sau đây trả về Xe 4:

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

SearchVehiclesRequest sau đây trả về Xe 3 và 4:

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

SearchVehiclesRequest sau đây 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 Nội dung mô tả
xe cộ Đối tượng Vehicle, bao gồm cả các thuộc tínhvehicle_id và Vehicle.
vehicle_pickup_eta Giờ đến dự kiến của xe tại vị trí đón của nhiệm vụ mới. Đây là thời gian dự kiến lái xe.
vehicle_pickup_distance_meter Khoảng cách tính bằng mét giữa xe và vị trí đón của nhiệm vụ mới.
vehicle_pickup_straight_line_distance_meter Khoảng cách theo đường thẳng tính bằng mét giữa xe và vị trí đón của nhiệm vụ mới.
vehicle_dropoff_eta Dấu thời gian của thời gian đến dự kiến của xe tại vị trí đón khách của nhiệm vụ mới. Lưu ý rằng ETA là ETA lái xe.
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ả xe, 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: EXCLUSIVE, BACK_TO_BACK, CarPOOL hoặc CARPOOL_BACK_TO_BACK.

Ví dụ về Tìm kiếm xe

Ví dụ sau đây cho thấy cách sử dụng API SearchVehicles:

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.