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

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

Подробные сведения об использовании Consumer SDK приведены в статье Как делиться маршрутами поездок по запросу.

Получение информации о поездке

Чтобы получить информацию о поездке непосредственно из 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. В этом поле перечислены все путевые точки, через которые должно проехать транспортное средство, прежде чем достигнет конечной точки высадки. Указание представления "Передача данных о поездке" сообщает 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 из оставшегося пути до места посадки
…
последняя широта и долгота из оставшегося пути до места посадки;
pickup_point, если отличается от последнего
traffic_data
distance_meters = расстояние от текущего vehicle_location вдоль path_to_waypoint до места посадки
eta – обновленное расчетное время прибытия;
duration = updated duration
[1] location.point = trip.dropoff_point.point
trip_id = "trip_A"
waypoint_type = DROP_OFF_WAYPOINT_TYPE
path_to_waypoint = LatLng[] Первая пара координат из этапа высадки
Вторая пара координат из отрезка высадки
…
последняя широта и долгота отрезка высадки;
dropoff_point, если отличается от последнего
traffic_data
distance_meters – расстояние от места посадки до места высадки по маршруту path_to_waypoint.
eta – обновленное расчетное время прибытия;
duration = drop-off leg duration

При последовательных и совместных поездках этот список может содержать путевые точки из других поездок, которые нужно пройти до этой поездки. Например, рассмотрим сценарий, в котором поездка B назначается тому же транспортному средству, что и поездка A. Поле 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 поездки Б будет заполнено аналогично, но в нем будут только первые три записи, поскольку пункт назначения поездки А не входит в маршрут поездки Б.