付近の運転手を見つける

オンデマンド配車と配達ソリューションの一部として、ルート計画と配車機能を使用すると、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 人につき一度に 1 つのアクティブなルート)または SHARED(ドライバー 1 人につき一度に 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: 車両から乗車地点までの直線距離(ルート上ではありません)。
count 必須。返される車両の最大数(1 ~ 50)。

SearchVehicleRequestfields の全セットについては、リファレンス ドキュメントをご覧ください。

SearchVehiclesRequest の例

このセクションでは、SearchVehiclesRequest の作成方法の例を示します。

たとえば、レストラン X での受け取りタスクと、車両が 4 台あるとします。

  • 車両 1: RestaurantX から 3, 500 m の距離にあります。
  • 車両 2: RestaurantX から 100 m の距離にあり、A と B で乗車と降車を伴うアクティブなルート。
  • 車両 3: RestaurantX から 200 m 離れた場所にあり、非常に遠く離れた場所に乗り降りが 1 つ残っています。
  • 車両 4: RestaurantX から 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 新しいタスクの乗車場所における車両の到着予定時刻のタイムスタンプ。到着予定時刻とは、現在運行している到着予定時刻を指します。
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.