Ce document explique comment créer un trajet multi-destinations, et l'attribuer à un véhicule à remplir. Nous supposons que vous avez configuré Fleet Engine, que vous avez créé des véhicules, que vous disposez d'une application conducteur fonctionnelle et, éventuellement, d'une application client. Vous devez également connaître les différents scénarios de trajets disponibles pour les trajets à la demande. Consultez les guides associés suivants pour que:
- Configurer Fleet Engine
- Créer un véhicule
- Scénarios de trajet dans la présentation des trajets à la demande
Principes de base de la création de voyages
Cette section décrit les détails de la demande nécessaire à la création d'un trajet dans Fleet Engine. Vous pouvez émettre une requête de création à l'aide de gRPC et REST.
Champs de trajet
Utilisez les champs suivants pour créer un trajet dans Fleet Engine. Vous pouvez utiliser différentes pour les différents types de trajets: une seule ou plusieurs destinations, ou de pooling partagés. Vous pouvez fournir les champs facultatifs lorsque vous créez le trajet ou les définir plus tard lorsque vous le mettez à jour.
Nom | Obligatoire ? | Description |
---|---|---|
parent | Oui | Chaîne incluant l'ID de projet. Cet ID doit être le même que celui utilisé sur l'ensemble de votre intégration Fleet Engine, avec le même compte de service de rôles. |
trip_id | Oui | Chaîne que vous créez pour identifier de manière unique ce trajet. Les ID de trajet comportent certaines restrictions, comme indiqué dans la référence. |
trip_type | Oui | Définissez TripType sur les valeurs suivantes pour le type de trajet que vous créez :
|
pickup_point | Oui | Point de départ du trajet. |
Destinations intermédiaires | Oui | Multi-destination trips only (Trajets multidestinations uniquement) : liste des destinations intermédiaires visitées par le conducteur entre le trajet
le retrait et le dépose. Comme pour |
vehicle_waypoints | Oui | Shared-pooling trips only (Trajets avec pooling partagé uniquement) : ce champ permet d'entrelacer les points de cheminement de plusieurs trajets.
Il contient tous les points de repère restants pour le véhicule attribué, ainsi que les points de ramassage et de dépôt de ce trajet. Vous pouvez définir ce champ en appelant |
number_of_passengers | Non | Nombre de passagers du voyage. |
dropoff_point | Non | Destination du voyage. |
vehicle_id | Non | Identifiant du véhicule attribué au trajet. |
Exemple: Créer un voyage multi-destinations
Vous trouverez ci-dessous la procédure à suivre pour créer un trajet multidestination exclusif. qui comprend un point de prise en charge, un point de dépose et une destination intermédiaire.
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;
}
Modifier un trajet multidestination
Vous devez configurer le trajet avec un identifiant de véhicule pour que Fleet Engine puisse suivre le véhicule sur son trajet. Pour en savoir plus sur la mise à jour d'un trajet, consultez Mettre à jour les trajets et gérer leur état
Si vous ne spécifiez pas de destination de dépose ou de destination intermédiaire lorsque vous créer le trajet, vous pouvez toujours le faire à ce stade.
Exemple de mise à jour de trajet
Le code suivant montre comment mettre à jour un trajet pour ajouter une liste de trajets intermédiaires et définir un identifiant de véhicule.
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;
}
Gérer l'état des trajets multidestinations
Vous spécifiez l'état d'un trajet à l'aide de l'une des énumérations TripStatus
.
valeurs. Lorsque l'état d'un trajet change, par exemple de ENROUTE_TO_PICKUP
à
ARRIVED_AT_PICKUP
, vous devez mettre à jour l'état du trajet dans Fleet Engine. Trajet
commence toujours par la valeur NEW
et se termine par la valeur
COMPLETE
ou CANCELED
.
Pour un trajet à plusieurs destinations, en plus de mettre à jour l'état du trajet pour un trajet à destination unique, vous devez également mettre à jour Chaque fois que votre véhicule atteint une destination intermédiaire:
intermediateDestinationIndex
intermediateDestinationsVersion
Pour ce faire, utilisez les valeurs suivantes de l'énumération TripStatus
.
ENROUTE_TO_PICKUP
ARRIVED_AT_PICKUP
ENROUTE_TO_INTERMEDIATE_DESTINATION
ARRIVED_AT_INTERMEDIATE_DESTINATION
ENROUTE_TO_DROPOFF
COMPLETE
Exemple de trajet avec des destinations intermédiaires
L'exemple suivant montre comment créer un trajet multidestination dont la valeur point de départ, et est maintenant en route vers sa première destination intermédiaire.
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;
}