オンデマンド モビリティの乗車サービスの一環として、SearchVehicles メソッドを使用して近くの車両を検索できます。
SearchVehicles メソッドを使用すると、特定の乗車または配達のリクエストに最適な、近くで利用可能な車両をユーザーのモバイルアプリで見つけることができます。SearchVehicles API は、リクエストされた乗車属性に一致する属性を持つ車両のランク付けされたリストを返します。ランキングは、ETA、距離、乗車地点からの直線距離のいずれかを選択して並べ替えることができます。
| 検索属性 | 車両属性 | 
|---|---|
        
  | 
      
        
  | 
    
SearchVehicles メソッドを使用する
SearchVehicles を使用する一般的な手順は次のとおりです。
- 割り当てる旅行に基づいて 
SearchVehiclesRequestを作成します。 - 作成したリクエストを使用して 
SearchVehiclesAPI(vehicleService.searchVehicles)を呼び出します。 - API から返された 
SearchVehicleResponseを処理します。 
SearchVehiclesRequest フィールド
次の必須属性フィールドを使用して SearchVehiclesRequest を作成します。
| フィールド | 説明 | 
|---|---|
| 親 | 必須。providers/{provider} の形式にする必要があります。プロバイダは、この呼び出しを行うサービス アカウントがメンバーである Google Cloud プロジェクトのプロジェクト ID である必要があります。 | 
| vehicle_types | 必須。リクエストされた車両の種類(AUTO、TWO_WHEELER、TAXI、TRUCK、BICYCLE、PEDESTRIAN のいずれか)。 | 
| trip_types | 必須。EXCLUSIVE(ドライバー 1 人につき一度に 1 つの有効な乗車)または SHARED(ドライバー 1 人につき一度に 1 つまたは複数の乗車)のいずれか。 | 
| minimum_capacity | 必須。新しい乗客または配達の旅程における車両の最小残容量。 | 
| pickup_point | 必須。旅行の乗車場所の緯度/経度座標。 | 
| dropoff_point | 省略可。緯度/経度での乗車地点の座標。trip_types に TripType.SHARED が含まれている場合、このフィールドは必須です。 | 
| pickup_radius_meters | 必須。乗車地点から車両の検索エリアまでの半径(メートル単位)。 | 
| order_by | 必須。次のいずれかで車両を並べ替えます。
  | 
  
| count | 必須。返す車両の最大数(1 ~ 50)。 | 
| フィルタ | (省略可)車両の検索時に適用するフィルタ クエリ。 | 
| maximum_staleness | (省略可)指定した期間内に Fleet Engine に位置情報の更新を送信した車両のみに検索を制限します。このフィールドが設定されていない場合、サーバーはデフォルト値として 5 分を使用します。 | 
SearchVehicleRequest フィールドの完全なセットについては、リファレンス ドキュメントをご覧ください。
SearchVehiclesRequest のシナリオ
このセクションでは、SearchVehiclesRequest の作成方法の例を示します。
たとえば、お客様が RestaurantX での乗車を希望しており、車両が 4 台あるとします。
- 車両 1: RestaurantX から 3,500 m 離れています。
 - 車両 2: RestaurantX から 100 m の距離にあり、A 地点と B 地点での乗車と降車を含むアクティブな乗車がある。
 - 車両 3: RestaurantX から 200 m の距離にあり、配達先が 1 か所残っていますが、その配達先は非常に遠い場所にあります。
 - 車両 4: RestaurantX から 1,000 m 離れています。
 
以下は、返される車両ごとにさまざまなリクエストを表示したものです。
Returns Vehicle 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 | このルートが今すぐ車両に割り当てられた場合の、降車場所への車両の到着予定時刻。 | 
| 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.