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

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

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

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

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

Чтобы использовать SearchVehicles , следуйте этой общей процедуре:

  1. Создайте SearchVehiclesRequest на основе поездки, которую необходимо назначить.
  2. Вызовите API SearchVehicles ( vehicleService.searchVehicles ) с помощью сконструированного запроса.
  3. Обработайте SearchVehicleResponse , возвращенный API.

Поля запроса SearchVehicles

Используйте следующие обязательные поля атрибутов для создания SearchVehiclesRequest :

Поле Описание
родитель Обязательно . Должен быть в формате providers/{provider}. Поставщик должен быть идентификатором проекта Google Cloud, участником которого является учетная запись службы, выполняющая этот вызов.
типы_транспортных средств Обязательно . Укажите тип транспортного средства: АВТОМОБИЛЬ, ДВУХКОЛЕСНЫЙ ТРАНСПОРТНЫЙ СРЕДСТВО, ТАКСИ, ГРУЗОВИК, ВЕЛОСИПЕД или ПЕШЕХОД.
типы_поездок Обязательно . Либо ЭКСКЛЮЗИВНЫЙ (одна активная поездка за раз на водителя), либо СОВМЕСТНЫЙ (одна или несколько поездок за раз на водителя).
минимальная_емкость Обязательно . Минимальная оставшаяся вместимость транспортного средства для новой поездки, будь то для перевозки пассажиров или доставки.
пункт_выдачи Обязательно . Место отправления в координатах широты и долготы.
точка_высадки Необязательно. Место назначения в координатах широты и долготы. Поле обязательно, если trip_types содержит TripType.SHARED.
pickup_radius_meters Обязательно . Радиус зоны поиска автомобиля в метрах от точки подачи.
заказ_по Обязательно . Заказывайте автомобили одним из следующих способов:
  • PICKUP_POINT_ETA — расчетное время прибытия автомобиля в пункт подачи.
  • PICKUP_POINT_DISTANCE — расстояние между транспортным средством и точкой забора.
  • DROPOFF_POINT_ETA — расчетное время прибытия транспортного средства в пункт высадки.
  • PICKUP_POINT_STRAIGHT_DISTANCE — расстояние по прямой (не по маршруту) между транспортным средством и точкой посадки.
считать Обязательно . Максимальное количество возвращаемых транспортных средств: от 1 до 50.
фильтр Необязательно . Фильтрующий запрос, применяемый при поиске транспортных средств.
максимальная_стабильность Необязательно . Ограничивает поиск только теми транспортными средствами, которые отправляли обновления местоположения в Fleet Engine в течение указанного периода времени. Если это поле не задано, сервер использует значение по умолчанию — пять минут.

Полный набор полей SearchVehicleRequest можно найти в справочной документации.

Сценарии поискатранспортных средств

В этом разделе показаны примеры того, как построить SearchVehiclesRequest .

Например, предположим, что клиент хочет, чтобы его забрали из RestaurantX, и у вас есть четыре автомобиля:

  • Транспортное средство 1 : 3500 м от RestaurantX.
  • Транспортное средство 2 : в 100 м от RestaurantX с активной поездкой с посадкой и высадкой в точках A и B.
  • Транспортное средство 3 : в 200 м от RestaurantX, одна оставшаяся остановка находится очень далеко.
  • Транспортное средство 4 : в 1000 м от RestaurantX.

Ниже показаны различные запросы по возвращаемому транспортному средству.

Возврат автомобиля 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
    

Поля ответа SearchVehicles

Ответ SearchVehiclesResponse содержит список сущностей VehicleMatch , отсортированных по указанному атрибуту order_by в SearchVehiclesRequest . Каждая сущность VehicleMatch имеет следующие поля:

Поле Описание
транспортное средство Объект Vehicle , включая атрибуты vehicle_id и Vehicle .
vehicle_pickup_eta Расчетное время прибытия транспортного средства в место получения, если поездка была бы назначена на транспортное средство прямо сейчас.
измеритель_расстояния_подъема_транспортного_средства Расстояние в метрах между транспортным средством и местом начала новой поездки.
измеритель_расстояния_по_прямой_линии_для_подбора_транспортного_средства Расстояние по прямой в метрах между транспортным средством и местом посадки в новой поездке.
vehicle_dropoff_eta Расчетное время прибытия транспортного средства в пункт высадки, если поездка была бы назначена транспортному средству прямо сейчас.
точки_пути_транспорта Список оставшихся путевых точек, включая точки посадки и высадки, для активных поездок, назначенных в данный момент транспортному средству.
тип_соответствия_транспортного_средства Тип поездки транспортного средства: EXCLUSIVE, BACK_TO_BACK, CARPOOL или CARPOOL_BACK_TO_BACK.

Полный список полей VehicleMatch см. здесь:

Используйте фильтры запросов

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

Запросы с фильтром поддерживают фильтрацию ТОЛЬКО по настраиваемым атрибутам транспортных средств и не могут использоваться для других полей. При использовании в поиске, включающем другие критерии полей, такие как minimum_capacity или vehicle_types , запрос с фильтром работает как оператор AND .

Например, если вы ищете транспортное средство, минимальная вместимость которого составляет 6 человек, и фильтруете такие attributes , как возможность перевозки домашних животных, ваши критерии вернут только те транспортные средства, которые и допускают перевозку домашних животных, и могут перевозить не менее 6 пассажиров.

Примеры синтаксиса запроса фильтра см. в AIP-160 . Подробную информацию о создании атрибутов транспортного средства см. в разделе « Поле «Атрибуты транспортного средства»» руководства «Обновление полей транспортного средства» .

Пример SearchVehicles

В следующем примере показано, как использовать API SearchVehicles с помощью библиотеки Java gRPC .

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.

Что дальше?