В рамках сервиса поездок по запросу вы можете находить транспортные средства поблизости с помощью метода SearchVehicles.
Метод SearchVehicles позволяет находить в мобильном приложении для клиентов доступные поблизости транспортные средства, которые лучше всего подходят для выполнения определенного заказа на поездку или доставку. SearchVehicles API возвращает ранжированный список транспортных средств, атрибуты которых соответствуют атрибутам запрашиваемой поездки. Рейтинг упорядочивается по вашему выбору: по расчетному времени прибытия, расстоянию или расстоянию по прямой от пункта посадки.
| Поисковые атрибуты | Атрибуты транспортного средства |
|---|---|
|
|
Используйте метод SearchVehicles
Чтобы использовать SearchVehicles, выполните следующие действия:
- Создайте объект
SearchVehiclesRequestна основе поездки, которую нужно назначить. - Вызовите API
SearchVehicles(vehicleService.searchVehicles) с помощью созданного запроса. - Обработайте
SearchVehicleResponse, возвращенный API.
Поля SearchVehiclesRequest
Чтобы создать SearchVehiclesRequest, используйте следующие обязательные атрибуты:
| Поле | Описание |
|---|---|
| родитель | Обязательный параметр. Должен быть в формате providers/{provider}. В качестве поставщика необходимо указать идентификатор проекта Google Cloud, к которому относится сервисный аккаунт, выполняющий вызов. |
| vehicle_types | Обязательный параметр. Типы запрашиваемых транспортных средств: AUTO, TWO_WHEELER, TAXI, TRUCK, BICYCLE или PEDESTRIAN. |
| trip_types | Обязательный параметр. EXCLUSIVE (одна активная поездка на водителя) или SHARED (одна или несколько поездок на водителя). |
| minimum_capacity | Обязательный параметр. Минимальная оставшаяся вместимость транспортного средства для новой поездки (пассажиры или груз). |
| pickup_point | Обязательный параметр. Место посадки в поездке в координатах широты и долготы. |
| dropoff_point | Необязательное поле. Место высадки в координатах широты и долготы. Поле обязательно, если trip_types содержит TripType.SHARED. |
| pickup_radius_meters | Обязательный параметр. Радиус в метрах области поиска транспортного средства от места посадки. |
| order_by | Обязательный параметр. Упорядочить автомобили по одному из следующих параметров:
|
| количество | Обязательный параметр. Максимальное количество транспортных средств, которое может быть возвращено (от 1 до 50). |
| фильтр | Это необязательный параметр. Запрос фильтра, который будет применяться при поиске транспортных средств. |
| maximum_staleness | Это необязательный параметр. Ограничивает поиск только теми транспортными средствами, которые отправили обновления местоположения в Fleet Engine в течение указанного периода времени. Если это поле не заполнено, сервер использует значение по умолчанию – пять минут. |
Полный набор полей SearchVehicleRequest приведен в справочной документации.
Сценарии SearchVehiclesRequest
В этом разделе приведены примеры создания SearchVehiclesRequest.
Например, клиент хочет, чтобы его забрали из ресторана X, а у вас есть четыре автомобиля:
- Транспортное средство 1 находится в 3500 м от ресторана X.
- Транспортное средство 2 находится в 100 м от ресторана X и выполняет активную поездку с посадкой и высадкой в пунктах A и B.
- Транспортное средство 3 находится в 200 м от ресторана X, и ему осталось доставить один заказ, но очень далеко.
- Автомобиль 4 находится в 1000 м от ресторана X.
Ниже показаны различные запросы и возвращаемые ими транспортные средства.
Возвращает Vehicle 4
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA
Возвращает транспортные средства 3 и 4.
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, is_back_to_back enabled
Возвращает транспортные средства 2, 3 и 4.
Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, current_trips_present = ALL
Поля SearchVehiclesResponse
SearchVehiclesResponse состоит из списка объектов VehicleMatch, упорядоченных по атрибуту order_by, указанному в SearchVehiclesRequest. Каждый объект VehicleMatch содержит следующие поля:
| Поле | Описание |
|---|---|
| транспортное средство | Объект Vehicle, включая атрибуты vehicle_id и Vehicle. |
| vehicle_pickup_eta | Расчетное время прибытия транспортного средства в место посадки, если бы эта поездка была назначена ему прямо сейчас. |
| vehicle_pickup_distance_meter | Расстояние в метрах между транспортным средством и местом посадки для новой поездки. |
| vehicle_pickup_straight_line_distance_meter | Расстояние по прямой в метрах между транспортным средством и местом посадки для новой поездки. |
| vehicle_dropoff_eta | Расчетное время прибытия транспортного средства в место высадки, если бы эта поездка была назначена ему прямо сейчас. |
| vehicle_trips_waypoints | Список оставшихся путевых точек, включая пункты посадки и высадки, для активных поездок, назначенных транспортному средству. |
| vehicle_match_type | Тип поездки: EXCLUSIVE, BACK_TO_BACK, CARPOOL или CARPOOL_BACK_TO_BACK. |
Полный список полей VehicleMatch можно найти в следующих статьях:
VehicleMatch message(gRPC)VehicleMatch resource(REST)
Как использовать запросы для фильтрации
SearchVehicles и ListVehicles поддерживают фильтрацию по атрибутам транспортных средств с помощью запроса фильтра.
Фильтрация запросов поддерживается ТОЛЬКО для настраиваемых атрибутов транспортных средств и не может использоваться для других полей. Если в поисковом запросе есть другие критерии, например minimum_capacity или vehicle_types, то фильтр работает как условие AND.
Например, если вы ищете автомобиль, вмещающий не менее шести человек, и выбираете фильтр attributes, например "Можно с животными", в результатах поиска будут показаны только те автомобили, которые соответствуют обоим критериям.
Примеры синтаксиса запросов фильтрации приведены в AIP-160. Подробную информацию о создании атрибутов транспортных средств можно найти в разделе Поле атрибутов транспортного средства руководства Обновление полей транспортного средства.
Пример SearchVehicles
В примере ниже показано, как использовать SearchVehicles API с помощью библиотеки gRPC для Java. Полный список поддерживаемых языков можно найти в статье Клиентские библиотеки для сервисов поездок по запросу.
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.