Dans le cadre de votre solution On-demand Rides and Deliveries, la fonctionnalité de planification d'itinéraires et de distribution vous permet de trouver les conducteurs à proximité grâce à une API SearchVehicles
.
L'API SearchVehicles
vous permet de trouver dans l'application On-demand Rides and Deliveries Solution les conducteurs disponibles à proximité les mieux adaptés à une tâche telle qu'une demande de course ou de livraison. L'API SearchVehicles
renvoie une liste classée de conducteurs qui correspondent aux attributs de tâche et aux attributs de véhicules de votre parc.
Les attributs d'une 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 organisé en fonction de l'heure d'arrivée prévue, de la distance ou de la distance en ligne droite depuis le point de prise en charge.
Notez que vous devez disposer des droits "Super utilisateur du service Fleet Engine" ou "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
:
- Créez une
SearchVehiclesRequest
en fonction de la tâche à attribuer. - Appelez l'API
SearchVehicles
(vehicleService.searchVehicles
) avec la requête créée. - 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:
|
nombre | Obligatoire : 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 dans 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 prise en charge et dépose aux emplacements A et B.
- Le véhicule 3, à 200 m de RestaurantX, avec un dépôt 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 l'élément 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 | Le code temporel de l'heure d'arrivée prévue du véhicule sur le 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.