Функция планирования и отправки маршрутов, являющаяся частью вашего решения для поездок и доставки по требованию, позволяет вам находить ближайших водителей, предоставляя 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 | Необходимый . Радиус в метрах зоны поиска автомобиля от точки посадки. |
Сортировать по | Необходимый . Заказывайте транспортные средства по одному из следующих вариантов:
|
считать | Необходимый . Максимальное количество возвращаемых автомобилей от 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.