This document describes how to create a back-to-back trip, set the correct fields, and assign it to a vehicle to fulfill. It assumes you have set up Fleet Engine, you have created vehicles, have a working driver app, and optionally, a consumer app. You should also be familiar with the various trip scenarios available for on-demand trips. See the following related guides for that:
- Set up Fleet Engine
- Create a vehicle
- Trip scenarios in the On-demand tripsoverview
Trip creation basics
This section describes the request details necessary for creating a trip in Fleet Engine. You issue a creation request using either gRPC and REST.
Trip Fields
Use the following fields to create a trip in Fleet Engine. You can use different fields for the different kinds of trips: single- or multi-destination, back-to-back, or shared pooling trips. You can supply the optional fields when you create the trip, or you can set them later when you update the trip.
- Single destination: Set to
SHARED
orEXCLUSIVE
. - Multi-destination: Set to
EXCLUSIVE
. - Back-to-back: Set to
EXCLUSIVE
. - Shared pooling: Set to
SHARED
.
Multi-destination trips only: The list of intermediate destinations that the driver visits in between
pickup and drop-off. As with dropoff_point
, this field
can also be set later by calling UpdateTrip
, but a multi-destination
trip by definition contains intermediate destinations.
Shared-pooling trips only: This field supports interleaving the waypoints from multiple trips.
It contains all of the remaining waypoints for the assigned vehicle, as well
as the pickup and drop-off waypoints for this trip. You can set this field
by calling CreateTrip
or UpdateTrip
. You can also
update vehicle waypoints through the waypoints
field with a
call to UpdateVehicle
.
The service does not return this information on GetTrip
calls
due to privacy reasons.
Example: create a back-to-back trip
The following demonstrates how to create a back-to-back trip and assign it to a vehicle. In this scenario, trip creation is the same as for a single-destination trip. It's only later that you create another trip and assign it to a vehicle with an already-active trip.
// A vehicle with ID 'my-vehicle' is already created and it is assigned to a trip with ID 'current-trip'.
static
final
String
PROJECT_ID
=
"my-rideshare-co-gcp-project"
;
static
final
String
VEHICLE_ID
=
" my-vehicle"
;
static
final
String
TRIP_ID
=
"back-to-back-trip"
);
TripServiceBlockingStub
tripService
=
TripService
.
newBlockingStub
(
channel
);
String
parent
=
"providers/"
+
PROJECT_ID
;
Trip
trip
=
Trip
.
newBuilder
()
.
setTripType
(
TripType
.
EXCLUSIVE
)
.
setPickupPoint
(
TerminalLocation
.
newBuilder
().
setPoint
(
LatLng
.
newBuilder
()
.
setLatitude
(
-
6.195139
).
setLongitude
(
106.820826
)))
.
setDropoffPoint
(
TerminalLocation
.
newBuilder
().
setPoint
(
LatLng
.
newBuilder
()
.
setLatitude
(
-
6.1275
).
setLongitude
(
106.6537
)))
.
setVehicleId
(
VEHICLE_ID
)
.
build
();
// Create trip request
CreateTripRequest
createTripRequest
=
CreateTripRequest
.
newBuilder
()
.
setParent
(
parent
)
.
setTripId
(
TRIP_ID
)
.
setTrip
(
trip
)
.
build
();
// Error handling.
try
{
// Fleet Engine automatically assigns a 'waypoints' list to the trip containing
// the vehicle's current trip waypoints.
Trip
createdTrip
=
tripService
.
createTrip
(
createTripRequest
);
}
catch
(
StatusRuntimeException
e
)
{
Status
s
=
e
.
getStatus
();
switch
(
s
.
getCode
())
{
case
ALREADY_EXISTS
:
break
;
case
PERMISSION_DENIED
:
break
;
}
return
;
}
Update back-to-back trips
When you assign a vehicle for a back-to-back trip, you assign a trip to a vehicle even if it has already been assigned one.
Any trip created in Fleet Engine must be assigned to a vehicle in order for Fleet Engine to calculate trip ETAs and track it. You can do this either during trip creation or later when you update the trip.
After you assign the trip to a vehicle, Fleet Engine automatically adds the
waypoints associated with the back-to-back trips to the vehicle's waypoints
field. A trip's remainingWaypoints
field contains a list of all of the
waypoints, including those from other trips that will be visited before
the trip's drop-off.
For example, consider two back-to-back trips: Trip A and Trip B . The vehicle has picked up the consumer for Trip A , and while en route to the drop-off location, the driver receives a request to pickup another consumer for the next trip, Trip B .
- Calling
getVehicle()
returnsremainingWaypoints
that contain:
A Drop-off → B Pickup → B Drop-off . - Either
getTrip()
or theonTripRemainingWaypointsUpdated
callback for Trip A returnsremainingWaypoints
that contain:
A Drop-off . - Either
getTrip()
or theonTripRemainingWaypointsUpdated
callback for Trip B returnsremainingWaypoints
that contain:
A Drop-off → B Pickup → and B Drop-off .