Gemeinsame Ausflüge erstellen

In diesem Dokument wird beschrieben, wie Sie eine gemeinsame Fahrt erstellen, die richtigen Felder festlegen und sie einem Fahrzeug zuweisen. Dabei wird davon ausgegangen, dass Sie Fleet Engine eingerichtet, Fahrzeuge erstellt und eine funktionierende Fahrer-App und optional eine Nutzer-App haben. Sie sollten auch mit den verschiedenen Reiseszenarien für On-Demand-Fahrten vertraut sein. Weitere Informationen finden Sie in den folgenden Leitfäden:

Grundlagen der Reiseerstellung

In diesem Abschnitt werden die Details der Anfrage beschrieben, die zum Erstellen einer Reise in Fleet Engine erforderlich sind. Sie senden eine Erstellungsanfrage entweder mit gRPC oder REST.

  • Methode CreateTrip(): gRPC oder REST
  • Nachricht CreateTripRequest: gRPC nur

Reisefelder

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

Reisefelder
Name Erforderlich? Beschreibung
parent Ja Ein String, der die Projekt-ID enthält. Diese ID muss in der gesamten Fleet Engine-Integration mit denselben Dienstkontorollen verwendet werden.
trip_id Ja Ein String, den Sie erstellen und der diese Reise eindeutig identifiziert. Für Reise-IDs gelten bestimmte Einschränkungen, wie in der Referenz angegeben.
trip_type Ja Legen Sie für TripType die folgenden Werte für den zu erstellenden Reisetyp fest:
  • Ein Ziel: Legen Sie SHARED oder EXCLUSIVE fest.
  • Mehrere Ziele: Legen Sie EXCLUSIVE fest.
  • Aufeinanderfolgende Reisen: Legen Sie EXCLUSIVE fest.
  • Gemeinsame Fahrt: Legen Sie SHARED fest.
pickup_point Ja Der Ausgangspunkt der Reise.
Zwischenziele Ja

Nur Reisen mit mehreren Zielen: Die Liste der Zwischenziele, die der Fahrer zwischen Abholung und Abgabe anfährt. Wie bei dropoff_point kann dieses Feld auch später mit UpdateTrip festgelegt werden. Eine Reise mit mehreren Zielen enthält jedoch per Definition Zwischenziele.

vehicle_waypoints Ja

Nur gemeinsame Fahrten: Dieses Feld unterstützt das Verschachteln der Wegpunkte aus mehreren Reisen. Es enthält alle verbleibenden Wegpunkte für das zugewiesene Fahrzeug sowie die Wegpunkte für Abholung und Abgabe für diese Reise. Sie können dieses Feld festlegen, indem Sie CreateTrip oder UpdateTrip aufrufen. Sie können Fahrzeugwegpunkte auch über das Feld waypoints mit einem Aufruf von UpdateVehicle aktualisieren. Aus Datenschutzgründen gibt der Dienst diese Informationen bei GetTrip Aufrufen zurück.

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

Beispiel: Gemeinsame Fahrt erstellen

Das folgende Beispiel für die Backend-Integration zeigt, wie Sie eine Reise erstellen und sie einem Fahrzeug als gemeinsame Fahrt zuweisen.

// Vehicle with VEHICLE_ID ID is already created and it is assigned Trip A.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "shared-trip-A";
static final String VEHICLE_ID = "your-vehicle-id";
static final String TRIP_A_ID = "trip-a-id";
static final String TRIP_B_ID = "trip-b-id";

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

String parent = "providers/" + PROJECT_ID;

LatLng tripBPickup =
    LatLng.newBuilder().setLatitude(-12.12314).setLongitude(88.142123).build();
LatLng tripBDropoff =
    LatLng.newBuilder().setLatitude(-14.12314).setLongitude(90.142123).build();

TerminalLocation tripBPickupTerminalLocation =
    TerminalLocation.newBuilder().setPoint(tripBPickup).build();
TerminalLocation tripBDropoffTerminalLocation =
    TerminalLocation.newBuilder().setPoint(tripBDropoff).build();

// TripA already exists and it's assigned to a vehicle with VEHICLE_ID ID.
Trip tripB = Trip.newBuilder()
    .setTripType(TripType.SHARED)
    .setVehicleId(VEHICLE_ID)
    .setPickupPoint(tripBPickupTerminalLocation)
    .setDropoffPoint(tripBDropoffTerminalLocation)
    .addAllVehicleWaypoints(
        // This is where you define the arrival order for unvisited waypoints.
        // If you don't specify an order, then the Fleet Engine adds Trip B's
        // waypoints to the end of Trip A's.
        ImmutableList.of(
            // Trip B's pickup point.
            TripWaypoint.newBuilder()
                .setLocation(tripBPickupTerminalLocation)
                .setTripId(TRIP_B_ID)
                .setWaypointType(WaypointType.PICKUP_WAYPOINT_TYPE)
                .build(),
            // Trip A's drop-off point.
            TripWaypoint.newBuilder()
                .setLocation(tripA.getDropoffPoint())
                .setTripId(TRIP_A_ID)
                .setWaypointType(WaypointType.DROP_OFF_WAYPOINT_TYPE)
                .build(),
            // Trip B's drop-off point.
            TripWaypoint.newBuilder()
                .setLocation(tripBDropoffTerminalLocation)
                .setTripId(TRIP_B_ID)
                .setWaypointType(WaypointType.DROP_OFF_WAYPOINT_TYPE)
                .build()))
    .build();

// Create Trip request
CreateTripRequest createTripRequest = CreateTripRequest.newBuilder()
    .setParent(parent)
    .setTripId(TRIP_B_ID)
    .setTrip(tripB)
    .build();

try {
  // createdTrip.remainingWaypoints will contain shared-pool waypoints.
  // [tripB.pickup, tripA.dropoff, tripB.dropoff]
  Trip createdTrip = tripService.createTrip(createTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case ALREADY_EXISTS:
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

Gemeinsame Fahrten aktualisieren

Jede in Fleet Engine erstellte Reise muss einem Fahrzeug zugewiesen werden, damit Fleet Engine die voraussichtliche Ankunftszeit berechnen und die Reise verfolgen kann. Sie können dies entweder beim Erstellen der Reise oder später beim Aktualisieren der Reise tun.

Bei gemeinsamen Fahrten müssen Sie eine Reihenfolge für die nicht besuchten Wegpunkte in der Sammlung der Fahrzeugwegpunkte der Reise (Trip.vehicle_waypoints) angeben. Fleet Engine verwendet diese Liste, um die Reisewegpunkte für alle Reisen im gemeinsamen Pool automatisch zu aktualisieren.

Angenommen, es gibt zwei gemeinsame Fahrten: Reise A und Reise B:

  • Reise A ist auf dem Weg zum Ziel.
  • Reise B wird dann demselben Fahrzeug hinzugefügt.

In einer UpdateTripRequest für Reise B, legen Sie die vehicleId fest und setzen Trip.vehicle_waypoints auf die optimale Wegpunktreihenfolge: B AbholungA AbgabeB Abgabe.

  • Ein Aufruf von getVehicle() gibt remainingWaypoints zurück, die Folgendes enthalten:
    Abholung BAbgabe AAbgabe B.
  • Entweder getTrip() oder der onTripRemainingWaypointsUpdated Callback für Reise A gibt remainingWaypoints zurück, die Folgendes enthalten:
    B AbholungA Abgabe.
  • Entweder getTrip() oder der onTripRemainingWaypointsUpdated Callback für Reise B gibt remainingWaypoints zurück, die Folgendes enthalten:
    B AbholungA AbgabeB Abgabe.

Beispiel

Das folgende Beispiel für die Backend-Integration zeigt, wie Sie eine Reise mit der Fahrzeug-ID und den Wegpunkten für zwei gemeinsame Fahrten aktualisieren.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_A_ID = "share-trip-A";
static final String TRIP_B_ID = "share-trip-B";
static final String VEHICLE_ID = "Vehicle";

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

// Get Trip A and Trip B objects from either the Fleet Engine or storage.
Trip tripA = ;
Trip tripB = ;

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// The trip settings to update.
Trip trip = Trip.newBuilder()
    .setVehicleId(VEHICLE_ID)
    .addAllVehicleWaypoints(
        // This is where you define the arrival order for unvisited waypoints.
        // If you don't specify an order, then the Fleet Engine adds Trip B's
        // waypoints to the end of Trip A's.
        ImmutableList.of(
            // Trip B's pickup point.
            TripWaypoint.newBuilder()
                .setLocation(tripB.getPickupPoint())
                .setTripId(TRIP_B_ID)
                .setWaypointType(WaypointType.PICKUP_WAYPOINT_TYPE)
                .build(),
            // Trip A's drop-off point.
            TripWaypoint.newBuilder()
                .setLocation(tripA.getDropoffPoint())
                .setTripId(TRIP_A_ID)
                .setWaypointType(WaypointType.DROP_OFF_WAYPOINT_TYPE)
                .build(),
            // Trip B's drop-off point.
            TripWaypoint.newBuilder()
                .setLocation(tripB.getDropoffPoint())
                .setTripId(TRIP_B_ID)
                .setWaypointType(WaypointType.DROP_OFF_WAYPOINT_TYPE)
                .build()))
    .build();

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

// Error handling. If Fleet Engine has both a trip and vehicle with the IDs,
// and if the credentials validate, and if the given vehicle_waypoints list
// is valid, then the service updates the trip.
try {
  Trip updatedTrip = tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:          // Either the trip or vehicle does not exist.
      break;
    case PERMISSION_DENIED:
      break;
    case INVALID_REQUEST:    // vehicle_waypoints is invalid.
      break;
  }
  return;
}

Nächste Schritte