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 |
|---|---|
|
|
Korzystanie z metody SearchVehicles
Aby użyć SearchVehicles, wykonaj te ogólne czynności:
- Utwórz
SearchVehiclesRequestna podstawie podróży, która ma zostać przypisana. - Wywołaj interfejs
SearchVehiclesAPI (vehicleService.searchVehicles) za pomocą utworzonego żądania. - Przetwórz
SearchVehicleResponsezwró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:
|
| 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:
VehicleMatch message(gRPC)VehicleMatch resource(REST)
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.