Как получать данные о поездках непосредственно из Fleet Engine

В этом руководстве рассказывается, как получать данные о поездках непосредственно из Fleet Engine, а не с помощью Consumer SDK. Этот подход позволяет лучше контролировать работу конечных пользователей, но при этом пользоваться точными данными о местоположении транспортных средств, расчетным временем прибытия и маршрутами в реальном времени от Fleet Engine.

Подробнее о том, как делиться маршрутами для поездок по запросу…

Как получить информацию о поездке

Чтобы получить информацию о поездке непосредственно из Fleet Engine, вызовите метод GetTrip, указав представление JOURNEY_SHARING_V1S. Подробнее о RPC и REST…

Обычно сервер опрашивает сервис поездок, чтобы узнать статус каждой поездки, пока пассажир следит за движением автомобиля. Данные о местоположении автомобиля обычно обновляются каждые 10 секунд, и ваша система должна запрашивать их с той же частотой. Поле Trip.last_location.update_time можно отслеживать, чтобы узнать, были ли какие-либо обновления с момента предыдущего вызова GetTrip.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "trip-A";

String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;
GetTripRequest getTripRequest =
    GetTripRequest.newBuilder()
        .setName(tripName)
        .setView(JOURNEY_SHARING_V1S)
        .build();
Trip trip = tripService.getTrip(getTripRequest);

В полученном объекте Trip будут заполнены следующие поля с актуальной информацией о поездке:

name trip_status remaining_waypoints
vehicle_id trip_type last_location
number_of_passengers pickup_point view (== JOURNEY_SHARING_V1S)
actual_pickup_point intermediate_destinations intermediate_destination_index
pickup_time intermediate_destinations_version dropoff_point
actual_dropoff_point dropoff_time

Как получить оставшиеся точки маршрута

Объект Trip содержит повторяющееся поле типа TripWaypoint. Это поле включает все промежуточные точки, которые транспортное средство должно посетить в порядке следования до конечной точки высадки. Указание представления Journey Sharing сообщает Fleet Engine о необходимости поместить обновленную информацию в remaining_waypoints[0] TripWaypoint. В других представлениях, не связанных с совместным использованием маршрута, эта путевая точка обычно не отражает последнее местоположение назначенного автомобиля. Ознакомьтесь со справочной информацией о RPC или REST.

Подробнее о статусе рейса и оставшихся путевых точках рассказывается в руководстве по рейсам.

Пример поля remaining_waypoints для рейса A:

[0] location.point = trip.pickup_point.point
trip_id = "trip_A"
waypoint_type = PICKUP_WAYPOINT_TYPE
path_to_waypoint = LatLng[] Первая пара координат из оставшегося маршрута до пункта самовывоза.
Вторая точка LatLng из оставшегося пути до пункта получения
…
последняя точка LatLng из оставшегося пути до пункта получения;
pickup_point, если он отличается от последнего;
traffic_data
distance_meters – расстояние от текущего местоположения транспортного средства до точки посадки по маршруту до промежуточной точки;
eta = обновленное время прибытия
duration = обновленная продолжительность
[1] location.point = trip.dropoff_point.point
trip_id = "trip_A"
waypoint_type = DROP_OFF_WAYPOINT_TYPE
path_to_waypoint = LatLng[] Первая пара координат из этапа высадки
Вторая точка LatLng из участка маршрута до пункта назначения
…
последняя широта и долгота отрезка высадки;
dropoff_point, если отличается от последнего;
traffic_data
distance_meters – расстояние от места посадки до места высадки по маршруту path_to_waypoint.
eta = обновленное время прибытия
duration = продолжительность поездки до пункта высадки

Если вы выполняете совместные поездки или поездки подряд, в списке могут быть путевые точки из других поездок, которые нужно посетить до этой. Например, рассмотрим ситуацию, в которой маршрут Б назначен тому же транспортному средству, что и маршрут А. Поле remaining_waypoints для поездки А будет заполнено следующим образом: Большинство полей опущены для краткости, но они будут заполнены так же, как в предыдущем примере.

[0] trip_id = "trip_A"
waypoint_type = PICKUP_WAYPOINT_TYPE
[1] trip_id = "trip_B"
waypoint_type = PICKUP_WAYPOINT_TYPE
[2] trip_id = "trip_B"
waypoint_type = DROP_OFF_WAYPOINT_TYPE
[3] trip_id = "trip_A"
waypoint_type = DROP_OFF_WAYPOINT_TYPE

Поле remaining_waypoint для поездки Б будет заполнено аналогичным образом, но в нем будет только три записи, поскольку пункт высадки из поездки А не входит в маршрут поездки Б.