Como parte do serviço de viagem sob demanda, você pode encontrar veículos nas proximidades usando o método SearchVehicles
.
O método SearchVehicles
permite encontrar veículos disponíveis nas proximidades no seu app para dispositivos móveis que sejam mais adequados para uma corrida específica ou uma solicitação de entrega. A API SearchVehicles
retorna uma lista classificada de veículos cujos atributos correspondem aos atributos de viagem solicitados. A classificação é ordenada pela sua escolha de ETA, distância ou distância em linha reta do ponto de retirada.
Pesquisar atributos | Atributos do veículo |
---|---|
|
|
Use o método SearchVehicles
Para usar o SearchVehicles
, siga este processo geral:
- Crie um
SearchVehiclesRequest
com base na viagem a ser atribuída. - Chame a API
SearchVehicles
(vehicleService.searchVehicles
) com a solicitação criada. - Processe o
SearchVehicleResponse
retornado pela API.
Campos SearchVehiclesRequest
Use os seguintes campos de atributo obrigatórios para criar um
SearchVehiclesRequest
:
Campo | Descrição |
---|---|
primária | Obrigatório. Precisa estar no formato providers/{provider}. O provedor precisa ser o ID do projeto do Google Cloud em que a conta de serviço que faz a chamada é membro. |
vehicle_types | Obrigatório. Tipos de veículos solicitados: AUTO, TWO_WHEELER, TAXI, TRUCK, BICYCLE ou PEDESTRIAN. |
trip_types | Obrigatório. EXCLUSIVO (uma viagem ativa por motorista) ou COMPARTILHADO (uma ou várias viagens por motorista). |
minimum_capacity | Obrigatório. A capacidade mínima restante do veículo para uma nova viagem, seja para passageiros ou entregas. |
pickup_point | Obrigatório. O local de partida da viagem em coordenadas de latitude/longitude. |
dropoff_point | Opcional. O local de destino da viagem em coordenadas de latitude/longitude. O campo é obrigatório se trip_types contém TripType.SHARED. |
pickup_radius_meters | Obrigatório. O raio, em metros, da área de pesquisa de veículos a partir do ponto de retirada. |
order_by | Obrigatório. Ordene os veículos de uma das seguintes maneiras:
|
contagem | Obrigatório. O número máximo de veículos a serem retornados, de 1 a 50. |
Filtro | Opcional. Uma consulta de filtro a ser aplicada ao pesquisar veículos. |
Consulte a documentação de referência para conferir o conjunto completo de campos SearchVehicleRequest.
Cenários de SearchVehiclesRequests
Esta seção mostra exemplos de como criar uma SearchVehiclesRequest
.
Por exemplo, suponha que um cliente queira ser atendido no Restaurante X e que você tenha quatro veículos:
- Veículo 1: a 3.500 m do Restaurante X.
- Veículo 2: a 100 m do Restaurante X, com uma viagem ativa com coleta e entrega nos locais A e B.
- Veículo 3: a 200 m do Restaurante X com uma entrega restante muito longe.
- Veículo 4: a 1.000 m do Restaurante X.
A seguir, são mostradas várias solicitações do veículo que elas retornam.
Retorna o veículo 4
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA
Retorna Veículo 3 e 4
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, is_back_to_back enabled
Retorna Veículo 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 no SearchVehiclesRequest
. Cada
entidade VehicleMatch
tem os seguintes campos:
Campo | Descrição |
---|---|
veículo | O objeto Vehicle , incluindo os atributos vehicle_id e Vehicle . |
vehicle_pickup_eta | O HEC do veículo no local de retirada da nova viagem. Este é o tempo estimado de chegada de carro. |
vehicle_pickup_distance_meter | A distância em metros entre o veículo e o local de retirada da nova viagem. |
vehicle_pickup_straight_line_distance_meter | A distância em linha reta em metros entre o veículo e o local de retirada da nova viagem. |
vehicle_dropoff_eta | O carimbo de data/hora do HEC do veículo no local de retirada da nova viagem. O HEC é o HEC de direção. |
vehicle_trips_waypoints | Uma lista dos waypoints restantes, incluindo os pontos de embarque e desembarque, das viagens ativas atualmente atribuídas ao veículo. |
vehicle_match_type | O tipo de viagem do veículo: EXCLUSIVE, BACK_TO_BACK, CARPOOL ou CARPOOL_BACK_TO_BACK. |
Para conferir uma lista completa de campos VehicleMatch
, consulte:
VehicleMatch message
(gRPC)VehicleMatch resource
(REST)
Usar consultas de filtro
SearchVehicles
e ListVehicles
oferecem suporte à filtragem de atributos de veículo
usando uma consulta de filtro.
As consultas de filtro oferecem suporte APENAS à filtragem de atributos personalizados para veículos e
não podem ser usadas para outros campos. Quando usado em uma pesquisa que inclui outros critérios de campo, como minimum_capacity
ou vehicle_types
, a consulta de filtro funciona como uma cláusula AND
.
Por exemplo, se você pesquisar um veículo com capacidade mínima de 6 pessoas e
filtrar um attributes
, como "aceita animais de estimação", seus critérios vão retornar apenas
os veículos que aceitam animais de estimação e podem transportar pelo menos 6 passageiros.
Para a sintaxe de consulta de filtro, consulte AIP-160 para conferir exemplos. Para saber mais sobre a criação de atributos de veículos, consulte Campo de atributos de veículos no guia Atualizar campos de veículos.
Exemplo de SearchVehicles
O exemplo a seguir mostra como usar a API SearchVehicles
com a
biblioteca gRPC do Java.
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.