Dans le cadre de votre solution On-demand Rides and Deliveries, la fonctionnalité de planification des itinéraires et de distribution vous permet de trouver les conducteurs à proximité en fournissant une API SearchVehicles
.
L'API SearchVehicles
vous permet de trouver les conducteurs à proximité disponibles dans l'application consommateur de votre solution de courses et de livraisons à la demande les mieux adaptés à une tâche, comme un trajet ou une demande de livraison. L'API SearchVehicles
renvoie une liste de conducteurs classés correspondant aux attributs des tâches et aux attributs des véhicules de votre parc.
Les attributs de tâche peuvent inclure:
- Lieux de prise en charge et de dépose
- Types de véhicules et de trajets demandés
- Capacité requise
- Autres attributs de mise en correspondance obligatoires
Voici quelques exemples d'attributs de véhicule:
- La dernière position connue d'un véhicule
- L'état, le type ou la capacité du véhicule
- Autres attributs personnalisés
Le classement est organisé en fonction de votre choix entre l'heure d'arrivée prévue, la distance ou la distance en ligne droite depuis le point de prise en charge.
Notez que vous devez disposer des droits de super-utilisateur du service Fleet Engine ou d'utilisateur du SDK client pour utiliser l'API SearchVehicles
. Pour en savoir plus, consultez la page Authentification et autorisation.
Utiliser l'API SearchVehicles
Pour utiliser l'API SearchVehicles
, procédez comme suit:
- Créez une
SearchVehiclesRequest
en fonction de la tâche à attribuer. - Appelez 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 un SearchVehiclesRequest
:
Champ | Description |
---|---|
parent | Obligatoire : Doit être au format fournisseurs/{provider}. Le fournisseur doit correspondre à l'ID du projet Google Cloud (par exemple, sample-cloud-project) dont fait partie le compte de service effectuant cet appel. |
vehicle_types | Obligatoire : Types de véhicules demandés : AUTO, TWO_WHEELER, TAXI, camion, BICYCLE ou PIÉTON. |
trip_types | Obligatoire : EXCLUSIF (un trajet actif à la fois par conducteur) ou PARTAGÉ (un ou plusieurs trajets à la fois et par conducteur). |
minimum_capacity | Obligatoire : Capacité minimale restante du véhicule pour une nouvelle tâche, que ce soit pour les passagers ou les livraisons. |
pickup_point | Obligatoire : Lieu de départ de la tâche (en coordonnées de latitude et longitude). |
dropoff_point | Facultatif. Lieu de dépôt de la tâche en coordonnées de latitude/longitude. Ce champ est obligatoire si le champ "trip_types" contient "TripType.SHARED". |
pickup_radius_meters | Obligatoire : Rayon, en mètres, de la zone de recherche de véhicules à partir du point de retrait. |
order_by | Obligatoire : Commandez des véhicules selon l'une des méthodes suivantes:
|
nombre | Obligatoire : Le nombre maximal de véhicules à renvoyer, compris entre 1 et 50. |
Reportez-vous à la documentation de référence pour voir l'ensemble complet des champs SearchVehicleRequestfields.
Exemples SearchVehiclesRequest
Cette section présente des exemples de construction d'un SearchVehiclesRequest
.
Par exemple, supposons que vous ayez une tâche de retrait à attribuer chez RestaurantX et pour quatre véhicules:
- Vehicle 1, qui se trouve à 3 500 m de RestaurantX.
- Le véhicule 2, qui se trouve à 100 mètres de RestaurantX et dont le trajet est en cours, avec prise en charge et dépose aux emplacements A et B.
- le véhicule 3, situé à 200 mètres de RestaurantX et pour lequel il reste un arrêt très loin ;
- Vehicle 4, qui se trouve à 1 000 m de RestaurantX.
Le SearchVehiclesRequest
suivant renvoie le véhicule 4:
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA
Le 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 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
Une SearchVehiclesResponse
consiste en 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 véhicule_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 en voiture. |
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 | Code temporel 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 correspond à l'heure d'arrivée prévue pour les voitures. |
vehicle_trips_waypoints | Liste des points de cheminement restants, y compris les points 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 : EXCLUSIF, BACK_TO_BACK, CARPOOL ou CARPOOL_BACK_TO_BACK. |
Exemple de 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.