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 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:
- Fleet Engine einrichten
- Fahrzeug erstellen
- Reiseszenarien in der Übersicht zu On-Demand-Reisen
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.
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. Ich können beim Erstellen der Fahrt die optionalen Felder ausfüllen oder 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, 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:
<ph type="x-smartling-placeholder">
|
pickup_point | Ja | Ausgangspunkt 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 |
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 |
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 befindet sich auf der Strecke zu ihrem Ziel.
- 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 → Ein Abbruch → B Abbruch. - Entweder
getTrip()
oder deronTripRemainingWaypointsUpdated
-Callback für Fahrt A gibtremainingWaypoints
zurück Enthält:
B Abholung → Ein Abbruch. - 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 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;
}