Поиск ближайших водителей

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

API SearchVehicles позволяет вам находить доступных поблизости водителей в вашем потребительском приложении On-demand Rides and Delivery Solution, которые лучше всего подходят для такой задачи, как поездка или запрос на доставку. API SearchVehicles возвращает ранжированный список водителей, сопоставляющих атрибуты задач с атрибутами транспортных средств в вашем автопарке.

Атрибуты задачи могут включать в себя:

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

Атрибуты транспортного средства могут включать в себя:

  • Последнее известное местонахождение автомобиля
  • Состояние, тип или вместимость транспортного средства
  • Другие пользовательские атрибуты

Рейтинг определяется по вашему выбору: расчетное время прибытия, расстояние или расстояние по прямой от точки посадки.

Обратите внимание, что для использования API SearchVehicles у вас должны быть права суперпользователя Fleet Engine Service или пользователя Consumer SDK. Дополнительные сведения см. в разделе Аутентификация и авторизация .

Использование API SearchVehicles

Чтобы использовать API SearchVehicles :

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

Поиск транспортных средствПоля запроса

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

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

Обратитесь к справочной документации, чтобы увидеть полный набор полей SearchVehicleRequestfields .

Поиск транспортных средствПримеры запросов

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

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

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

Следующий SearchVehiclesRequest возвращает Транспортное средство 4:

Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA

Следующий SearchVehiclesRequest возвращает транспортное средство 3 и 4:

Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, is_back_to_back enabled

Следующий SearchVehiclesRequest возвращает транспортное средство 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 Временная отметка прибытия автомобиля в место получения нового задания. Обратите внимание, что ETA является ведущим ETA.
Vehicle_trips_waypoints Список оставшихся путевых точек, включая точки посадки и высадки, для активных поездок, назначенных в данный момент транспортному средству.
Vehicle_match_type Тип поездки транспортного средства: EXCLUSIVE, BACK_TO_BACK, CARPOOL или CARPOOL_BACK_TO_BACK.

Пример поиска транспортных средств

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

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.