オンデマンド モビリティのトリップ サービスの一環として、SearchVehicles メソッドを使用して近くの車両を検索できます。
SearchVehicles メソッドを使用すると、特定の乗車リクエストや配送リクエストに最適な、近くの利用可能な車両をユーザーのモバイルアプリで検索できます。SearchVehicles
API は、リクエストされたトリップ属性に一致する属性を持つ車両のランク付けされたリストを返します。ランキングは、乗車地点からの到着予定時刻、距離、直線距離のいずれかを選択して並べ替えられます。
| 検索属性 | 車両属性 |
|---|---|
|
|
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 つのアクティブなトリップ)または SHARED(ドライバーごとに一度に 1 つ以上のトリップ)。 |
| minimum_capacity | 必須 。新しいトリップの車両の最小残存容量(乗客または配送)。 |
| pickup_point | 必須 。トリップの乗車場所(緯度/経度座標)。 |
| dropoff_point | 省略可。トリップの降車場所(緯度/経度座標)。 trip_types に TripType.SHARED が含まれている場合は、このフィールドが必須になります。 |
| pickup_radius_meters | 必須 。乗車地点からの車両検索エリアの半径(メートル単位)。 |
| order_by | 必須 。次のいずれかで車両を並べ替えます。
|
| count | 必須 。返される車両の最大数(1 ~ 50)。 |
| filter | 省略可 。車両の検索時に適用するフィルタ クエリ。 |
| maximum_staleness | 省略可 。指定した期間内に Fleet Engine に位置情報の更新を送信した車両のみに検索を制限します。この フィールドが設定されていない場合、サーバーはデフォルト値として 5 分を使用します。 |
SearchVehicleRequest フィールドの完全なセットについては、 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 離れています。
以下に、返される車両ごとのさまざまなリクエストを示します。
車両 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 オブジェクト(vehicle_id と 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フィルタ クエリを使用する
SearchVehicles と ListVehicles は、フィルタ クエリを使用して車両属性のフィルタリングをサポートしています。
フィルタ クエリは、車両のカスタム属性のフィルタリングのみをサポートしており、他のフィールドには使用できません。minimum_capacity や vehicle_types などの他のフィールド条件を含む検索で使用する場合、フィルタ クエリは AND 句として機能します。
たとえば、最小容量が 6 の車両を検索し、ペット可などの attributes をフィルタすると、ペット可で 6 人以上の乗客を乗せられる車両のみが返されます。
フィルタ クエリの構文については、AIP-160 の例をご覧ください。車両属性の作成の詳細については、車両 属性フィールド ガイドの車両フィールドを更新するをご覧ください。
SearchVehicles の例
次の例は、SearchVehicles API を使用して
Java gRPC ライブラリを使用する方法を示しています。サポートされている言語の完全なリストについては、
オンデマンド トリップ サービスのクライアント ライブラリをご覧ください。
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.