Questo documento descrive come creare un viaggio con più destinazioni, impostare il corretto e assegnarlo a un veicolo da completare. Si presume che tu abbia configurato il parco risorse Engine, hai creato veicoli, disponi di un'app per conducente funzionante e un'app consumer, facoltativamente. Dovresti anche conoscere i vari percorsi disponibili per le corse on demand. Consulta le seguenti guide correlate per che:
- Configura Fleet Engine
- Creare un veicolo
- Scenari di viaggio nella panoramica dei Viaggi on demand
Nozioni di base sulla creazione di viaggi
Questa sezione descrive i dettagli della richiesta necessari per creare una corsa in Fleet Engine. Puoi inviare una richiesta di creazione utilizzando gRPC e REST.
di Gemini Advanced.Campi viaggio
Utilizza i campi seguenti per creare una corsa in Fleet Engine. Puoi utilizzare diversi per i diversi tipi di viaggio: singola o più destinazione, di sequenze consecutive o di pooling condivisi. Tu può fornire i campi facoltativi quando crei il viaggio oppure puoi impostarli in un secondo momento, quando aggiorni la corsa.
Nome | Obbligatorio? | Descrizione |
---|---|---|
parent | Sì | Una stringa che include l'ID progetto. Questo ID deve essere lo stesso utilizzato nell'intera integrazione di Fleet Engine, con lo stesso account di servizio ruoli. |
trip_id | Sì | Una stringa creata da te che identifica in modo univoco questa corsa. Gli ID viaggio sono alcune limitazioni, come indicato nel riferimento. |
trip_type | Sì | Imposta TripType sui seguenti valori per il tipo di viaggio che stai creando:
|
pickup_point | Sì | Il punto di partenza del viaggio. |
Destinazioni intermedie | Sì | Solo viaggi con più destinazioni: l'elenco delle destinazioni intermedie visitate dal conducente.
ritiro e consegna. Come per |
vehicle_waypoints | Sì | Solo corse in pool condivise: questo campo supporta l'interfoliazione delle tappe di più corse.
Contiene tutte le tappe rimanenti per il veicolo assegnato, nonché
come tappe di partenza e arrivo della corsa. Puoi impostare questo campo
chiamando |
number_of_passengers | No | Il numero di passeggeri del viaggio. |
dropoff_point | No | La destinazione del viaggio. |
vehicle_id | No | L'ID del veicolo assegnato alla corsa. |
Esempio: creare un viaggio con più destinazioni
Di seguito viene illustrato come creare un viaggio esclusivo con più destinazioni che prevede un punto di prelievo, un punto di consegna e una destinazione intermedia.
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;
}
Aggiornare un viaggio con più destinazioni
Devi configurare il viaggio con un ID veicolo in modo che il motore del parco risorse possa monitorare il veicolo lungo il percorso. Per informazioni dettagliate su come aggiornare una corsa, consulta Aggiornare i viaggi e gestire il loro stato.
Se non specifichi un numero di abbandono o di destinazioni intermedie quando creare il viaggio, puoi sempre farlo a questo punto.
Esempio di aggiornamento della corsa
Di seguito viene illustrato come aggiornare una corsa per aggiungere un elenco di percorsi intermedi destinazioni e imposta un ID veicolo.
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;
}
Gestisci lo stato del viaggio per i viaggi con più destinazioni
Puoi specificare lo stato di una corsa utilizzando una delle enumerazioni TripStatus
e i relativi valori. Quando lo stato di un viaggio cambia, ad esempio da ENROUTE_TO_PICKUP
a
ARRIVED_AT_PICKUP
, devi aggiornarlo in Fleet Engine. Percorso
inizia sempre con il valore NEW
e termina con il valore
COMPLETE
o CANCELED
.
Per un viaggio con più destinazioni, oltre ad aggiornare lo stato del viaggio man mano che per un viaggio con una sola destinazione, devi anche aggiornare quanto segue Ogni volta che il veicolo raggiunge una destinazione intermedia:
intermediateDestinationIndex
intermediateDestinationsVersion
Per farlo, utilizza i seguenti valori dell'enumerazione TripStatus
.
ENROUTE_TO_PICKUP
ARRIVED_AT_PICKUP
ENROUTE_TO_INTERMEDIATE_DESTINATION
ARRIVED_AT_INTERMEDIATE_DESTINATION
ENROUTE_TO_DROPOFF
COMPLETE
Esempio di viaggio con destinazioni intermedie
Di seguito viene illustrato come creare un viaggio con più destinazioni che ha superato la sua punto di prelievo, ed è in viaggio verso la prima destinazione intermedia.
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;
}