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

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

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

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

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

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

  1. Создайте объект SearchVehiclesRequest на основе рейса, который нужно назначить.
  2. Вызовите SearchVehicles API (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 и выполняет активную поездку с посадкой и высадкой в пунктах А и Б.
  • Автомобиль 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 приведен в следующих статьях:

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

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.

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