Como parte de tu solución On-demand Rides & Deliveries, la función de planificación de rutas y despacho te permite encontrar conductores cercanos proporcionando una API de SearchVehicles
.
La API de SearchVehicles
te permite encontrar conductores cercanos disponibles en tu app para consumidores de la solución On-demand Rides & Deliveries que se adapten mejor a una tarea, como un viaje o una solicitud de entrega. La API de SearchVehicles
muestra una lista clasificada de conductores que coinciden con los atributos de los vehículos de tu flota.
Los atributos de la tarea pueden incluir lo siguiente:
- Ubicaciones de recogida y llegada
- Tipos de viajes y vehículos solicitados
- Capacidad requerida
- Otros atributos de coincidencia obligatorios
Los atributos de vehículos pueden incluir lo siguiente:
- La ubicación más reciente de un vehículo
- El estado, tipo o capacidad del vehículo
- Otros atributos personalizados
La clasificación se ordena según tu elección de la hora de llegada estimada, la distancia o la distancia en línea recta desde el punto de partida.
Ten en cuenta que debes tener privilegios de superusuario del servicio o de usuario del SDK de consumidor de Fleet Engine para usar la API de SearchVehicles
. Para obtener más información, consulta Autenticación y autorización.
Usa la API de SearchVehicles
Para usar la API de SearchVehicles
, haz lo siguiente:
- Construye un
SearchVehiclesRequest
en función de la tarea que se asignará. - Llama a la API de
SearchVehicles
(vehicleService.searchVehicles
) con la solicitud construida. - Procesa el
SearchVehicleResponse
que muestra la API.
Campos SearchVehiclesRequest
Usa los siguientes campos de atributos obligatorios para construir un SearchVehiclesRequest
:
Campo | Descripción |
---|---|
parent | Obligatorio: Debe estar en el formato providers/{provider}. El proveedor debe ser el ID del proyecto (por ejemplo, sample-cloud-project) del proyecto de Google Cloud del que forma parte 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: que sea EXCLUSIVO (un viaje activo a la vez por conductor) o COMPARTIDO (uno o varios viajes a la vez por conductor) |
minimum_capacity | Obligatorio: Es la capacidad mínima restante del vehículo para una tarea nueva, ya sea para pasajeros o entregas. |
pickup_point | Obligatorio: Es la ubicación de partida de la tarea en coordenadas de latitud y longitud. |
dropoff_point | Opcional. Es la ubicación de destino de la tarea en coordenadas de latitud y longitud. Este 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: Pide los vehículos por una de estas opciones:
|
recuento | Obligatorio: La cantidad máxima de vehículos que se pueden mostrar de 1 a 50. |
Consulta la documentación de referencia para ver el conjunto completo de SearchVehicleRequestfields.
Ejemplos de SearchVehiclesRequest
En esta sección, se muestran ejemplos de cómo construir un SearchVehiclesRequest
.
Por ejemplo, supongamos que tienes que asignar una tarea de retiro en RestaurantX y cuatro vehículos:
- Vehículo 1, que se encuentra a 3,500 m de RestaurantX.
- Vehículo 2, que se encuentra a 100 m de RestaurantX y tiene un viaje activo con un punto de partida y llegada en las ubicaciones A y B.
- Vehículo 3, que se encuentra a 200 m de RestaurantX y tiene un destino restante muy lejano.
- Vehículo 4, que se encuentra a 1,000 m de RestaurantX.
El siguiente SearchVehiclesRequest
muestra Vehicle 4:
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA
El siguiente SearchVehiclesRequest
muestra los vehículos 3 y 4:
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, is_back_to_back enabled
El siguiente SearchVehiclesRequest
muestra los vehículos 2, 3 y 4:
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, current_trips_present = ALL
Campos SearchVehiclesResponse
Una SearchVehiclesResponse
consta de una lista de entidades VehicleMatch
, clasificadas por el atributo order_by especificado en 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 | Es la hora de llegada estimada del vehículo en el punto de partida de la tarea nueva. Esta es la hora de llegada estimada en viaje. |
vehicle_pickup_distance_meter | La distancia en metros entre el vehículo y la ubicación de partida de la nueva tarea. |
vehicle_pickup_straight_line_distance_meter | La distancia lineal en metros entre el vehículo y la ubicación de partida de la nueva tarea. |
vehicle_dropoff_eta | La marca de tiempo de la hora de llegada del vehículo en el punto de partida de la nueva tarea. Ten en cuenta que la hora de llegada estimada es la de viaje. |
vehicle_trips_waypoints | Una lista de los puntos de referencia restantes, incluidos los puntos de partida y llegada, para los viajes activos actualmente asignados 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. |
Ejemplo de SearchVehicles
En el siguiente ejemplo, se muestra cómo usar la API de 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.