擷取行程資料時,後端會收到 JSON 酬載,詳細說明駕駛人的行程進度。剖析這些酬載,即可監控行程、更新派車系統,以及解讀目前的行程狀態,以便在行程進行中或結束時,判斷駕駛人的下一步行動。
讀取資料酬載
駕駛人開始導航時、沿途定期 (預設每 60 秒) 和抵達目的地時,Google 地圖或 Waze 會將行程資料酬載傳送至 Navigation Connect 伺服器。每個 JSON 訊息都包含相關行程資料,包括駕駛人的道路座標、行駛距離和預計到達時間 (ETA)。
下列程式碼範例顯示行程資料酬載,適用於駕駛人從 King's Cross 導航至 Central St. Giles 的行程。
{
"name": "projects/123456/trips/221B9CD6-4146-4CBF-9556-853817654938",
"state": "ENROUTE",
"execution": {
"origin": {
"point": {
"latitude": 51.5333329,
"longitude": -0.1265845
}
},
"destination": {
"point": {
"latitude": 51.515598,
"longitude": -0.1277623
}
},
"location": {
"point": {
"latitude": 51.5333329,
"longitude": -0.1265845
},
"sourceTime": "2025-05-30T12:37:26Z",
"serverTime": "2025-05-30T12:37:26.221069Z"
},
"traveledDuration": "0s",
"remainingDuration": "990s",
"traveledDistanceMeters": 0,
"remainingDistanceMeters": 2879,
"stopAddedInRoute": false
}
}
監控行程的有效狀態
如要確認是否順利啟動及監控進度,請評估每個酬載中的狀態欄位。
| 狀態 | 說明 |
|---|---|
NEW |
行程已建立,但司機尚未開始導航。 |
ENROUTE |
司機正積極導航前往目的地。使用這個狀態確認行程已通過驗證並順利開始。 |
處理新增的停靠點
司機可以在導航期間新增停靠點。如果這麼做,Navigation Connect 會在 JSON 資料酬載中,將 execution.stopAddedInRoute 欄位設為 true。Navigation Connect API 會繼續追蹤司機前往原始目的地的路線。預計到達時間 (ETA)、距離和時間等指標會增加,以納入新增的停靠點。
新增停靠點的行為取決於導航應用程式,並符合其標準功能:
- Google 地圖:駕駛人可以在路線中新增多個停靠點。
- Waze:駕駛人只能新增一個停靠點。如果駕駛人嘗試新增其他停靠點,Waze 會提示他們開始新的導航行程,而不是將停靠點新增至目前的路線。
您不需要調整後端輸入內容,即可支援這項功能。
排解驗證和啟動問題
如果沒有收到 ENROUTE 狀態,可能發生驗證錯誤。常見原因包括 API 參數拼字錯誤或行程權杖過期。在初始 CreateTrip 回應中查看權杖到期時間。
如果狀態未從 NEW 變更為 ENROUTE,可能是駕駛人的裝置阻礙驗證。在這些情況下,Navigation Connect 不會傳送錯誤訊息。請確認下列事項:
- 司機安裝 Waze 5.15.5 以上版本,或 Google 地圖 26.14 以上版本。
- 駕駛人未使用 Android Auto 或 Apple CarPlay。
- 司機已連上網際網路。
處理剩餘路線資料 (僅限 Waze)
如果在建立行程時啟用剩餘路線回報功能,後端會收到從駕駛人目前位置到最終目的地的有效路線折線,以及即時路況。
您可以擷取及處理這項資料,為應用程式中的多項功能提供支援,包括下列範例:
- 提供即時追蹤地圖:在面向消費者的網頁或行動地圖上,繪製剩餘路線的折線,讓消費者掌握司機的行程。
- 提高預計抵達時間的準確度:結合道路對應的折線和流量間隔速度,改善內部物流或預計送達時間的預測。
- 分析路線合規情形:比較剩餘路線幾何與預期派車路線,評估駕駛人是否遵守路線。
無論您是傳送 GetTrip 要求,還是使用 Google Cloud Pub/Sub 接收事件驅動的更新,Navigation Connect 都會在 execution.remainingRoute 欄位中傳回剩餘路線詳細資料。不過,酬載格式和結構如何處理這項資料,取決於您使用的擷取方法。
GetTrip 方法
呼叫 GetTrip 方法時,折線的回應格式取決於您在要求中指定的 routePolylineFormat 參數。詳情請參閱「自訂折線格式」。
對於所有折線格式,Navigation Connect 會在 execution.remainingRoute.trafficInformation 欄位中,以獨立的 SpeedReadingInterval 物件清單形式傳回路況。這些物件會使用下列值,將流量類別對應至折線索引:
startPolylinePointIndex:折線上的流量間隔起始索引。endPolylinePointIndex:流量間隔的結束索引。speed:這個區隔的流量類別:NORMAL、SLOW或TRAFFIC_JAM。
Google Cloud Pub/Sub 更新
透過 Pub/Sub 擷取行程資料時,更新一律會在 execution.remainingRoute 欄位中,以統一的 GeoJSON FeatureCollection 格式傳回剩餘路線資料。
這個格式會直接結合折線幾何和車流速度,因此不需要手動對應索引。
查看 Pub/Sub 酬載範例
下列程式碼範例顯示 Pub/Sub 訊息 updatedTrip 物件的 execution.remainingRoute 欄位中傳回的 GeoJSON 結構:
{ "type": "FeatureCollection", "features": [ { "type": "Feature", "geometry": { "type": "LineString", "coordinates": [ [-122.3934, 37.7955], [-122.4010, 37.7980] ] }, "properties": { "speed": "SLOW" } }, { "type": "Feature", "geometry": { "type": "LineString", "coordinates": [ [-122.4010, 37.7980], [-122.4058, 37.8025], [-122.4187, 37.8021] ] }, "properties": { "speed": "NORMAL" } } ] }
最佳化酬載大小
由於座標陣列很大,在 Pub/Sub 訊息中加入其餘路線資料可能會大幅增加酬載大小 (每則訊息最多 13 到 14 KB)。如果收到高頻率的更新,這個量可能會增加後端處理負載和使用費用。
如要最佳化串流,請在行程建立期間,使用 TripConfig 物件中的 pubsubFieldMask 參數排除大型欄位。詳情請參閱「選用設定」。
處理行程結束狀態
當駕駛人抵達目的地或停止導航時,酬載會傳回下列其中一個結束狀態。請使用這些狀態,在應用程式中觸發適當的後續步驟。
| 狀態 | 說明 | 建議做法 |
|---|---|---|
ARRIVED |
司機已抵達目的地。 | 請檢查 remainingDistanceMeters。如果司機在附近停車,但並非在確切座標位置,請考慮在應用程式中提供步行路線。 |
SUSPENDED |
駕駛人在抵達目的地前手動結束即時路線導航。 由於 Google 地圖或 Waze 不會在駕駛人提早結束工作階段時自動返回你的應用程式,因此駕駛人必須手動輕觸返回按鈕。 |
為協助駕駛人完成行程,請比較 execution.location 與目的地。如果還有距離,請提供按鈕或連結,讓使用者繼續行程或切換至步行模式。 |
FAILED |
連線因技術錯誤中斷。如果應用程式無法計算路線或顯示安全警示,就會發生這種情況。司機可能仍在導航,但你不會收到最新資訊。 | 在應用程式中改為手動狀態追蹤。 |
CLIENT_ERROR |
顯示這個狀態的原因如下:
|
在應用程式中改為手動狀態追蹤。 |