Neste documento, descrevemos como criar uma viagem em pool compartilhada, definir campos e atribuí-los a um veículo para serem atendidos. Ele pressupõe que você configurou a frota Engine, você criou veículos, tem um app para motoristas funcionando e opcionalmente, um aplicativo para o consumidor. Você também deve estar familiarizado com as várias para viagens sob demanda. Consulte os seguintes guias relacionados para que:
- Configurar o Fleet Engine
- Criar um veículo
- Cenários de viagem na visão geral das Viagens sob demanda
Noções básicas de criação de viagens
Esta seção descreve os detalhes da solicitação necessários para criar uma viagem no Fleet Engine. Você emite uma solicitação de criação usando gRPC e REST.
Campos da viagem
Use os campos a seguir para criar uma viagem no Fleet Engine. É possível usar campos diferentes para os diferentes tipos de viagens: com um ou vários destinos, viagens consecutivas ou compartilhadas. Você você pode fornecer os campos opcionais ao criar a viagem ou pode defini-los mais tarde, ao atualizar a viagem.
Nome | Obrigatório? | Descrição |
---|---|---|
parent | Sim | Uma string que inclui o ID do projeto. Esse ID precisa ser o mesmo usado em toda a integração do Fleet Engine com a mesma conta de serviço papéis de segurança na nuvem. |
trip_id | Sim | Uma string que você cria que identifica exclusivamente essa viagem. Os IDs de viagem têm algumas restrições, conforme indicado na referência. |
trip_type | Sim | Defina TripType como os seguintes valores para o tipo de viagem que você está criando:
|
pickup_point | Sim | Ponto de origem da viagem. |
Destinos intermediários | Sim | Somente viagens com vários destinos: a lista de destinos intermediários que o motorista visita entre a coleta e a entrega. Assim como o |
vehicle_waypoints | Sim | Somente viagens em pool compartilhado: este campo permite a intercalação dos waypoints de várias viagens.
Contém todos os waypoints restantes do veículo atribuído, bem como
como os waypoints de embarque e desembarque desta viagem. É possível definir esse campo
chamando |
number_of_passengers | Não | O número de passageiros na viagem. |
dropoff_point | Não | O destino da viagem. |
vehicle_id | Não | O ID do veículo atribuído à viagem. |
Exemplo: criar uma viagem compartilhada
O exemplo de integração de back-end a seguir demonstra como criar uma viagem e atribuí-la a um veículo como uma viagem compartilhada.
// 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;
}
Atualizar viagens compartilhadas
Qualquer viagem criada no Fleet Engine precisa ser atribuída a um veículo para que o Fleet Engine possa calcular os horários estimados de chegada e rastrear a viagem. Você pode fazer isso durante criação da viagem ou depois, ao atualizá-la.
Para viagens em pool compartilhadas, você precisa especificar uma ordem para os waypoints não visitados.
no conjunto de waypoints do veículo (Trip.vehicle_waypoints
). Frota
O mecanismo usa essa lista para atualizar automaticamente os waypoints das viagens
no pool compartilhado.
Por exemplo, considere duas viagens compartilhadas, Viagem A e Viagem B:
- A viagem A está a caminho do local de desembarque.
- A Viagem B é então adicionada ao mesmo veículo.
Em uma UpdateTripRequest
para a Viagem B,
você define vehicleId
e Trip.vehicle_waypoints
como o ideal
Ordem do waypoint: B Retirada
→ Uma Desistência →
B Desistência.
- Chamar
getVehicle()
retornaremainingWaypoints
que contém:
B Pickup → A Drop-off → B Drop-off. getTrip()
ou o callbackonTripRemainingWaypointsUpdated
para a Viagem A retornaremainingWaypoints
que contém:
B Pickup → A Drop-off.getTrip()
ou o callbackonTripRemainingWaypointsUpdated
para Viagem B retornaremainingWaypoints
que contém:
B Pickup → A Drop-off → B Drop-off.
Exemplo
O exemplo de integração de back-end a seguir demonstra como atualizar uma viagem com o ID do veículo e os waypoints de duas viagens em pool compartilhado.
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;
}