В рамках сервиса Mobility по запросу вы можете находить транспортные средства поблизости с помощью метода SearchVehicles.
Метод SearchVehicles позволяет находить в мобильном приложении для клиентов доступные транспортные средства, которые лучше всего подходят для выполнения определенного заказа на поездку или доставку. SearchVehicles API возвращает ранжированный список автомобилей, атрибуты которых соответствуют атрибутам запрошенной поездки. Рейтинг упорядочивается по вашему выбору: по расчетному времени прибытия, расстоянию или расстоянию по прямой от пункта посадки.
| Атрибуты поиска | Атрибуты транспортного средства |
|---|---|
|
|
Используйте метод SearchVehicles
Чтобы использовать SearchVehicles, выполните следующие действия:
- Создайте объект
SearchVehiclesRequestна основе рейса, который нужно назначить. - Вызовите
SearchVehiclesAPI (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 и выполняет активную поездку с посадкой и высадкой в пунктах А и Б.
- Автомобиль 3 находится в 200 м от ресторана X. Ему осталось сделать одну доставку, но очень далеко.
- Автомобиль 4: 1000 м от ресторана X.
Ниже показаны различные запросы и возвращаемые ими транспортные средства.
Возвращает автомобиль 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.