Reisen mit mehreren Zielen erstellen

In diesem Dokument wird beschrieben, wie Sie eine Reise mit mehreren Zielen erstellen, den richtigen und es einem Fahrzeug zuweisen, das erfüllt werden soll. Es wird davon ausgegangen, dass Sie Flotte eingerichtet haben Fahrzeuge erstellt, eine funktionierende Fahrer-App installiert, optional eine Nutzer-App. Außerdem sollten Sie mit den verschiedenen Szenarien für On-Demand-Fahrten. Weitere Informationen finden Sie in den dass:

Grundlagen zur Erstellung von Reisen

In diesem Abschnitt werden die Anfragedetails beschrieben, die zum Erstellen einer Fahrt in Fleet Engine Sie senden eine Anfrage zur Erstellung mit gRPC und REST.

  • CreateTrip()-Methode: gRPC oder REST
  • CreateTripRequest message: Nur gRPC

Fahrtfelder

Verwenden Sie die folgenden Felder, um eine Fahrt in Fleet Engine zu erstellen. Sie können unterschiedliche Felder für die verschiedenen Arten von Fahrten verwenden: Fahrten mit einem oder mehreren Zielen, Fahrten nacheinander oder Fahrten mit geteiltem Pool. Sie können die optionalen Felder beim Erstellen der Fahrt angeben oder sie später festlegen, wenn Sie die Fahrt aktualisieren.

Felder für Fahrten
Name Erforderlich? Beschreibung
parent Ja Ein String, der die Projekt-ID enthält. Diese ID muss mit der verwendeten ID übereinstimmen für die gesamte Fleet Engine-Einbindung über dasselbe Dienstkonto Rollen.
trip_id Ja Ein von Ihnen erstellter String, der diese Fahrt eindeutig identifiziert. Fahrten-IDs unterliegen bestimmten Einschränkungen, die in der Referenz angegeben sind.
trip_type Ja Legen Sie für TripType die folgenden Werte für die erstellte Fahrtart fest:
  • Einzelnes Ziel: Legen Sie SHARED oder EXCLUSIVE fest.
  • Mehrere Ziele: Legen Sie EXCLUSIVE fest.
  • Nacheinander: Legen Sie EXCLUSIVE fest.
  • Gemeinsam genutztes Pooling: auf SHARED gesetzt.
pickup_point Ja Der Startpunkt der Fahrt.
Ziele für Fortgeschrittene Ja

Nur Fahrten mit mehreren Zielen: Die Liste der Zwischenziele, die der Fahrer dazwischen besucht. Abholung und Abgabe. Wie bei dropoff_point wird auch dieses Feld kann auch später durch Aufrufen von UpdateTrip festgelegt werden, aber eine Kombination aus mehreren Zielen Fahrt enthält Zwischenziele.

vehicle_waypoints Ja

Nur Fahrten mit Mitfahrgelegenheit: In diesem Feld können die Wegpunkte mehrerer Fahrten überlappend angegeben werden. Sie enthält alle verbleibenden Wegpunkte für das zugewiesene Fahrzeug sowie die Abhol- und Abgabeorte für diese Fahrt. Sie können dieses Feld durch Aufrufen von CreateTrip oder UpdateTrip. Sie können Fahrzeug-Wegpunkte auch über das Feld waypoints mit einem Aufruf von UpdateVehicle aktualisieren. Der Dienst gibt diese Informationen bei GetTrip-Anrufen aus Datenschutzgründen nicht zurück.

number_of_passengers Nein Die Anzahl der Fahrgäste auf der Fahrt.
dropoff_point Nein Das Ziel der Fahrt.
vehicle_id Nein Die ID des Fahrzeugs, das der Fahrt zugewiesen ist.

Beispiel: Reise mit mehreren Zielen erstellen

Im Folgenden wird gezeigt, wie eine exklusive Reise mit mehreren Zielen erstellt wird. mit einem Abhol- und einem Absetzpunkt sowie einem Zwischenziel.

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;
}

Fahrt mit mehreren Zielen aktualisieren

Sie müssen die Fahrt mit einer Fahrzeug-ID konfigurieren, damit die Fleet Engine des Fahrzeugs auf seiner Route. Weitere Informationen zum Aktualisieren einer Fahrt finden Sie unter Fahrten aktualisieren und ihren Status verwalten.

Wenn Sie beim Erstellen der Fahrt kein Ziel oder Zwischenziel angeben, können Sie dies jederzeit an dieser Stelle nachholen.

Beispiel für eine Fahrtaktualisierung

Im Folgenden wird gezeigt, wie eine Fahrt aktualisiert wird, um eine Liste der Mittelstufe hinzuzufügen. Ziele an und legen Sie eine Fahrzeug-ID fest.

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;
}

Fahrtstatus für Fahrten mit mehreren Zielen verwalten

Der Status einer Fahrt wird mit einem der TripStatus-Aufzählungswerte angegeben. Wenn sich der Status einer Fahrt ändert, z. B. von ENROUTE_TO_PICKUP in ARRIVED_AT_PICKUP, müssen Sie den Fahrtstatus in Fleet Engine aktualisieren. Fahrt Zustand beginnt immer mit dem Wert NEW und endet mit einem Wert von COMPLETE oder CANCELED.

Bei einer Fahrt mit mehreren Zielen können Sie zusätzlich zur Aktualisierung des Fahrtstatus auch gilt für eine Reise mit einem einzelnen Ziel Folgendes: Jedes Mal, wenn dein Fahrzeug ein Zwischenziel erreicht:

  • intermediateDestinationIndex
  • intermediateDestinationsVersion

Verwenden Sie dazu die folgenden Werte aus der Aufzählung TripStatus.

  • ENROUTE_TO_PICKUP
  • ARRIVED_AT_PICKUP
  • ENROUTE_TO_INTERMEDIATE_DESTINATION
  • ARRIVED_AT_INTERMEDIATE_DESTINATION
  • ENROUTE_TO_DROPOFF
  • COMPLETE

Beispiel für eine Fahrt mit Zwischenzielen

Im Folgenden wird gezeigt, wie Sie eine Fahrt mit mehreren Zielen erstellen, die den Abholpunkt bereits passiert hat und sich jetzt auf dem Weg zum ersten Zwischenziel befindet.

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;
}

Nächste Schritte