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 dostępnych w pobliżu pojazdów 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 kryterium: szacowanego czasu przyjazdu, odległości lub odległości w linii prostej od miejsca odbioru.
| Wyszukaj atrybuty | Atrybuty pojazdu |
|---|---|
|
|
Użyj metody SearchVehicles
Aby korzystać z SearchVehicles, wykonaj te ogólne czynności:
- Utwórz
SearchVehiclesRequestna podstawie podróży, która ma zostać przypisana. - Wywołaj interfejs API
SearchVehicles(vehicleService.searchVehicles) za pomocą utworzonego żądania. - Przetwórz wartość
SearchVehicleResponsezwró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 Google Cloud, którego członkiem jest konto usługi wywołujące tę funkcję. |
| vehicle_types | Wymagany. Rodzaje zamawianych pojazdów: AUTO, TWO_WHEELER, TAXI, TRUCK, BICYCLE lub PEDESTRIAN. |
| trip_types | Wymagany. Może to być EXCLUSIVE (1 aktywny przejazd na kierowcę) lub SHARED (1 lub więcej przejazdów na kierowcę). |
| minimum_capacity | Wymagany. Minimalna pozostała pojemność pojazdu w przypadku nowej podróży, zarówno dla pasażerów, jak i dla dostaw. |
| pickup_point | Wymagany. Miejsce odbioru w podróży podane we współrzędnych szerokości i długości geograficznej. |
| dropoff_point | Opcjonalnie: Miejsce wysiadki w przejeździe podane 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 pojazdu od miejsca odbioru. |
| order_by | Wymagany. Uporządkuj pojazdy 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 w określonym czasie wysłały do Fleet Engine aktualizacje lokalizacji. Jeśli to pole nie jest skonfigurowane, serwer używa domyślnej wartości 5 minut. |
Pełny zestaw pól SearchVehicleRequest znajdziesz w dokumentacji.
Scenariusze SearchVehiclesRequest
W tej sekcji znajdziesz przykłady tworzenia SearchVehiclesRequest.
Załóżmy na przykład, że klient chce, aby go odebrano z restauracji X, a Ty masz 4 pojazdy:
- Pojazd 1: 3500 m od restauracji X.
- Pojazd 2: 100 m od restauracji X, aktywny przejazd z miejscem odbioru i docelowym w lokalizacjach A i B.
- Pojazd 3: 200 m od restauracji X, z 1 pozostałym miejscem dostawy bardzo daleko.
- Pojazd 4: 1000 m od Restauracji X.
Poniżej znajdziesz różne żądania według pojazdu, który je zwraca.
Returns Vehicle 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 VehicleMatch elementów, które są uporządkowane według atrybutu order_by określonego w SearchVehiclesRequest. Każdy obiekt VehicleMatch ma te pola:
| Pole | Opis |
|---|---|
| pojazd | Obiekt Vehicle, w tym atrybuty vehicle_id i Vehicle. |
| vehicle_pickup_eta | Szacowany czas przyjazdu pojazdu do miejsca odbioru, gdyby przejazd został mu przypisany w tej chwili. |
| 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 metrach w linii prostej między pojazdem a miejscem odbioru nowego przejazdu. |
| vehicle_dropoff_eta | Szacowany czas dotarcia pojazdu do miejsca docelowego, gdyby ta podróż została mu przypisana w tej chwili. |
| vehicle_trips_waypoints | Lista pozostałych punktów na trasie, w tym punktów odbioru i wysadzania, 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 w tych artykułach:
VehicleMatch message(gRPC)VehicleMatch resource(REST)
Używanie zapytań filtra
SearchVehicles i ListVehicles obsługują filtrowanie atrybutów pojazdu za pomocą zapytania filtra.
Zapytania dotyczące filtrowania 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 jest używane w wyszukiwaniu, które zawiera inne kryteria pola, np. minimum_capacity lub vehicle_types, zapytanie filtra działa jak klauzula AND.
Jeśli na przykład wyszukasz pojazd o minimalnej pojemności 6 osób i zastosujesz filtr attributes, np. „przyjazny zwierzętom”, kryteria wyszukiwania zwrócą tylko te pojazdy, które są przyjazne zwierzętom i mogą przewozić co najmniej 6 pasażerów.
Przykłady 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
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 dla 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.