Ricerca di conducenti nelle vicinanze

Nell'ambito della tua soluzione On-demand Rides and Deliveries, la funzionalità di pianificazione del percorso e di spedizione ti consente di trovare conducenti nelle vicinanze fornendo un'API SearchVehicles.

L'API SearchVehicles ti consente di trovare i conducenti disponibili nelle vicinanze nella tua app consumer on demand Rides and Deliveries Solution più adatti a un'attività, ad esempio una corsa o una richiesta di consegna. L'API SearchVehicles restituisce un elenco classificato di conducenti che corrispondono agli attributi delle attività con quelli dei veicoli del tuo parco risorse.

Gli attributi delle attività possono includere:

  • Località di prelievo e consegna
  • Tipi di veicolo e viaggio richiesti
  • Capacità richiesta
  • Altri attributi corrispondenti obbligatori

Gli attributi del veicolo possono includere:

  • L'ultima posizione nota di un veicolo
  • Lo stato, il tipo o la capacità del veicolo.
  • Altri attributi personalizzati

Il ranking viene ordinato in base all'orario di arrivo stimato, alla distanza o alla distanza in linea retta dal punto di prelievo.

Tieni presente che devi disporre dei privilegi Super User o Utente SDK del servizio Fleet Engine per utilizzare l'API SearchVehicles. Per ulteriori informazioni, consulta la sezione Autenticazione e autorizzazione.

Utilizzo dell'API Search Vehicles

Per utilizzare l'API SearchVehicles:

  • Crea un SearchVehiclesRequest in base all'attività da assegnare.
  • Chiama l'API SearchVehicles (vehicleService.searchVehicles) con la richiesta creata.
  • Elabora il SearchVehicleResponse restituito dall'API.

Campi Search VehiclesRequest

Utilizza i seguenti campi degli attributi obbligatori per creare un SearchVehiclesRequest:

Campo Descrizione
parent Obbligatorio. Deve essere nel formato provider/{provider}. Il provider deve essere l'ID progetto (ad esempio, progetto cloud-campione) del progetto Google Cloud di cui fa parte l'account di servizio che effettua la chiamata.
vehicle_types Obbligatorio. Tipi di veicoli richiesti: AUTO, TWO_WHEELER, TAXI, TRUCK, BICYCLE o PEDESTRIAN.
trip_types Obbligatorio. Può essere ESCLUSIVA (una corsa attiva alla volta per conducente) o CONDIVISI (una o più corse alla volta per conducente).
minimum_capacity Obbligatorio. La capacità minima rimanente del veicolo per una nuova attività, per passeggeri o consegne.
pickup_point Obbligatorio. Il punto di partenza dell'attività in coordinate di latitudine/longitudine.
dropoff_point Campo facoltativo. Il punto di consegna dell'attività in coordinate di latitudine/longitudine. Il campo è obbligatorio se trip_types contiene TripType.SHARED.
pickup_radius_meters Obbligatorio. Il raggio in metri dell'area di ricerca del veicolo dal punto di prelievo.
order_by Obbligatorio. Ordina i veicoli in base a uno dei seguenti criteri:
  • PICKUP_POINT_ETA, l'orario di arrivo stimato del veicolo al punto di prelievo.
  • PICKUP_POINT_DISTANZA, la distanza tra il veicolo e il punto di prelievo.
  • DROPOFF_POINT_ETA, l'orario di arrivo stimato del veicolo per completare la corsa al punto di consegna.
  • PICKUP_POINT_STRAIGHT_DISTANZA, la distanza in linea retta (non nel percorso) tra il veicolo e il punto di prelievo.
conteggio Obbligatorio. Il numero massimo di veicoli da restituire da 1 a 50.

Consulta la documentazione di riferimento per visualizzare l'intero set di SearchVehicleRequestfields.

Esempi di richieste di ricerca veicoli

Questa sezione mostra esempi di come creare un SearchVehiclesRequest.

Ad esempio, supponi di avere un'attività di ritiro da assegnare al ristorante X e quattro veicoli:

  • Veicolo 1, che dista 3500 m dal ristoranteX.
  • Veicolo 2, che dista 100 m dal ristoranteX e ha una corsa attiva con prelievo e arrivo alle sedi A e B.
  • Veicolo 3, che dista 200 m dal ristoranteX e ha un punto di consegna molto lontano.
  • Veicolo 4, che dista 1000 m da RestaurantX.

Il seguente elemento SearchVehiclesRequest restituisce il veicolo 4:

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

Il seguente elemento SearchVehiclesRequest restituisce i veicoli 3 e 4:

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

Il seguente elemento SearchVehiclesRequest restituisce i veicoli 2, 3 e 4:

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

Campi Search VehiclesResponse

Un SearchVehiclesResponse è costituito da un elenco di entità VehicleMatch, classificate in base all'attributo order_by specificato in SearchVehiclesRequest. Ogni entità VehicleMatch include i seguenti campi:

Campo Descrizione
Veicolo L'oggetto Vehicle, inclusi gli attributi Vehicle_id e Vehicle.
vehicle_pickup_eta L'orario di arrivo stimato del veicolo nel luogo di ritiro della nuova attività. Questo è l'orario di arrivo stimato guida.
vehicle_pickup_distance_meter La distanza in metri tra il veicolo e il punto di prelievo della nuova attività.
vehicle_pickup_straight_line_distance_meter La distanza in metri tra il veicolo e il punto di prelievo della nuova attività.
vehicle_dropoff_eta Il timestamp dell'orario di arrivo stimato del veicolo nel luogo di ritiro della nuova attività. Tieni presente che l'orario di arrivo stimato è quello di guida.
vehicle_trips_waypoints Un elenco dei waypoint rimanenti, inclusi i punti di prelievo e di arrivo, per le corse attive attualmente assegnate al veicolo.
vehicle_match_type Il tipo di viaggio del veicolo, EXCLUSIVE, BACK_TO_BACK, CARPOOL o CARPOOL_BACK_TO_BACK.

Esempio di veicoli della rete di ricerca

Nell'esempio seguente viene illustrato come utilizzare 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.