Recherche de conducteurs à proximité

Dans le cadre de votre solution On-demand Rides and Deliveries, la planification et la distribution des itinéraires vous permet de trouver les conducteurs à proximité en fournissant une API SearchVehicles.

L'API SearchVehicles vous permet de trouver les conducteurs disponibles à proximité dans votre Application grand public de solution Rides and Deliveries à la demande, la mieux adaptée à une tâche comme une demande de covoiturage ou de livraison. L'API SearchVehicles renvoie Une liste classée de conducteurs associant des attributs de tâche à des attributs de véhicules de votre parc.

Les attributs de tâche peuvent inclure:

  • Lieux de prise en charge et de dépose
  • Véhicules et types de trajets demandés
  • Capacité requise
  • Autres attributs de correspondance obligatoires

Voici quelques exemples d'attributs d'un véhicule:

  • Dernière position connue d'un véhicule
  • État, type ou capacité du véhicule
  • Autres attributs personnalisés

Le classement est établi en fonction de l'heure d'arrivée prévue, de la distance ou de la ligne droite. la distance à partir du point de départ.

Notez que vous devez disposer du rôle "Super utilisateur du service Fleet Engine" ou "Utilisateur du SDK client" pour le client. pour utiliser l'API SearchVehicles. Pour en savoir plus, consultez Authentification et autorisation

Utiliser l'API SearchVehicles

Pour utiliser l'API SearchVehicles:

  • Créez une SearchVehiclesRequest en fonction de la tâche à attribuer.
  • Appeler l'API SearchVehicles (vehicleService.searchVehicles) avec la requête construite.
  • Traitez le SearchVehicleResponse renvoyé par l'API.

Champs SearchVehiclesRequest

Utilisez les champs d'attribut obligatoires suivants pour créer une SearchVehiclesRequest:

Champ Description
parent Obligatoire. Doit être au format providers/{provider}. Le fournisseur doit être l'ID du projet Google Cloud (par exemple, sample-cloud-project) auquel appartient le compte de service qui effectue cet appel.
vehicle_types Obligatoire. Types de véhicules demandés : AUTO, TWO_WHEELER, TAXI, TRUCK, BICYCLE ou PEDESTRIAN.
trip_types Obligatoire. EXCLUSIF (un trajet actif à la fois par conducteur) ou PARTAGÉ (un ou plusieurs trajets à la fois, par conducteur).
minimum_capacity Obligatoire. Capacité restante minimale du véhicule pour une nouvelle tâche (passagers ou livraisons).
pickup_point Obligatoire. Le lieu de prise en charge de la tâche, en coordonnées de latitude et de longitude.
dropoff_point Facultatif. Lieu de dépôt de la tâche en coordonnées de latitude et de longitude. Ce champ est obligatoire si trip_types contient TripType.SHARED.
pickup_radius_meters Obligatoire. Rayon, en mètres, de la zone de recherche de véhicule à partir du lieu de prise en charge.
order_by Obligatoire. Commandez les véhicules de l'une des façons suivantes:
  • PICKUP_POINT_ETA, l'heure d'arrivée prévue du véhicule au lieu de prise en charge
  • PICKUP_POINT_DISTANCE, la distance entre le véhicule et le lieu de prise en charge
  • DROPOFF_POINT_ETA, l'heure d'arrivée prévue du véhicule pour terminer le trajet au point de dépôt.
  • PICKUP_POINT_STRAIGHT_DISTANCE : distance en ligne droite (hors trajet) entre le véhicule et le lieu de prise en charge.
nombre Obligatoire. Nombre maximal de véhicules à renvoyer, compris entre 1 et 50.

Reportez-vous à la documentation de référence pour découvrir l'ensemble SearchVehicleRequestfields

Exemples SearchVehiclesRequest

Cette section présente des exemples de construction d'un SearchVehiclesRequest.

Supposons, par exemple, que vous ayez une tâche de retrait à attribuer chez RestaurantX. et quatre véhicules:

  • Véhicule 1, à 3 500 m de RestaurantX.
  • Le véhicule 2, à 100 m de RestaurantX et dont le trajet est actif avec un lieu de prise en charge et de dépose aux points A et B.
  • Véhicule 3, à 200 m de RestaurantX, avec un passage restant très loin.
  • Le véhicule 4, à 1 000 m de RestaurantX.

L'élément SearchVehiclesRequest suivant renvoie le véhicule 4:

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

L'élément SearchVehiclesRequest suivant renvoie les véhicules 3 et 4:

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

Le code SearchVehiclesRequest suivant renvoie les véhicules 2, 3 et 4:

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

Champs SearchVehiclesResponse

Un élément SearchVehiclesResponse est constitué d'une liste d'entités VehicleMatch. classées selon l'attribut "order_by" spécifié dans SearchVehiclesRequest. Chaque entité VehicleMatch comporte les champs suivants:

Champ Description
véhicule L'objet Vehicle, y compris les attributs "vehicle_id" et Vehicle
vehicle_pickup_eta L'heure d'arrivée prévue du véhicule au lieu de prise en charge de la nouvelle tâche. Il s'agit de l'heure d'arrivée prévue conduite.
vehicle_pickup_distance_meter Distance en mètres entre le véhicule et le lieu de prise en charge de la nouvelle tâche.
vehicle_pickup_straight_line_distance_meter Distance en ligne droite en mètres entre le véhicule et le lieu de prise en charge de la nouvelle tâche.
vehicle_dropoff_eta La valeur Timestamp de l'heure d'arrivée prévue du véhicule au lieu de prise en charge de la nouvelle tâche. Notez que l'heure d'arrivée prévue est l'heure d'arrivée prévue conduire.
vehicle_trips_waypoints Liste des points de cheminement restants, y compris les lieux de prise en charge et de dépose, pour les trajets actifs actuellement attribués au véhicule.
vehicle_match_type Type de trajet du véhicule : EXCLUSIVE, BACK_TO_BACK, CARPOOL ou CARPOOL_BACK_TO_BACK.

Exemple SearchVehicles

L'exemple suivant montre comment utiliser l'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.