Szukaj pojazdów

W ramach usługi podróży 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 atrybuty dopasowania
  • Ostatnia znana lokalizacja pojazdu
  • Stan, typ lub pojemność pojazdu
  • Inne atrybuty niestandardowe

Korzystanie z metody SearchVehicles

Aby użyć SearchVehicles, wykonaj te ogólne czynności:

  1. Utwórz SearchVehiclesRequest na podstawie podróży, która ma zostać przypisana.
  2. Wywołaj interfejs SearchVehicles API (vehicleService.searchVehicles) za pomocą utworzonego żądania.
  3. Przetwórz SearchVehicleResponse zwrócony 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 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 dotarcia pojazdu do miejsca odbioru.
  • PICKUP_POINT_DISTANCE – odległość między pojazdem a miejscem odbioru.
  • DROPOFF_POINT_ETA – szacowany czas dotarcia 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 aktualizacje 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 1 miejsce wysiadki w dużej odległości.
  • 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 dotarcia 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 dotarcia 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 w tych dokumentach:

Korzystanie z zapytań filtra

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 pól, 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 Java gRPC. Pełną listę obsługiwanych języków znajdziesz w sekcji Biblioteki klienta usług podróży 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?