W ramach usługi przejazdów na żądanie możesz znaleźć pojazdy w pobliżu, korzystając z metody SearchVehicles.
Metoda SearchVehicles umożliwia znajdowanie w aplikacji mobilnej dla klientów dostępnych pojazdów w pobliżu, które najlepiej nadają się do realizacji konkretnego przejazdu lub dostawy. Interfejs API SearchVehicles zwraca uporządkowaną listę pojazdów, których atrybuty pasują do atrybutów żądanego przejazdu. Ranking jest uporządkowany według wybranego przez Ciebie szacowanego czasu dotarcia na miejsce, odległości lub odległości w linii prostej od punktu odbioru.
| Atrybuty wyszukiwania | Atrybuty pojazdu |
|---|---|
|
|
Użyj metody SearchVehicles
Aby korzystać z SearchVehicles, wykonaj te ogólne czynności:
- Utwórz obiekt
SearchVehiclesRequestna podstawie przejazdu, który ma zostać przypisany. - Wywołaj interfejs API
SearchVehicles(vehicleService.searchVehicles) za pomocą utworzonego żądania. - Przetwórz obiekt
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}. Dostawcą musi być identyfikator projektu Google Cloud, którego członkiem jest konto usługi wykonujące to wywołanie. |
| vehicle_types | Wymagany. Typy pojazdów, o które proszono: AUTO, TWO_WHEELER, TAXI, TRUCK, BICYCLE lub PEDESTRIAN. |
| trip_types | Wymagany. EXCLUSIVE (1 aktywny przejazd na kierowcę) lub SHARED (1 lub więcej przejazdów na kierowcę). |
| minimum_capacity | Wymagany. Minimalna pozostała pojemność pojazdu na potrzeby nowego przejazdu, zarówno w przypadku pasażerów, jak i dostaw. |
| pickup_point | Wymagany. Miejsce odbioru pasażera podczas przejazdu we współrzędnych szerokości i długości geograficznej. |
| dropoff_point | Opcjonalnie: Lokalizacja miejsca nadania przesyłki podczas przejazdu 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ń obszaru wyszukiwania pojazdu od punktu odbioru (w metrach). |
| order_by | Wymagany. Uporządkuj pojazdy według jednej z tych opcji:
|
| 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 informację 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 elementu SearchVehiclesRequest.
Załóżmy na przykład, że klient chce zostać odebrany z RestauracjiX, a Ty masz 4 pojazdy:
- Pojazd 1: 3500 m od RestauracjiX.
- Pojazd 2: 100 m od restauracji X, aktywny przejazd z odbiorem i wysiadaniem w lokalizacjach A i B.
- Pojazd 3: 200 m od restauracji X, z jednym pozostałym miejscem dostawy bardzo daleko.
- Pojazd 4: 1000 m od RestauracjiX.
Poniżej przedstawiamy różne żądania według zwracanego pojazdu.
Zwraca pojazd 4
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA
Zwraca pojazdy 3 i 4.
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, is_back_to_back enabled
Zwraca pojazdy 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 określonego atrybutu order_by w SearchVehiclesRequest. Każdy element VehicleMatch zawiera te pola:
| Pole | Opis |
|---|---|
| pojazd | Obiekt Vehicle, w tym atrybuty vehicle_id i Vehicle. |
| vehicle_pickup_eta | Szacowany czas dotarcia pojazdu do miejsca odbioru, jeśli ten przejazd zostałby przypisany do pojazdu w tym momencie. |
| vehicle_pickup_distance_meter | Odległość w metrach między pojazdem a miejscem odbioru nowego przejazdu. |
| vehicle_pickup_straight_line_distance_meter | Odległość w linii prostej w metrach między pojazdem a miejscem odbioru nowego przejazdu. |
| vehicle_dropoff_eta | Szacowany czas dotarcia pojazdu do miejsca wysiadania, gdyby ten przejazd został przypisany do pojazdu w tym momencie. |
| vehicle_trips_waypoints | Lista pozostałych punktów na trasie, w tym punktów odbioru i wysiadania, dla aktywnych przejazdów przypisanych obecnie do pojazdu. |
| vehicle_match_type | Typ przejazdu pojazdu: EXCLUSIVE, BACK_TO_BACK, CARPOOL lub CARPOOL_BACK_TO_BACK. |
Pełną listę pól VehicleMatch znajdziesz tutaj:
VehicleMatch message(gRPC)VehicleMatch resource(REST)
Korzystanie z zapytań dotyczących filtrowania
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. Jeśli zapytanie filtra jest używane w wyszukiwaniu, które obejmuje inne kryteria pól, takie jak minimum_capacity lub vehicle_types, działa ono jak klauzula AND.
Jeśli na przykład wyszukasz pojazd, który może pomieścić co najmniej 6 osób, i zastosujesz filtr attributes, np. „przyjazny dla zwierząt”, kryteria wyszukiwania zwrócą tylko te pojazdy, które są przyjazne dla zwierząt i mogą przewozić co najmniej 6 pasażerów.
Przykłady składni zapytań filtra znajdziesz w artykule AIP-160. Szczegółowe informacje o tworzeniu atrybutów pojazdów znajdziesz w sekcji Pole atrybutów pojazdu w przewodniku Aktualizowanie pól pojazdu.
Przykład SearchVehicles
Poniższy przykład pokazuje, jak korzystać z interfejsu API SearchVehicles za pomocą biblioteki gRPC w języku Java. Pełną listę obsługiwanych języków znajdziesz w artykule Biblioteki klienta usług przejazdó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.