直接从 Fleet Engine 检索行程数据

本指南将介绍如何直接从 Fleet Engine 检索行程数据,而不是使用 Consumer SDK。您可以采用此方法来更好地控制最终用户体验,同时仍可利用 Fleet Engine 提供的准确且实时的车辆位置、预计到达时间和路线信息。

如需详细了解如何使用 Consumer SDK,请参阅分享行程以进行按需出行

检索行程信息

要直接从 Fleet Engine 获取行程信息,请调用 GetTrip 方法,并指定 JOURNEY_SHARING_V1S 视图。请参阅 RPCREST 的参考文档。

在乘客主动监控车辆行驶进度时,您的服务器通常会轮询行程服务,以获取每趟行程的状态。车辆位置更新通常每 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 中。在其他非行程共享视图中,该航点通常不反映已分配车辆的最新位置。请参阅 RPCREST 的参考文档。

如需了解详情,请参阅行程简介指南中的行程状态和剩余的车辆途经点

以下是行程 A 的 remaining_waypoints 字段示例:

[0] location.point = trip.pickup_point.point
trip_id = "trip_A"
waypoint_type = PICKUP_WAYPOINT_TYPE
path_to_waypoint = LatLng[] 从剩余路径到拾取点的第一个经纬度
从剩余路径到上车点的第 2 个 LatLng
从剩余路径到上车点的最后一个 LatLng
取货点(如果与上次不同)
traffic_data
distance_meters = 从当前车辆位置沿路径到取货点的距离
eta = 更新后的预计到达时间
持续时间 = 更新后的持续时间
[1] location.point = trip.dropoff_point.point
trip_id = "trip_A"
waypoint_type = DROP_OFF_WAYPOINT_TYPE
path_to_waypoint = LatLng[] 下车路段的第一个 LatLng
从落差段起的第二个纬度
下车路段的最后一个 LatLng
如果与最后一个不同,则指定投放点
traffic_data
distance_meters = 从上车点沿 path_to_waypoint 到达下车点的距离
eta = 更新后的预计到达时间
duration = 投放广告的航班段的时长

如果行程是连续的,并且是拼车旅行,那么此列表可能包含本次旅行之前需要经过的其他行程的途经点。例如,假设行程 B 分配给与行程 A 相同的车辆。然后,系统会按如下方式填充行程 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

行程 B 的 remaining_waypoint 字段也会以类似方式填充,但只会显示前三项,因为行程 A 的下车点不在行程 B 的路线中。