Поиск автомобилей

В рамках сервиса поездок по запросу вы можете находить транспортные средства поблизости с помощью метода SearchVehicles.

Метод SearchVehicles позволяет находить в мобильном приложении для клиентов доступные поблизости транспортные средства, которые лучше всего подходят для выполнения определенного заказа на поездку или доставку. SearchVehicles API возвращает ранжированный список транспортных средств, атрибуты которых соответствуют атрибутам запрашиваемой поездки. Рейтинг упорядочивается по вашему выбору: по расчетному времени прибытия, расстоянию или расстоянию по прямой от пункта посадки.

Поисковые атрибуты Атрибуты транспортного средства
  • Места посадки и высадки
  • Запрошенные типы транспортных средств и поездок
  • Требуемая емкость
  • Другие обязательные атрибуты для сопоставления данных
  • Последнее известное местоположение транспортного средства.
  • состояние, тип или вместимость транспортного средства;
  • Другие настраиваемые атрибуты

Используйте метод SearchVehicles

Чтобы использовать SearchVehicles, выполните следующие действия:

  1. Создайте объект SearchVehiclesRequest на основе поездки, которую нужно назначить.
  2. Вызовите API SearchVehicles (vehicleService.searchVehicles) с помощью созданного запроса.
  3. Обработайте 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 Обязательный параметр. Упорядочить автомобили по одному из следующих параметров:
  • PICKUP_POINT_ETA – расчетное время прибытия транспортного средства в пункт посадки.
  • PICKUP_POINT_DISTANCE – расстояние между транспортным средством и пунктом посадки.
  • DROPOFF_POINT_ETA – расчетное время прибытия транспортного средства в пункт назначения.
  • PICKUP_POINT_STRAIGHT_DISTANCE – расстояние по прямой (не по маршруту) между транспортным средством и пунктом посадки.
количество Обязательный параметр. Максимальное количество транспортных средств, которое может быть возвращено (от 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 можно найти в следующих статьях:

Как использовать запросы для фильтрации

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.

Дальнейшие действия