オンデマンド配車と配達ソリューションの一部として、ルート計画と配車機能では、SearchVehicles
API を提供することで、近くのドライバーを見つけることができます。
SearchVehicles
API を使用すると、オンデマンド配車と配達ソリューションのユーザー アプリで、配車や配達リクエストなどのタスクに最適な、近くの空いているドライバーを検索できます。SearchVehicles
API は、フリート内の車両の属性とタスク属性に一致するドライバーのランク付けされたリストを返します。
タスク属性には、次のようなものがあります。
- 乗車場所と降車場所
- リクエストされた車両とルートのタイプ
- 必要な容量
- その他の必須照合属性
車両属性の例:
- 車両の直近の位置情報
- 車両の状態、タイプ、収容人数
- その他のカスタム属性
ランキングは、到着予定時刻、乗車地点からの距離、直線距離のいずれかに基づいて並べられます。
SearchVehicles
API を使用するには、Fleet Engine サービス スーパー ユーザーまたはコンシューマ SDK ユーザーの権限が必要です。詳細については、認証と認可をご覧ください。
SearchVehicles API の使用
SearchVehicles
API を使用するには:
- 割り当てるタスクに基づいて
SearchVehiclesRequest
を作成します。 - 作成されたリクエストで
SearchVehicles
API(vehicleService.searchVehicles
)を呼び出します。 - API から返された
SearchVehicleResponse
を処理します。
SearchVehiclesRequest フィールド
次の必須属性フィールドを使用して、SearchVehiclesRequest
を作成します。
項目 | 説明 |
---|---|
parent | 必須。providers/{provider} の形式にする必要があります。プロバイダは、この呼び出しを行うサービス アカウントがメンバーになっている Google Cloud プロジェクトのプロジェクト ID(sample-cloud-project など)でなければなりません。 |
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)。 |
SearchVehicleRequestfields の全一覧については、リファレンス ドキュメントをご覧ください。
SearchVehiclesRequest の例
このセクションでは、SearchVehiclesRequest
の作成方法の例を示します。
たとえば、レストラン X に 4 台の車両を割り当てるピックアップ タスクがあるとします。
- 車両 1、レストラン X から 3, 500 m。
- 車両 2: レストラン X から 100 m の距離にあり、A 地点と B 地点で乗車 / 降車できるアクティブなルートがあります。
- 車両 3: レストラン X から 200 m の距離にあり、非常に遠いところに降車が 1 回残っています。
- 車両 4: レストラン X から 1, 000 m。
次の 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 フィールド
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 | 新しいタスクの乗車地点における車両の到着予定時刻のタイムスタンプ。なお、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.