모빌리티 주문형 이동 서비스의 일환으로 SearchVehicles
메서드를 사용하여 주변 차량을 찾을 수 있습니다.
SearchVehicles
메서드를 사용하면 소비자 모바일 앱에서 특정 이동 또는 배송 요청에 가장 적합한 주변의 이용 가능한 차량을 찾을 수 있습니다. SearchVehicles
API는 속성이 요청된 이동 속성과 일치하는 차량의 순위가 지정된 목록을 반환합니다. 순위는 도착 예정 시간, 거리 또는 수령 지점과의 직선 거리 중에서 선택한 항목에 따라 정렬됩니다.
속성 검색 | 차량 속성 |
---|---|
|
|
SearchVehicles
메서드 사용
SearchVehicles
를 사용하려면 다음과 같은 일반적인 프로세스를 따르세요.
- 할당할 경로를 기반으로
SearchVehiclesRequest
를 구성합니다. - 생성된 요청으로
SearchVehicles
API (vehicleService.searchVehicles
)를 호출합니다. - API에서 반환된
SearchVehicleResponse
를 처리합니다.
SearchVehiclesRequest 필드
다음 필수 속성 필드를 사용하여 SearchVehiclesRequest
를 구성합니다.
필드 | 설명 |
---|---|
parent | 필수사항: providers/{provider} 형식이어야 합니다. 제공업체는 이 호출을 실행하는 서비스 계정이 구성원인 Google Cloud 프로젝트의 프로젝트 ID여야 합니다. |
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 | 필수사항: 다음 중 하나를 기준으로 차량을 주문합니다.
|
개수 | 필수사항: 반환할 최대 차량 수는 1~50입니다. |
필터 | 선택사항. 차량을 검색할 때 적용할 필터 쿼리입니다. |
SearchVehicleRequest 필드의 전체 세트는 참조 문서를 참고하세요.
SearchVehiclesRequest 시나리오
이 섹션에서는 SearchVehiclesRequest
를 구성하는 방법의 예를 보여줍니다.
예를 들어 고객이 RestaurantX에서 픽업을 원하고 차량이 4대 있다고 가정해 보겠습니다.
- 차량 1: RestaurantX에서 3,500m 떨어져 있습니다.
- 차량 2: RestaurantX에서 100m 떨어져 있으며 A와 B 지점에서 승차 및 하차가 있는 활성 이동 중입니다.
- 차량 3: RestaurantX에서 200m 떨어져 있으며, 한 건의 배송만 남아 있고 배송 위치가 매우 멀리 있습니다.
- 차량 4: RestaurantX에서 1,000m 떨어져 있습니다.
다음은 차량에서 반환하는 다양한 요청을 보여줍니다.
반품 차량 4
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA
차량 3 및 4를 반환합니다.
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, is_back_to_back enabled
차량 2, 3, 4를 반환합니다.
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, current_trips_present = ALL
SearchVehiclesResponse 필드
SearchVehiclesResponse
는 SearchVehiclesRequest
에 지정된 order_by 속성에 따라 순위가 지정된 VehicleMatch
항목 목록으로 구성됩니다. 각 VehicleMatch
항목에는 다음과 같은 필드가 있습니다.
필드 | 설명 |
---|---|
차량 | vehicle_id 및 Vehicle 속성을 포함하는 Vehicle 객체 |
vehicle_pickup_eta | 새 경로의 승차 위치에 도착할 차량의 도착예정시간입니다. 운전 도착 예정 시간입니다. |
vehicle_pickup_distance_meter | 차량과 새 경로의 픽업 위치 간의 거리(미터)입니다. |
vehicle_pickup_straight_line_distance_meter | 차량과 새 경로의 픽업 위치 간의 직선 거리(단위: 미터)입니다. |
vehicle_dropoff_eta | 새 경로의 픽업 위치에서 차량 도착예정시간의 타임스탬프입니다. ETA는 운전 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
절로 작동합니다.
예를 들어 좌석 수가 6명 이상인 차량을 검색하고 반려동물 동반 가능과 같은 attributes
를 필터링하면 반려동물 동반 가능하고 좌석 수가 6명 이상인 차량만 기준에 따라 반환됩니다.
필터 쿼리 문법의 예는 AIP-160을 참고하세요. 차량 속성 만들기에 관한 자세한 내용은 차량 입력란 업데이트 가이드의 차량 속성 입력란을 참고하세요.
SearchVehicles 예시
다음 예에서는 Java gRPC 라이브러리를 사용하여 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.