근처 운전자 찾기

주문형 차량 공유 및 배송 솔루션의 일부로 경로 계획 및 전달 기능을 사용하면 SearchVehicles API를 제공하여 근처 운전자를 찾을 수 있습니다.

SearchVehicles API를 사용하면 주문형 차량 공유 및 배송 솔루션 소비자 앱에서 차량 공유 또는 배달 요청과 같은 작업에 가장 적합한 주변 운전자를 찾을 수 있습니다. SearchVehicles API는 Fleet의 차량 속성과 작업 속성과 일치하는 운전자의 순위 목록을 반환합니다.

작업 속성에는 다음이 포함될 수 있습니다.

  • 승차 및 하차 위치
  • 요청한 차량 및 이동 유형
  • 필요한 인원
  • 기타 필수 일치 속성

차량 속성에는 다음이 포함될 수 있습니다.

  • 마지막으로 알려진 차량의 위치
  • 차량 상태, 유형 또는 용량
  • 기타 맞춤 속성

순위는 승차 지점으로부터의 도착예정시간, 거리 또는 직선 거리를 기준으로 정렬됩니다.

SearchVehicles API를 사용하려면 Fleet Engine 서비스 수퍼유저 또는 소비자 SDK 사용자 권한이 있어야 합니다. 자세한 내용은 인증 및 승인을 참조하세요.

SearchVehicles API 사용

SearchVehicles API를 사용하려면 다음 안내를 따르세요.

  • 할당할 작업에 기반하여 SearchVehiclesRequest를 구성합니다.
  • 구성된 요청으로 SearchVehicles API (vehicleService.searchVehicles)를 호출합니다.
  • API에서 반환된 SearchVehicleResponse를 처리합니다.

SearchVehiclesRequest 필드

다음 필수 속성 필드를 사용하여 SearchVehiclesRequest를 구성합니다.

필드 설명
parent 필수사항: provider/{provider} 형식이어야 합니다. 제공업체는 이 호출을 수행하는 서비스 계정이 구성원인 Google Cloud 프로젝트의 프로젝트 ID (예: sample-cloud-project)여야 합니다.
vehicle_types 필수사항: 요청된 차량 유형(자동, TWO_WHEELER, 택시, 트럭, 자전거, 보행자)
trip_types 필수사항: EXCLUSIVE (운전자 1명당 한 번에 한 개의 활성화된 이동) 또는 SHARED (운전자당 한 번에 1회 또는 복수의 이동)입니다.
minimum_capacity 필수사항: 승객 또는 배달을 위한 새 작업을 위한 차량의 최소 잔여 수용량입니다.
pickup_point 필수사항: 작업의 승차 위치입니다(위도/경도 좌표).
dropoff_point 선택사항입니다. 위도/경도 좌표에서 작업의 하차 위치입니다. trip_types에 TripType.SHARED가 포함된 경우 필수 입력란입니다.
pickup_radius_meters 필수사항: 승차 지점에서 차량 검색 영역의 반경입니다(미터 단위).
order_by 필수사항: 다음 중 한 가지 방법으로 차량을 주문합니다.
  • PICKUP_POINT_ETA: 승차 지점에서의 차량 도착예정시간.
  • PICKUP_POINT_DISTANCE: 차량과 승차 지점 사이의 거리입니다.
  • DROPOFF_POINT_ETA: 하차 지점에서 이동을 완료하기 위한 차량의 도착예정시간입니다.
  • PICKUP_POINT_STRAIGHT_DISTANCE: 차량과 승차 지점 사이의 직선 거리 (경로에 포함되지 않음)
필수사항: 1개에서 50대까지 반환할 최대 차량 수입니다.

SearchVehicleRequestfields의 전체 세트를 보려면 참조 문서를 확인하세요.

SearchVehiclesRequest 예시

이 섹션에서는 SearchVehiclesRequest를 구성하는 방법의 예를 보여줍니다.

예를 들어 RestaurantX와 4대의 차량에 할당되는 픽업 작업이 있다고 가정해 보겠습니다.

  • 차량 1: RestaurantX에서 3, 500m 거리에 있습니다.
  • 차량 2: RestaurantX에서 100m 거리에 있으며 위치 A와 B에서 승차 및 하차할 수 있는 이동이 진행 중입니다.
  • 차량 3: RestaurantX에서 200m 거리에 있으며 아주 멀리 하차가 하나 남아 있습니다.
  • 차량 4: RestaurantX에서 1, 000m 거리에 있습니다.

다음 SearchVehiclesRequest는 차량 4를 반환합니다.

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

다음 SearchVehiclesRequest는 차량 3과 4를 반환합니다.

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

다음 SearchVehiclesRequest는 차량 2, 3, 4를 반환합니다.

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

SearchVehiclesResponse 필드

SearchVehiclesResponseSearchVehiclesRequest에서 지정된 order_by 속성별로 순위가 지정된 VehicleMatch 항목의 목록으로 구성됩니다. 각 VehicleMatch 항목에는 다음과 같은 필드가 있습니다.

필드 설명
차량 차량_ID 및 Vehicle 속성이 포함된 Vehicle 객체
vehicle_pickup_eta 새 작업의 승차 위치에서의 차량의 예상 도착시간입니다. 운전 도착예정시간입니다.
vehicle_pickup_distance_meter 차량과 새 작업의 승차 위치 사이의 거리입니다(단위: 미터).
vehicle_pickup_straight_line_distance_meter 차량과 새 작업의 승차 위치 사이의 직선 거리(미터)입니다.
vehicle_dropoff_eta 새 작업의 승차 위치에서 차량 ETA의 Timestamp입니다. ETA는 운전 중 ETA입니다.
vehicle_trips_waypoints 현재 차량에 할당된 활성 이동에서 승차 및 하차 지점을 포함한 나머지 경유지 목록입니다.
vehicle_match_type 차량의 이동 유형(EXCLUSIVE, BACK_TO_BACK, CARPOOL 또는 CARPOOL_BACK_TO_BACK)입니다.

SearchVehicles 예

다음 예는 SearchVehicles API를 사용하는 방법을 보여줍니다.

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.