複数の目的地があるルートを作成する

このドキュメントでは、複数の目的地を含むルートを作成し、正しいルートを設定する方法について説明します。 車両に割り当てることができます。フリートがセットアップ済みであることを前提としています。 自動車を作成し、運転手用アプリを使用できるようにして、 コンシューマアプリでも実行できますまた、Google Cloud で提供されている いくつか紹介します。以下の関連ガイドをご覧ください。 必要があります。

旅行の作成の基本

このセクションでは、 Fleet EnginegRPC と REST のいずれかを使用して作成リクエストを発行します。

  • CreateTrip() メソッド: gRPC または REST
  • CreateTripRequest メッセージ: gRPC のみ
で確認できます。

ルートのフィールド

Fleet Engine でルートを作成するには、次のフィールドを使用します。別の方法を使用して、 フィールドを使用して、1 つの目的地、複数の目的地、 連続してプールを行ったり、プール旅行をシェアしたりできます。マイページ ルートの作成時にオプション フィールドを指定することも、自分で ルートを更新したときに 自動的に設定されます

ルートのフィールド
名前 必須 説明
はい プロジェクト ID を含む文字列。この ID は、使用されている ID と同じである必要があります Fleet Engine インテグレーション全体にわたり、同じサービス アカウントで できます。
trip_id はい このルートを一意に識別する文字列。ルート ID の属性 特定の制限が適用されます。
trip_type はい 作成するルートのタイプに応じて、TripType に次の値を設定します。 <ph type="x-smartling-placeholder">
    </ph>
  • 単一のデスティネーション: SHARED または EXCLUSIVE に設定します。
  • 複数の宛先: EXCLUSIVE に設定します。
  • Back-to-back: EXCLUSIVE に設定します。
  • 共有プール: SHARED に設定します。
pickup_point はい ルートの出発地。
中間デスティネーション はい

複数の目的地を含むルートのみ: ドライバーがルート間を通る中間の目的地のリスト ピックアップとドロップオフですdropoff_point と同様に、このフィールドは 後で UpdateTrip を呼び出して設定することもできますが、マルチデスティネーション ルートには中間の目的地が含まれます。

vehicle_waypoints はい

共有プールのルートのみ: このフィールドでは、複数のルートのウェイポイントをインターリーブできます。 これには、割り当てられた車両の残りのウェイポイントもすべて含まれます。 このルートの乗り降り地点として設定しますこのフィールドは CreateTrip または UpdateTrip を呼び出します。また、 車両のウェイポイントを更新するには、waypoints フィールド UpdateVehicle への呼び出し。 GetTrip の呼び出しでは、サービスはこの情報を返しません。 理由があります。

number_of_passengers いいえ 旅行の乗客数。
dropoff_point いいえ ルートの目的地。
vehicle_id いいえ ルートに割り当てられている車両の ID。

例: 複数の目的地を含むルートを作成する

排他的な複数の目的地を含むルートの作成方法は次のとおりです。 1 つの乗車地点、1 つの降車地点、1 つの中間地点に 1 つずつ配置されています。

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "multi-destination-trip-A";

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// Trip initial settings.
String parent = "providers/" + PROJECT_ID;

Trip trip = Trip.newBuilder()
    .setTripType(TripType.EXCLUSIVE)
    .setPickupPoint(
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder()
                .setLatitude(-6.195139).setLongitude(106.820826)))
    .setNumberOfPassengers(1)
    .setDropoffPoint(
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder()
                .setLatitude(-6.1275).setLongitude(106.6537)))
    // Add the list of intermediate destinations.
    .addAllIntermediateDestinations(
        ImmutableList.of(
            TerminalLocation.newBuilder().setPoint(
                LatLng.newBuilder()
                    .setLatitude(-6.195139).setLongitude(106.820826)).build()))
    .build();

// Create the Trip request.
CreateTripRequest createTripRequest = CreateTripRequest.newBuilder()
    .setParent(parent)
    .setTripId(TRIP_ID)  // Trip ID assigned by the Provider server.
    .setTrip(trip)       // Initial state is NEW.
    .build();

// Error handling.
try {
  Trip createdTrip =
      tripService.createTrip(createTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case ALREADY_EXISTS:  // Trip already exists.
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

複数の目的地を含むルートを更新する

Fleet Engine が追跡できるように、車両 ID を使用してルートを設定する必要があります。 追跡しますルートの更新について詳しくは、以下をご覧ください。 ルートの更新と状態の管理

シャトル内で降車地または中間の目的地を指定しない場合、 この時点でいつでもルートを作成できます

ルート更新情報の例

以下は、ルートを更新して中間リストのリストを追加する方法を示しています。 車両 ID を設定します。

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "multi-destination-trip-A";

String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// The trip settings to be updated.
Trip trip = Trip.newBuilder()
    // Add the list of intermediate destinations.
    .addAllIntermediateDestinations(
        ImmutableList.of(
            TerminalLocation.newBuilder().setPoint(
                LatLng.newBuilder()
                    .setLatitude(-6.195139).setLongitude(106.820826)).build()))
    .setVehicleId("8241890")
    .build();

// The trip update request.
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
    .setName(tripName)
    .setTrip(trip)
    .setUpdateMask(
        FieldMask.newBuilder()
            .addPaths("intermediate_destinations")
            .addPaths("vehicle_id")
            .build())
    .build();

// Error handling.
try {
  Trip updatedTrip =
      tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:            // The trip doesn't exist.
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

複数の目的地を含むルートの運行状況を管理する

ルートの状態を、TripStatus 列挙型のいずれかを使って指定します。 使用できます。ルートの状態が変化したとき(例: ENROUTE_TO_PICKUP から ARRIVED_AT_PICKUP さん、Fleet Engine でルート状態を更新する必要があります。ルート 状態は常に NEW の値で始まり、次のいずれかの値で終わります。 COMPLETE または CANCELED

複数の目的地を経由するルートの場合は、ルートステータスの更新に加え、 次のように更新する必要があります。 車両が中間目的地に到達するたびに:

  • intermediateDestinationIndex
  • intermediateDestinationsVersion

これを行うには、TripStatus 列挙型の次の値を使用します。

  • ENROUTE_TO_PICKUP
  • ARRIVED_AT_PICKUP
  • ENROUTE_TO_INTERMEDIATE_DESTINATION
  • ARRIVED_AT_INTERMEDIATE_DESTINATION
  • ENROUTE_TO_DROPOFF
  • COMPLETE
で確認できます。

中間の目的地を指定したルートの例

以下は、 目的地に到着し、最初の中間目的地に向かいます。

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "multi-destination-trip-A";

String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;

// Get the trip object from either the Fleet Engine or storage.
Trip trip = …;

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// The trip settings to be updated.
Trip trip = Trip.newBuilder()
    // Trip status cannot return to a previous state once it has passed.
    .setTripStatus(TripStatus.ENROUTE_TO_INTERMEDIATE_DESTINATION)

    // Enroute to the first intermediate destination.
    .setIntermediateDestinationIndex(0)

    // You must provide an intermediate_destinations_version to ensure that you
    // have the same intermediate destinations list as the Fleet Engine.
    .setIntermediateDestinationsVersion(
         trip.getIntermediateDestinationsVersion())
    .build();

// The trip update request.
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
    .setName(tripName)
    .setTrip(trip)
    .setUpdateMask(
        FieldMask.newBuilder()
            .addPaths("trip_status")
            .addPaths("intermediate_destination_index")
            // intermediate_destinations_version must not be in the update mask.
            .build())
    .build();

// Error handling.
try {
  Trip updatedTrip =
      tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:            // The trip doesn't exist.
      break;
    case FAILED_PRECONDITION:  // Either the trip status is invalid, or the
                               // intermediate_destinations_version doesn't
                               // match Fleet Engine's.
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

次のステップ