Ce document explique comment créer un trajet en covoiturage, définir les champs appropriés et l'attribuer à un véhicule pour qu'il soit effectué. Nous partons du principe 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. Pour en savoir plus, consultez les guides associés suivants:
- Configurer Fleet Engine
- Créer un véhicule
- Scénarios de trajets 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 requête nécessaires pour créer un trajet dans Fleet Engine. Vous envoyez une requête de création à l'aide de gRPC ou de REST.
Champs de trajet
Utilisez les champs suivants pour créer un trajet dans Fleet Engine. Vous pouvez utiliser différents champs pour les différents types de trajets: à destination unique ou multiple, en série ou en pool partagé. 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 identique à celui utilisé pour l'ensemble de l'intégration de Fleet Engine, avec les mêmes rôles de compte de service. |
trip_id | Oui | Chaîne que vous créez pour identifier de manière unique ce trajet. Les ID de trajet sont soumis à certaines restrictions, comme indiqué dans la documentation. |
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 | Trajets multidestinations uniquement: liste des destinations intermédiaires que le conducteur visite entre le ramassage et le dépôt. Comme pour |
vehicle_waypoints | Oui | Trajets en covoiturage uniquement: ce champ permet d'intercaler 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 pour ce trajet. Vous pouvez définir ce champ en appelant |
number_of_passengers | Non | Nombre de passagers du trajet. |
dropoff_point | Non | Destination du trajet. |
vehicle_id | Non | Identifiant du véhicule attribué au trajet. |
Exemple: créer un trajet en covoiturage
L'exemple d'intégration du backend suivant montre comment créer un trajet et l'attribuer à un véhicule en tant que trajet en covoiturage.
// 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;
}
Modifier les trajets en covoiturage
Tout trajet créé dans Fleet Engine doit être attribué à un véhicule pour que Fleet Engine puisse calculer l'heure d'arrivée estimée et suivre le trajet. Vous pouvez le faire pendant la création du trajet ou plus tard lorsque vous le mettez à jour.
Pour les trajets en covoiturage, vous devez spécifier un ordre pour les points de cheminement non visités dans la collection de points de cheminement du véhicule (Trip.vehicle_waypoints
) du trajet. Fleet Engine utilise cette liste pour mettre à jour automatiquement les points de cheminement du trajet pour tous les trajets du pool partagé.
Prenons l'exemple de deux trajets en pool partagé, Trajet A et Trajet B:
- Le trajet A est en route vers son point de dépôt.
- Trajet B est ensuite ajouté au même véhicule.
Dans un UpdateTripRequest
pour le trajet B, vous définissez vehicleId
et Trip.vehicle_waypoints
sur l'ordre optimal des points de cheminement: B Pickup (B Retrait) → A Drop-off (A Dépose) → B Drop-off (B Dépose).
- L'appel de
getVehicle()
renvoie desremainingWaypoints
contenant les éléments suivants:
B Pickup → A Drop-off → B Drop-off. getTrip()
ou le rappelonTripRemainingWaypointsUpdated
pour le trajet A renvoie desremainingWaypoints
contenant les éléments suivants:
B Pickup → A Drop-off.getTrip()
ou le rappelonTripRemainingWaypointsUpdated
pour le trajet B renvoie desremainingWaypoints
contenant:
B Pickup → A Drop-off → B Drop-off.
Exemple
L'exemple d'intégration du backend suivant montre comment mettre à jour un trajet avec l'ID du véhicule et les points de cheminement pour deux trajets en covoiturage.
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;
}