直接從 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

擷取剩餘行程的路線控點

行程實體包含重複的 TripWaypoint 類型欄位。這個欄位包含車輛在行程的最終下車點之前,需要前往的所有路線點,並依序列出。指定「旅程分享」檢視畫面會告知車隊引擎將更新後的資訊放入 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[] 從剩餘路徑到上車地點的第 1 個 LatLng
從剩餘路徑到上車地點的第 2 個 LatLng
...
從剩餘路線到接送地點的最後 LatLng
pickup_point,如果與上次不同
traffic_data
distance_meters = 從目前車輛位置沿著 path_to_waypoint 到上車地點的距離
eta = 更新的預計到達時間
時間長度 = 更新後的時間長度
[1] location.point = Tri.dropoff_point.point
Tri_id =「trip_A」
Waypoint_type = DROP_OFF_WAYPOINT_TYPE
path_to_waypoint = LatLng[] 從下車路段的第一個 LatLng
從下車路段的第 2 個 LatLng
...
下車路線的最後 LatLng
dropoff_point,如果與上次不同
traffic_data
Distance_meters = 從 path_to_waypoint 上上車到下車的距離
eta = 更新後的預計到達時間
時間長度 = 下車路段時間長度

若是往返和共用的集區行程,這份清單可能包含其他行程,在這段旅程之前可以穿越的路線點。舉例來說,假設行程 B 獲派與行程 A 相同的車輛。行程 A 的 remaining_waypoints 欄位會填入以下形式。為了簡潔起見,我們省略了大部分的欄位,但這些欄位會與前述範例一致地填入。

[0] trip_id = "trip_A"
waypoint_type = PICKUP_WAYPOINT_TYPE
[1] Tri_id =「trip_B」
Waypoint_type = PICKUP_WAYPOINT_TYPE
[2] Tri_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 路線的一部分。