Gemeinsame Ausflüge erstellen

In diesem Dokument wird beschrieben, wie Sie eine gemeinsame Pooling-Reise erstellen, den richtigen und es einem Fahrzeug zuweisen, das erfüllt werden soll. Es wird davon ausgegangen, dass Sie Fleet Engine eingerichtet, Fahrzeuge erstellt, eine funktionierende Fahrer-App und optional eine Verbraucher-App haben. Außerdem sollten Sie mit den verschiedenen Fahrtszenarien für Fahrten auf Abruf vertraut sein. Weitere Informationen finden Sie in den dass:

Grundlagen der Reiseplanung

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-Nachricht: nur gRPC

Fahrtfelder

Verwenden Sie die folgenden Felder, um eine Fahrt in Fleet Engine zu erstellen. Sie können verschiedene für die verschiedenen Arten von Fahrten: ein- oder mehrere Ziele, oder gemeinsame Pooling-Trips. Sie können die optionalen Felder beim Erstellen der Fahrt angeben oder sie später festlegen, wenn Sie die Fahrt aktualisieren.

Fahrtfelder
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. Reise-IDs haben bestimmte Einschränkungen, wie in der Referenz angegeben.
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.
  • Shared Pooling: Legen Sie SHARED fest.
pickup_point Ja Ausgangspunkt der Fahrt.
Ziele für Fortgeschrittene Ja

Nur Fahrten mit mehreren Zielen: Die Liste der Zwischenziele, die der Fahrer zwischen Abhol- und Zielort besucht. Wie bei dropoff_point kann dieses Feld auch später durch Aufrufen von UpdateTrip festgelegt werden. Eine Fahrt mit mehreren Zielen enthält jedoch per Definition Zwischenziele.

vehicle_waypoints Ja

Nur gemeinsam genutzte Pooling-Fahrten: In diesem Feld können die Wegpunkte mehrerer Fahrten verschränkt werden. Es enthält alle verbleibenden Wegpunkte für das zugewiesene Fahrzeug sowie als Start- und Zielort für diese Fahrt angeben. Sie können dieses Feld durch Aufrufen von CreateTrip oder UpdateTrip festlegen. 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 für die Fahrt.
dropoff_point Nein Das Ziel der Reise.
vehicle_id Nein Die ID des Fahrzeugs, das der Fahrt zugewiesen ist.

Beispiel: Gemeinsames Pooling erstellen

Im folgenden Beispiel für eine Back-End-Integration wird gezeigt, wie eine Fahrt erstellt und sie einem Fahrzeug als geteiltes Pooling zuzuweisen.

// 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 Pooling-Reisen aktualisieren

Jede in Fleet Engine erstellte Fahrt muss einem Fahrzeug zugewiesen sein, Fleet Engine, um die voraussichtlichen Ankunftszeiten für Fahrten zu berechnen und zu verfolgen. Sie können dies während der oder später, wenn Sie die Fahrt aktualisieren.

Für gemeinsame Pooling-Reisen müssen Sie eine Reihenfolge zu den nicht besuchten Wegpunkten angeben in der Sammlung der Fahrzeug-Wegpunkte (Trip.vehicle_waypoints) der Fahrt. Flotte Das Modul verwendet diese Liste, um die Wegpunkte für alle Fahrten automatisch zu aktualisieren im gemeinsamen Pool.

Stellen Sie sich z. B. zwei Fahrten mit gemeinsamem Pool vor, Fahrt A und Fahrt B:

  • Fahrt A ist auf der Route zum Ausstiegsort.
  • Fahrt B wird dann demselben Fahrzeug hinzugefügt.

In 1 UpdateTripRequest für Fahrt B vehicleId und Trip.vehicle_waypoints auf den optimalen Wert Wegpunktbestellung: B AbholungA AbbruchB Abbruch.

  • Wenn Sie getVehicle() aufrufen, wird remainingWaypoints zurückgegeben, das Folgendes enthält:
    B Abholung → A Abgabe → B Abgabe.
  • Entweder getTrip() oder der onTripRemainingWaypointsUpdated-Callback für Fahrt A gibt remainingWaypoints zurück, die Folgendes enthalten:
    B Start → A Ziel.
  • Entweder getTrip() oder der onTripRemainingWaypointsUpdated-Callback für Fahrt B gibt remainingWaypoints zurück, die Folgendes enthalten:
    B Start → A Ziel → B Ziel.

Beispiel

Im folgenden Beispiel für eine Back-End-Integration wird gezeigt, wie eine Fahrt mit Fahrzeug-ID und Wegpunkte für zwei Fahrten mit gemeinsamem Pool.

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