Como parte del servicio de viajes a pedido de Mobility, puedes encontrar vehículos cercanos con el método SearchVehicles.
El método SearchVehicles te permite encontrar vehículos cercanos disponibles en tu app para dispositivos móviles del consumidor que sean más adecuados para un viaje específico o una solicitud de entrega. La API de SearchVehicles muestra una lista clasificada de vehículos cuyos atributos coinciden con los atributos de viaje solicitados. La clasificación se ordena según tu elección de hora estimada de llegada, distancia o distancia en línea recta desde el punto de partida.
| Atributos de búsqueda | Atributos del vehículo |
|---|---|
|
|
Usa el método SearchVehicles
Para usar SearchVehicles, sigue este proceso general:
- Crea un objeto
SearchVehiclesRequesten función del viaje que se asignará. - Llama a la API de
SearchVehicles(vehicleService.searchVehicles) con la solicitud creada. - Procesa el objeto
SearchVehicleResponseque muestra la API.
Campos de SearchVehiclesRequest
Usa los siguientes campos de atributos obligatorios para crear un objeto SearchVehiclesRequest:
| Campo | Descripción |
|---|---|
| elemento superior | Obligatorio. Debe tener el formato providers/{provider}. El proveedor debe ser el ID del proyecto de Google Cloud del que es miembro la cuenta de servicio que realiza esta llamada. |
| vehicle_types | Obligatorio. Tipos de vehículos solicitados, ya sea AUTO, TWO_WHEELER, TAXI, TRUCK, BICYCLE o PEDESTRIAN. |
| trip_types | Obligatorio. EXCLUSIVE (un viaje activo a la vez por conductor) o SHARED (uno o varios viajes a la vez por conductor). |
| minimum_capacity | Obligatorio. La capacidad restante mínima del vehículo para un viaje nuevo, ya sea para pasajeros o entregas. |
| pickup_point | Obligatorio. La ubicación de partida del viaje en coordenadas de latitud y longitud. |
| dropoff_point | Es opcional. La ubicación de llegada del viaje en coordenadas de latitud y longitud. El campo es obligatorio si trip_types contiene TripType.SHARED. |
| pickup_radius_meters | Obligatorio. El radio en metros del área de búsqueda de vehículos desde el punto de partida. |
| order_by | Obligatorio. Ordena los vehículos según una de las siguientes opciones:
|
| count | Obligatorio. La cantidad máxima de vehículos que se mostrarán, de 1 a 50. |
| filtrar | Opcional. Una consulta de filtro que se aplicará cuando se busquen vehículos. |
| maximum_staleness | Opcional. Restringe la búsqueda solo a aquellos vehículos que han enviado actualizaciones de ubicación a Fleet Engine dentro de la duración especificada. Si no se configura este campo, el servidor usa cinco minutos como valor predeterminado. |
Consulta la documentación de referencia para ver el conjunto completo de SearchVehicleRequest.
Situaciones de SearchVehiclesRequest
En esta sección, se muestran ejemplos de cómo crear un objeto SearchVehiclesRequest.
Por ejemplo, supongamos que un cliente quiere que lo recojan en RestaurantX y tienes cuatro vehículos:
- Vehículo 1: A 3,500 m de RestaurantX.
- Vehículo 2: A 100 m de RestaurantX con un viaje activo con partida y llegada en las ubicaciones A y B.
- Vehículo 3: A 200 m de RestaurantX con una llegada restante muy lejos.
- Vehículo 4: A 1,000 m de RestaurantX.
A continuación, se muestran varias solicitudes por el vehículo que muestran.
Muestra el vehículo 4
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA
Muestra los vehículos 3 y 4
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, is_back_to_back enabled
Muestra los vehículos 2, 3 y 4
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, current_trips_present = ALL
Campos de SearchVehiclesResponse
Un objeto SearchVehiclesResponse consiste en una lista de entidades VehicleMatch, clasificadas por el atributo order_by especificado en el objeto SearchVehiclesRequest. Cada entidad VehicleMatch tiene los siguientes campos:
| Campo | Descripción |
|---|---|
| vehículo | El objeto Vehicle, incluidos los atributos vehicle_id y Vehicle. |
| vehicle_pickup_eta | La hora estimada de llegada del vehículo a la ubicación de partida si este viaje se asignara al vehículo ahora mismo. |
| vehicle_pickup_distance_meter | La distancia en metros entre el vehículo y la ubicación de partida del viaje nuevo. |
| vehicle_pickup_straight_line_distance_meter | La distancia en línea recta en metros entre el vehículo y la ubicación de partida del viaje nuevo. |
| vehicle_dropoff_eta | La hora estimada de llegada del vehículo a la ubicación de destino si este viaje se asignara al vehículo ahora mismo. |
| vehicle_trips_waypoints | Una lista de los puntos de referencia restantes, incluidos los puntos de partida y llegada, para los viajes activos asignados actualmente al vehículo. |
| vehicle_match_type | El tipo de viaje del vehículo, ya sea EXCLUSIVE, BACK_TO_BACK, CARPOOL o CARPOOL_BACK_TO_BACK. |
Para obtener una lista completa de los campos VehicleMatch, consulta lo siguiente:
VehicleMatch message(gRPC)VehicleMatch resource(REST)
Usa consultas de filtro
SearchVehicles y ListVehicles admiten el filtrado de atributos de vehículos mediante una consulta de filtro.
Las consultas de filtro SOLO admiten el filtrado de atributos personalizados para vehículos y no se pueden usar para otros campos. Cuando se usa en una búsqueda que incluye otros criterios de campo, como minimum_capacity o vehicle_types, la consulta de filtro funciona como una cláusula AND.
Por ejemplo, si buscas un vehículo que tenga una capacidad mínima de 6 y filtras un attributes como apto para mascotas, tus criterios solo mostrarán aquellos vehículos que sean aptos para mascotas y puedan transportar al menos 6 pasajeros.
Para obtener información sobre la sintaxis de las consultas de filtro, consulta AIP-160 para ver ejemplos. Para obtener detalles sobre la creación de atributos de vehículos, consulta el campo Atributos del vehículo en la guía Actualiza los campos del vehículo.
Ejemplo de SearchVehicles
En el siguiente ejemplo, se muestra cómo usar la API de SearchVehicles con la
biblioteca gRPC de Java. Para obtener una lista completa de los idiomas compatibles, consulta
Bibliotecas cliente para servicios de viajes a pedido.
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.