Szukaj pojazdów

W ramach usługi przewozów na żądanie możesz znajdować pojazdy w pobliżu za pomocą metody SearchVehicles.

Metoda SearchVehicles umożliwia znajdowanie dostępnych pojazdów w pobliżu w aplikacji mobilnej dla konsumentów, które najlepiej pasują do konkretnego przejazdu lub prośby o dostawę. Interfejs SearchVehicles API zwraca uporządkowaną listę pojazdów, których atrybuty pasują do atrybutów żądanej podróży. Kolejność jest określana na podstawie wybranego przez Ciebie czasu przyjazdu, odległości lub odległości w linii prostej od miejsca odbioru.

Atrybuty wyszukiwania Atrybuty pojazdu
  • Miejsca odbioru i wysiadki
  • Żądane typy pojazdów i podróży
  • Wymagana pojemność
  • Inne wymagane pasujące atrybuty
  • Ostatnia znana lokalizacja pojazdu
  • Stan, typ lub pojemność pojazdu
  • Inne atrybuty niestandardowe

Korzystanie z metody SearchVehicles

Aby użyć metody SearchVehicles:

  1. Utwórz SearchVehiclesRequest na podstawie podróży, która ma zostać przypisana.
  2. Wywołaj interfejs SearchVehicles API (vehicleService.searchVehicles) z utworzonym żądaniem.
  3. Przetwórz odpowiedź SearchVehicleResponse zwróconą przez interfejs API.

Pola SearchVehiclesRequest

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

Pole Opis
rodzic Wymagany. Musi mieć format providers/{provider}. Dostawca musi być identyfikatorem projektu w chmurze Google Cloud, którego członkiem jest konto usługi wykonują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óż na kierowcę) lub SHARED (1 lub więcej podróży na kierowcę).
minimum_capacity Wymagany. Minimalna pozostała pojemność pojazdu na nową podróż, zarówno dla pasażerów, jak i dostaw.
pickup_point Wymagany. Miejsce odbioru podróży we współrzędnych szerokości i długości geograficznej.
dropoff_point Opcjonalnie. Miejsce wysiadki podróży we współrzędnych szerokości i długości geograficznej. To pole jest wymagane, jeśli trip_types zawiera TripType.SHARED.
pickup_radius_meters Wymagany. Promień w metrach obszaru wyszukiwania pojazdów od miejsca odbioru.
order_by Wymagany. Kolejność pojazdów według jednego z tych kryteriów:
  • PICKUP_POINT_ETA – szacowany czas przyjazdu pojazdu do miejsca odbioru.
  • PICKUP_POINT_DISTANCE – odległość między pojazdem a miejscem odbioru.
  • DROPOFF_POINT_ETA – szacowany czas przyjazdu pojazdu do miejsca wysiadki.
  • 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.
filtr Opcjonalnie. Zapytanie filtra do zastosowania podczas wyszukiwania pojazdów.
maximum_staleness Opcjonalnie. Ogranicza wyszukiwanie tylko do tych pojazdów, które wysłały informacje o zmianie lokalizacji do Fleet Engine w określonym czasie. Jeśli to pole nie jest ustawione, serwer używa domyślnej wartości 5 minut.

Pełny zestaw pól SearchVehicleRequest znajdziesz w dokumentacji referencyjnej.

Scenariusze SearchVehiclesRequest

W tej sekcji znajdziesz przykłady tworzenia SearchVehiclesRequest.

Załóżmy na przykład, że klient chce zostać odebrany z restauracji X, a Ty masz 4 pojazdy:

  • Pojazd 1: 3500 m od restauracji X.
  • Pojazd 2: 100 m od restauracji X, który realizuje aktywną podróż z odbiorem i wysiadką w lokalizacjach A i B.
  • Pojazd 3: 200 m od restauracji X, który ma jeszcze jedną wysiadkę w bardzo odległym miejscu.
  • Pojazd 4: 1000 m od restauracji X.

Poniżej znajdziesz różne żądania według zwracanego pojazdu.

Zwraca pojazd 4

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

Zwraca pojazd 3 i 4

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

Zwraca pojazd 2, 3 i 4

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

Pola SearchVehiclesResponse

SearchVehiclesResponse składa się z listy encji VehicleMatch uporządkowanych według atrybutu order_by określonego w SearchVehiclesRequest. Każda encja VehicleMatch ma te pola:

Pole Opis
pojazd Obiekt Vehicle, w tym vehicle_id i atrybuty Vehicle.
vehicle_pickup_eta Szacowany czas przyjazdu pojazdu do miejsca odbioru, jeśli ta podróż zostanie przypisana do pojazdu.
vehicle_pickup_distance_meter Odległość w metrach między pojazdem a miejscem odbioru nowej podróży.
vehicle_pickup_straight_line_distance_meter Odległość w linii prostej w metrach między pojazdem a miejscem odbioru nowej podróży.
vehicle_dropoff_eta Szacowany czas przyjazdu pojazdu do miejsca wysiadki, jeśli ta podróż zostanie przypisana do pojazdu.
vehicle_trips_waypoints Lista pozostałych punktów na trasie, w tym miejsc odbioru i wysiadki, w przypadku aktywnych podróży przypisanych obecnie do pojazdu.
vehicle_match_type Typ podróży pojazdu: EXCLUSIVE, BACK_TO_BACK, CARPOOL lub CARPOOL_BACK_TO_BACK.

Pełną listę pól VehicleMatch znajdziesz tutaj:

Korzystanie z zapytań filtra

Metody SearchVehicles i ListVehicles obsługują filtrowanie według atrybutów pojazdu za pomocą zapytania filtra.

Zapytania filtra obsługują TYLKO filtrowanie według atrybutów niestandardowych pojazdów i nie można ich używać w przypadku innych pól. Gdy są używane w wyszukiwaniu, które obejmuje inne kryteria pola, takie jak minimum_capacity lub vehicle_types, zapytanie filtra działa jako klauzula AND.

Jeśli na przykład wyszukujesz pojazd o minimalnej pojemności 6 osób i filtrujesz attributes (np. pet-friendly), kryteria zwrócą tylko te pojazdy, które są przyjazne zwierzętom i mogą przewieźć co najmniej 6 pasażerów.

Składnię zapytań filtra znajdziesz w AIP-160. Więcej informacji o tworzeniu atrybutów pojazdu znajdziesz w sekcji Pole atrybutów pojazdu w przewodniku Aktualizowanie pól pojazdu.

Przykład SearchVehicles

Ten przykład pokazuje, jak używać interfejsu SearchVehicles API za pomocą biblioteki gRPC Java. Pełną listę obsługiwanych języków znajdziesz w artykule Biblioteki klienta usług przewozów na żądanie.

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.

Co dalej?