In diesem Dokument wird beschrieben, wie Sie eine Fahrt mit Mitfahrgelegenheit erstellen, die richtigen Felder festlegen und sie einem Fahrzeug zuweisen. Es wird davon ausgegangen, dass Sie Flotte eingerichtet haben Du hast Fahrzeuge erstellt, eine funktionierende Fahrer-App und optional eine Nutzer-App. Außerdem sollten Sie mit den verschiedenen Szenarien für On-Demand-Fahrten. Weitere Informationen finden Sie in den folgenden Leitfäden:
- Fleet Engine einrichten
- Fahrzeug erstellen
- Reise-Szenarien in der Übersicht On-Demand-Fahrten
Grundlagen der Reiseplanung
In diesem Abschnitt werden die Anfragedetails beschrieben, die zum Erstellen einer Fahrt in der Fleet Engine erforderlich sind. Sie senden eine Anfrage zur Erstellung mit gRPC und REST.
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.
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-Integration über dasselbe Dienstkonto Rollen. |
trip_id | Ja | Ein von Ihnen erstellter String, mit dem diese Fahrt eindeutig identifiziert wird. Fahrten-IDs unterliegen bestimmten Einschränkungen, die in der Referenz angegeben sind. |
trip_type | Ja | Legen Sie für den zu erstellenden Fahrttyp die folgenden Werte für TripType fest:
|
pickup_point | Ja | Der Startpunkt 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 |
vehicle_waypoints | Ja | Nur gemeinsam genutzte Pooling-Fahrten: In diesem Feld können die Wegpunkte mehrerer Fahrten verschränkt 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 |
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: Fahrt mit geteiltem Pool erstellen
Im folgenden Beispiel für die Backend-Integration wird gezeigt, wie eine Fahrt erstellt und einem Fahrzeug als Fahrt mit Mitfahrgelegenheit zugewiesen wird.
// 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;
}
Fahrten mit geteiltem Shuttle 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 entweder beim Erstellen der Fahrt oder später beim Aktualisieren der Fahrt tun.
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 Abholung
→ A Abbruch →
B Abbruch.
- Der Aufruf von
getVehicle()
gibtremainingWaypoints
zurück Enthält:
B Abholung → A Abbruch → B Abbruch. - Entweder
getTrip()
oder deronTripRemainingWaypointsUpdated
-Callback für Fahrt A gibtremainingWaypoints
zurück, die Folgendes enthalten:
B Start → A Ziel. - Entweder
getTrip()
oder deronTripRemainingWaypointsUpdated
-Callback für Fahrt B gibtremainingWaypoints
zurück enthalten:
B Abholung → Ein Abbruch → B Abbruch.
Beispiel
Im folgenden Beispiel für die Backend-Integration wird gezeigt, wie eine Fahrt mit der Fahrzeug-ID und den Wegpunkten für zwei Fahrten mit geteiltem Shuttle aktualisiert wird.
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;
}