En este documento, se describe cómo crear un viaje con varios destinos, establecer la campos y asignarlos a un vehículo para completar. Se supone que configuraste la flota Engine, creaste vehículos, tienes una app para conductores que funciona y opcionalmente, una aplicación para consumidores. También debes estar familiarizado con los diversos de viajes disponibles para los viajes a pedido. Consulta las siguientes guías relacionadas para lo siguiente:
- Configura Fleet Engine
- Cómo crear un vehículo
- Situaciones de viaje en la descripción general de Viajes a pedido
Conceptos básicos sobre la creación de viajes
En esta sección, se describen los detalles de la solicitud necesarios para crear un viaje en Fleet Engine. Emites una solicitud de creación con gRPC o REST.
Campos de viaje
Usa los siguientes campos para crear un viaje en Fleet Engine. Puedes usar diferentes campos para los diferentes tipos de viajes: uno o varios destinos, consecutivos o de reducción compartida. Tú puedes proporcionar los campos opcionales cuando crees el viaje o puedes configurarlos más adelante cuando actualices el viaje.
Nombre | ¿Obligatorio? | Descripción |
---|---|---|
parent | Sí | Es una cadena que incluye el ID del proyecto. Este ID debe ser el mismo que se usa en toda la integración de Fleet Engine con la misma cuenta de servicio roles de seguridad. |
trip_id | Sí | Es una cadena que creas para identificar este viaje de forma exclusiva. Los IDs de viaje tienen ciertas restricciones, como se indica en la referencia. |
trip_type | Sí | Establece los siguientes valores de TripType para el tipo de viaje que crearás:
|
pickup_point | Sí | Es el punto de origen del viaje. |
Destinos intermedios | Sí | Solo viajes con varios destinos: Es la lista de destinos intermedios que el conductor visita.
partida y destino. Al igual que con |
vehicle_waypoints | Sí | Solo viajes de reducción compartida: Este campo admite la intercalación de los puntos de referencia desde varios viajes.
Contiene todos los puntos de referencia restantes para el vehículo asignado, además de
como puntos de referencia de partida y llegada para este viaje. Puedes establecer este campo llamando a |
number_of_passengers | No | Es la cantidad de pasajeros del viaje. |
dropoff_point | No | El destino del viaje. |
vehicle_id | No | Es el ID del vehículo asignado al viaje. |
Ejemplo: Crea un viaje con varios destinos
A continuación, se muestra cómo crear un viaje exclusivo con varios destinos con un punto de partida, uno de llegada y un destino intermedio.
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;
}
Actualiza un viaje con varios destinos
Debes configurar el viaje con un ID de vehículo para que Fleet Engine pueda hacer un seguimiento el vehículo a lo largo de su ruta. Para obtener detalles sobre cómo actualizar un viaje, consulta Actualiza viajes y administra su estado.
Si no especificas un destino de destino o intermedio, debes hacer lo siguiente: crear el viaje, siempre puedes hacerlo en este punto.
Ejemplo de actualización de viaje
A continuación, se muestra cómo actualizar un viaje para agregar una lista de viajes y configura un ID de vehículo.
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;
}
Administra el estado de los viajes con varios destinos
Especifica el estado de un viaje con uno de los valores de enumeración TripStatus
. Cuando cambia el estado de un viaje, por ejemplo, de ENROUTE_TO_PICKUP
a ARRIVED_AT_PICKUP
, debes actualizarlo en Fleet Engine. Viaje
siempre comienza con un valor de NEW
y termina con un valor de
COMPLETE
o CANCELED
.
En el caso de un viaje con varios destinos, además de actualizar el estado del viaje a medida que para un viaje de destino único, también debes actualizar el siguiente cada vez que tu vehículo llegue a un destino intermedio:
intermediateDestinationIndex
intermediateDestinationsVersion
Para ello, usa los siguientes valores de la enumeración TripStatus
.
ENROUTE_TO_PICKUP
ARRIVED_AT_PICKUP
ENROUTE_TO_INTERMEDIATE_DESTINATION
ARRIVED_AT_INTERMEDIATE_DESTINATION
ENROUTE_TO_DROPOFF
COMPLETE
Viaje de ejemplo con destinos intermedios
A continuación, se muestra cómo crear un viaje de varios destinos que pasó por su punto de partida y ahora está en camino a su primer destino intermedio.
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;
}