Szukam kierowców w pobliżu

Funkcja planowania i wysyłania tras dostępna w ramach rozwiązania dotyczącego przejazdów i dostaw na żądanie umożliwia znajdowanie kierowców w pobliżu dzięki interfejsowi API SearchVehicles.

Interfejs SearchVehicles API pozwala znaleźć w aplikacji dla klientów usługi Przejazdy i dostawy w pobliżu dostępnych w pobliżu kierowców, którzy najlepiej sprawdzą się w takich zadaniach jak przewóz osób czy prośba o dostawę. Interfejs SearchVehicles API zwraca ranking kierowców, którzy pasują do atrybutów zadań z atrybutami pojazdów należących do Twojej floty.

Atrybuty zadania mogą obejmować:

  • Miejsca odbioru i zwrotu
  • Wybrany pojazd i rodzaje podróży
  • Wymagana pojemność
  • Inne wymagane atrybuty dopasowania

Atrybuty pojazdu:

  • Ostatnia znana lokalizacja pojazdu
  • stan, typ lub pojemność pojazdu;
  • Inne atrybuty niestandardowe

Ranking jest uporządkowany według wybranego przez Ciebie czasu dotarcia na miejsce, odległości lub odległości w linii prostej od punktu odbioru.

Aby korzystać z interfejsu SearchVehicles API, musisz mieć uprawnienia Superużytkownik usługi Fleet Engine lub Użytkownik pakietu Consumer SDK. Więcej informacji znajdziesz w artykule na temat uwierzytelniania i autoryzacji.

Korzystanie z interfejsu SearchVehicles API

Aby użyć interfejsu API SearchVehicles:

  • Utwórz SearchVehiclesRequest na podstawie zadania, które ma zostać przypisane.
  • Wywołaj interfejs API SearchVehicles (vehicleService.searchVehicles) z utworzonym żądaniem.
  • Przetwórz SearchVehicleResponse zwrócony przez interfejs API.

Pola żądania SearchVehiclesRequest

Aby utworzyć SearchVehiclesRequest, użyj tych wymaganych pól atrybutów:

Pole Opis
parent Wymagany. Musi mieć format dostawcy/{dostawca}. Dostawca musi być identyfikatorem projektu (np. sample-cloud-project) projektu Google Cloud, którego członkiem jest konto usługi wywołujące to wywołanie.
vehicle_types Wymagany. Żądane typy pojazdów: AUTO, TWO_WHEELER, TAXI, TRUCK, BICYCLE lub PEDESTRIAN.
trip_types Wymagany. EXCLUSIVE (1 aktywna podróż jednocześnie na kierowcę) lub SHARED (jedna lub kilka przejazdów naraz na kierowcę).
minimum_capacity Wymagany. Minimalna pozostała pojemność pojazdu w ramach nowego zadania – zarówno w przypadku pasażerów, jak i dostaw.
pickup_point Wymagany. Miejsce odbioru zadania we współrzędnych szerokości i długości geograficznej.
dropoff_point Opcjonalnie. Miejsce docelowe zadania podane we współrzędnych szerokości i długości geograficznej. To pole jest wymagane, jeśli parametr trip_types zawiera TripType.SHARED.
pickup_radius_meters Wymagany. Promień w metrach obszaru wyszukiwania pojazdów od punktu odbioru.
order_by Wymagany. Zamów pojazdy według jednego z tych kryteriów:
  • PICKUP_POINT_ETA, szacowany czas dotarcia na miejsce w miejscu odbioru.
  • PICKUP_POINT_DISTANCE, odległość między pojazdem a miejscem odbioru.
  • DROPOFF_POINT_ETA, czyli szacowany czas dotarcia pojazdu do miejsca zwrotu.
  • PICKUP_POINT_STRAIGHT_DISTANCE – odległość w linii prostej (nie na trasie) między pojazdem a miejscem odbioru.
liczba Wymagany. Maksymalna liczba pojazdów do zwrócenia – od 1 do 50.

Kompletny zestaw klas SearchVehicleRequestfields znajdziesz w dokumentacji referencyjnej.

Przykłady żądań SearchVehiclesRequest

Ta sekcja zawiera przykłady tworzenia SearchVehiclesRequest.

Załóżmy np., że masz zadanie odbioru do przypisania w restauracji i 4 pojazdach:

  • Pojazd 1, który jest oddalony o 3500 m od RestaurantX.
  • Pojazd 2, który jest oddalony o 100 m od restauracji X i obejmuje aktywny przejazd, w którym można odebrać i wysiąść w miejscach A i B.
  • Pojazd 3, który znajduje się 200 m od restauracji X. Jeden pojazd został już zwrócony bardzo daleko.
  • Pojazd 4, który jest oddalony o 1000 m od hotelu RestaurantX.

SearchVehiclesRequest zwraca pojazd 4:

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

SearchVehiclesRequest zwraca pojazd 3 i 4:

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

SearchVehiclesRequest zwraca pojazd 2, 3 i 4:

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

Pola odpowiedzi na wyszukiwanie pojazdów

Element SearchVehiclesResponse składa się z listy elementów VehicleMatch uporządkowanych według określonego atrybutu order_by w zasadzie SearchVehiclesRequest. Każdy element VehicleMatch zawiera te pola:

Pole Opis
pojazd Obiekt Vehicle, w tym atrybuty identyfikator pojazdu i Vehicle.
vehicle_pickup_eta Szacowany czas dotarcia na miejsce w miejscu odbioru nowego zadania. Oto szacowany czas dotarcia na miejsce.
vehicle_pickup_distance_meter Odległość w metrach między pojazdem a miejscem odbioru nowego zadania.
vehicle_pickup_straight_line_distance_meter Odległość w linii w metrach między pojazdem a miejscem odbioru nowego zadania.
vehicle_dropoff_eta Sygnatura czasowa szacowanego czasu dotarcia na miejsce w miejscu odbioru nowego zadania. Pamiętaj, że szacowany czas dotarcia na miejsce to szacowany czas dotarcia na miejsce.
vehicle_trips_waypoints Lista pozostałych punktów na trasie, w tym miejsca odbioru i miejsca docelowego, dla aktywnych podróży aktualnie przypisanych do pojazdu.
vehicle_match_type Typ podróży pojazdu: EXCLUSIVE, BACK_TO_BACK, CARPOOL lub CARPOOL_BACK_TO_BACK.

Przykład SearchPojazdy

Ten przykład pokazuje, jak użyć interfejsu 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.