Tìm xe

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 cách sử dụng phương thức SearchVehicles.

Phương thức SearchVehicles cho phép bạn tìm thấy những xe đang hoạt động ở gần trong ứng dụng di động dành cho người tiêu dùng, phù hợp nhất với một yêu cầu cụ thể về chuyến đi hoặc yêu cầu giao hàng. API SearchVehicles trả về danh sách được xếp hạng gồm những chiếc xe có thuộc tính phù hợp với các 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, khoảng cách hoặc khoảng cách đường thẳng từ điểm đến lấy hàng.

Thuộc tính tìm kiếm Thuộc tính xe
  • Địa điểm nhận và trả xe
  • Loại phương tiện và loại chuyến đi được 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
  • 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

Sử dụng phương thức SearchVehicles

Để sử dụng SearchVehicles, hãy làm theo quy trình chung sau:

  1. Tạo một SearchVehiclesRequest dựa trên chuyến đi cần chỉ định.
  2. Gọi API SearchVehicles (vehicleService.searchVehicles) bằng yêu cầu đã tạo.
  3. Xử lý SearchVehicleResponse được trả về từ API.

Các 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ả
mẹ Bắt buộc. Phải ở định dạng 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. EXCLUSIVE (mỗi tài xế chỉ có thể 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ó thể có một hoặc nhiều chuyến đi đang hoạt động tại một thời điểm).
minimum_capacity Bắt buộc. Công suất còn lại tối thiểu của xe cho một chuyến đi mới, cho hành khách hoặc việc giao hàng.
pickup_point Bắt buộc. Vị trí đón khách 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 độ. Đây là trường 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:
  • PICKUP_POINT_ETA, thời gian dự kiến đến điểm lấy hàng của xe.
  • PICKUP_POINT_DISTANCE, khoảng cách giữa xe và điểm đến lấy hàng.
  • DROPOFF_POINT_ETA, thời gian dự kiến đến của xe để hoàn thành chuyến đi tại điểm trả khách.
  • PICKUP_POINT_STRAIGHT_DISTANCE, khoảng cách theo đường thẳng (không phải 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 cần trả về là từ 1 đến 50.
filter Không bắt buộc. Một cụm từ tìm kiếm bộ lọc để áp dụng khi tìm kiếm xe.
maximum_staleness Không bắt buộc. Giới hạn phạm vi tìm kiếm chỉ ở những xe đã gửi thông tin cập nhật vị trí đến 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 giá trị mặc định là 5 phút.

Tham khảo Tài liệu tham khảo để xem toàn bộ các trường SearchVehicleRequest.

Các trường hợp SearchVehiclesRequest

Phần này cho thấy ví dụ về cách tạo một 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 3.500 m.
  • Xe 2: Cách RestaurantX 100 m, đang 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 RestaurantX 200 m và còn một điểm trả hàng rất xa.
  • Xe 4: Cách RestaurantX 1000 m.

Sau đây là các yêu cầu khác nhau theo phương tiện 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
    

Các 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 được chỉ định trong SearchVehiclesRequest. Mỗi thực thể VehicleMatch đều có các trường sau:

Trường Mô tả
xe cộ Đối tượng Vehicle, bao gồm các thuộc tính vehicle_id và Vehicle.
vehicle_pickup_eta Thời gian dự kiến đế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 theo đườ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 dự kiến đến của xe tại vị trí trả hàng nếu chuyến đi này được giao 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 những 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:

Sử dụng truy vấn bộ lọc

SearchVehiclesListVehicles hỗ trợ lọc theo thuộc tính xe bằng truy vấn bộ lọc.

Cụm từ tìm kiếm bộ lọc CHỈ hỗ trợ lọc theo 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 cụm từ tìm kiếm có chứa các tiêu chí khác về trường, chẳng hạn như minimum_capacity hoặc vehicle_types, cụm từ tìm kiếm 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 người và lọc một attributes như cho phép mang theo thú cưng, thì tiêu chí của bạn sẽ chỉ trả về những chiếc xe vừa cho phép mang theo 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 ví dụ. Để biết thông tin chi tiết về cách tạo thuộc tính xe, hãy xem Trường 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 minh hoạ cách sử dụng API SearchVehicles bằng thư viện gRPC Java.

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.

Bước tiếp theo