In diesem Dokument wird beschrieben, wie Sie eine Fahrt mit mehreren Zielen erstellen, die richtigen Felder festlegen und sie einem Fahrzeug zuweisen, das sie ausführen soll. 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 dass:
- 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 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-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:
|
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: 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;
}
Reise 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 bei der Auswahl der Stationen erstellt haben, können Sie das jederzeit tun.
Beispiel für eine Fahrtaktualisierung
Im Folgenden wird gezeigt, wie Sie eine Fahrt aktualisieren, um eine Liste mit Zwischenzielen hinzuzufügen und eine Fahrzeug-ID festzulegen.
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;
}
Reisestatus für Fahrten mit mehreren Zielen verwalten
Sie geben den Status einer Fahrt mit einer der TripStatus
-Enumerationen an
Werte. 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 für eine Reise mit einem Ziel gilt, müssen Sie auch Folgendes aktualisieren: 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
Beispielfahrt mit Zwischenzielen
Im Folgenden wird gezeigt, wie Sie eine Reise mit mehreren Zielen erstellen, die ihre und ist nun auf dem Weg zu ihrem ersten Zwischenziel.
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;
}