Buscando conductores cercanos

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:
  • PICKUP_POINT_ETA, la hora de llegada estimada del vehículo en el punto de partida.
  • PICKUP_POINT_DISTANCE, la distancia entre el vehículo y el punto de partida.
  • DROPOFF_POINT_ETA, la hora de llegada estimada del vehículo para completar el viaje en el punto de llegada.
  • PICKUP_POINT_STRAIGHT_DISTANCE, la distancia en línea recta (no en la ruta) entre el vehículo y el punto de partida.
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.