Encontrar motoristas nas proximidades

Como parte da sua solução de viagens e entregas sob demanda, o recurso de planejamento de trajetos e entregas permite que você encontre motoristas próximos fornecendo uma API SearchVehicles.

A API SearchVehicles permite encontrar motoristas próximos disponíveis no app para consumidor da solução de viagens sob demanda e entregas mais adequados para uma tarefa como uma solicitação de viagem ou entrega. A API SearchVehicles retorna uma lista classificada de motoristas que correspondem aos atributos da tarefa com atributos dos veículos da sua frota.

Os atributos da tarefa podem incluir:

  • Locais de embarque e desembarque
  • Tipos de viagem e veículo solicitados
  • Capacidade exigida
  • Outros atributos de correspondência obrigatórios

Os atributos do veículo podem incluir:

  • O último local conhecido de um veículo
  • O estado, o tipo ou a capacidade do veículo
  • Outros atributos personalizados

A classificação é ordenada de acordo com o HEC, a distância ou a distância em linha reta do ponto de partida.

É necessário ter privilégios de superusuário do serviço do Fleet Engine ou de usuário do SDK de consumidor para usar a API SearchVehicles. Para mais informações, consulte Autenticação e autorização.

Como usar a API SearchVehicles

Para usar a API SearchVehicles:

  • Crie uma SearchVehiclesRequest com base na tarefa que será atribuída.
  • Chame a API SearchVehicles (vehicleService.searchVehicles) com a solicitação criada.
  • Processe o SearchVehicleResponse retornado da API.

Campos SearchVehiclesRequest

Use os campos de atributo obrigatórios abaixo para criar um SearchVehiclesRequest:

Campo Descrição
parent Obrigatório. Precisa estar no formato provedores/{provedor}. O provedor precisa ser o ID do projeto (por exemplo, sample-cloud-project) do projeto do Google Cloud de que a conta de serviço que está fazendo a chamada é membro.
vehicle_types Obrigatório. Tipos de veículos solicitados: AUTO, TWO_WHEELER, TAXI, TRUCK, BICYCLE ou PEDESTRIAN.
trip_types Obrigatório. EXCLUSIVE (uma viagem ativa por vez, por motorista) ou SHARED (uma ou várias viagens por vez, por motorista).
minimum_capacity Obrigatório. A capacidade mínima restante do veículo para uma nova tarefa, para passageiros ou entregas.
pickup_point Obrigatório. O local de partida da tarefa nas coordenadas de latitude/longitude.
dropoff_point Opcional. O local de chegada da tarefa em coordenadas de latitude/longitude. O campo será obrigatório se trip_types contiver TripType.SHARED.
pickup_radius_meters Obrigatório. O raio em metros da área de pesquisa do veículo a partir do ponto de embarque.
order_by Obrigatório. Solicitar veículos por um dos seguintes critérios:
  • PICKUP_POINT_ETA, o HEC do veículo no ponto de embarque.
  • PICKUP_POINT_DISTANCE, a distância entre o veículo e o ponto de embarque.
  • DROPOFF_POINT_ETA, o HEC do veículo para concluir a viagem no ponto de desembarque.
  • PICKUP_POINT_STRAIGHT_DISTANCE, a distância em linha reta (não no trajeto) entre o veículo e o ponto de embarque.
contagem Obrigatório. O número máximo de veículos para retornar de 1 a 50.

Consulte a documentação de referência para ver o conjunto completo de SearchVehicleRequestfields.

Exemplos de SearchVehiclesRequest

Esta seção mostra exemplos de como criar um SearchVehiclesRequest.

Por exemplo, suponha que você tenha uma tarefa de retirada a ser atribuída no RestaurantX e quatro veículos:

  • Veículo 1, que fica a 3.500 m de distância do RestaurantX.
  • Veículo 2: fica a 100 m de distância do RestaurantX e tem uma viagem ativa com embarque e desembarque nos locais A e B.
  • Veículo 3, que fica a 200 m de distância do RestaurantX e tem um desembarque restante muito longe.
  • Veículo 4, que fica a 1.000 m do RestaurantX.

O SearchVehiclesRequest a seguir retorna o Veículo 4:

Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA

O SearchVehiclesRequest a seguir retorna os veículos 3 e 4:

Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, is_back_to_back enabled

O SearchVehiclesRequest a seguir retorna os Veículos 2, 3 e 4:

Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, current_trips_present = ALL

Campos SearchVehiclesResponse

Um SearchVehiclesResponse consiste em uma lista de entidades VehicleMatch, classificadas pelo atributo order_by especificado em SearchVehiclesRequest. Cada entidade VehicleMatch tem os seguintes campos:

Campo Descrição
veículo O objeto Vehicle, incluindo os atributos module_id e Vehicle.
vehicle_pickup_eta O HEC do veículo no local de retirada da nova tarefa. Esse é o HEC dirigindo.
vehicle_pickup_distance_meter A distância em metros entre o veículo e o local de embarque da nova tarefa.
vehicle_pickup_straight_line_distance_meter A distância em linha reta em metros entre o veículo e o local de embarque da nova tarefa.
vehicle_dropoff_eta O carimbo de data/hora do HEC do veículo no local de embarque da nova tarefa. O HEC é o HEC dirigindo.
vehicle_trips_waypoints Uma lista dos waypoints restantes, incluindo os pontos de embarque e desembarque, para as viagens ativas atribuídas ao veículo.
vehicle_match_type Tipo de viagem do veículo, EXCLUSIVE, BACK_TO_BACK, CARPOOL ou CARPOOL_BACK_TO_BACK.

Exemplo de SearchVehicles

O exemplo a seguir mostra como usar a API SearchVehicles:

static final String PROJECT_ID = "project-id";

VehicleServiceBlockingStub vehicleService =
    VehicleService.newBlockingStub(channel);

String parent = "providers/" + PROJECT_ID;
SearchVehiclesRequest searchVehiclesRequest = SearchVehiclesRequest.newBuilder()
    .setParent(parent)
    .setPickupPoint( // Grand Indonesia East Mall
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
    .setDropoffPoint( // Balai Sidang Jkt Convention Center
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder().setLatitude(-6.213796).setLongitude(106.807195)))
    .setPickupRadiusMeters(2000)
    .setCount(10)
    .setMinimumCapacity(2)
    .addTripTypes(TripType.EXCLUSIVE)
    .addVehicleTypes(VehicleType.newBuilder().setCategory(Category.AUTO).build())
    .setCurrentTripsPresent(CurrentTripsPresent.ANY)
    .setFilter("attributes.on_trip=\"false\"")
    .setOrderBy(VehicleMatchOrder.PICKUP_POINT_ETA)
    .build();


try {
  SearchVehiclesResponse searchVehiclesResponse =
      vehicleService.searchVehicles(searchVehiclesRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

List<VehicleMatch> vehicleMatches =
    searchVehicleResponse.getMatchesList();

// Each VehicleMatch contains a Vehicle entity and information about the
// distance and ETA to the pickup point and drop-off point.