有時,您可能會想規劃應用程式為使用者提供的路線。使用 從 Routes API 傳送路徑符記 Routes Preferred API 或 Route Optimization API 協助您為規劃的路線指定兩個項目:
路線的折線
路線目標
以下列舉幾個轉送目標的範例:
盡量縮短送達時間:提供外送服務的商家可能會希望盡量縮短送達時間。
盡量縮短行車時間或減少燃料消耗:物流公司可能會想提高司機的效率,並降低燃料成本。
盡可能縮短抵達目的地所需的時間:服務分派作業 盡可能縮短作業人員取得工作要求所需的時間。
降低成本並提升安全性:共乘服務公司可能會想找出能讓乘客省錢,並避免行經特定地區的路線,以提升安全性。
如要進一步瞭解如何使用路線符記規劃路線,請參閱 Routes API 中的「Request a route token」和 Route Optimization API 中的「Transition Polylines and Route Tokens」。
為何要使用路徑目標的路徑符記
透過 Routes API、Routes Preferred API 或 Route Optimization API 提供的路線符記,您可以更進一步控制提供的路線:
預先規劃路徑,供 Navigation SDK 使用時
選擇 Navigation SDK 應使用的最佳路線。如果您在 Routes API 中產生路線時要求路線權杖,每個產生的路線都會取得路線權杖。接著,您可以選擇 做為路徑的符記 Navigation SDK。
提前估算價格,包括預估到達時間和距離。雖然實際費用和時間可能會有所不同,但這個預估值可以 預估路徑與實際路線費用之間的差距
指定更進階的路徑目標,例如環保轉送或 最短路線
路徑權杖的運作方式
您可以使用 Routes API、Routes Preferred API 或 Route Optimization API,根據路線目標規劃路線。個人中心 可以將從上述任何 API 傳回的路徑符記傳遞至 Navigation SDK 提供車輛路線指引。
要求並使用路徑符記時,產生以下結果:
Routes API、Routes Preferred API 或 Route Optimization API 會傳回加密的路線權杖,其中包含路線折線和路線目標。
將路徑權杖傳遞至 Navigation SDK。
Navigation SDK 會擷取路線,如果路線因變動條件而無法使用,則會擷取最相符的路線。
行車期間、路況或其他道路狀況改變, 車輛偏離規劃路徑,但路線會持續修改 會嘗試根據權杖中的路徑目標比對最佳路徑。
這個過程可將實際路線和預計路線的差距最大化。
為什麼可能無法完全按照規劃路線行駛
建議您將規劃的路線和路徑目標視為遵循的準則: 沒有規定性由於道路狀況、起點位置或其他參數在您建立預定路線後可能會有所變動,因此預定路線和導航系統提供的路線可能會有所差異。這種差異可能會導致兩者 預定的距離和預計到達時間,以及其他重要行程 然後呈現各種優質服務
使用路徑權杖規劃路徑
您可以建立路線符記,然後將其傳遞至 Navigation SDK,如以下步驟所述,藉此規劃路線:
步驟 1:使用 Routes API、Routes Preferred API 或 Route Optimization API 建立路線權杖
使用下列任一方法要求路徑權杖:
Routes API:
computeRoutes
。如要進一步瞭解 瞭解如何在 Routes API 中要求路徑權杖,請參閱 計算路徑 和要求路線 權杖Routes Preferred API:
computeCustomRoutes
。如要 取得有關 Routes Preferred API,詳情請參閱規劃 路徑。Route Optimization API:
optimizeTours
或batchOptimizeTours
。進一步瞭解如何要求路線 憑證,請參閱轉換折線和路徑介面集 權杖。
設定 Routes API 或 Routes Preferred API 要求,以符合使用路線符記的必要條件:
- 將
travel_mode
設為DRIVING
或TWO_WHEELER
- 將
routing_preference
設為TRAFFIC_AWARE
或TRAFFIC_AWARE_OPTIMAL
- 請勿使用
Via
路線點
- 將
步驟 2:將路線權杖傳遞至 Navigation SDK
儲存路線符記:在 Navigation SDK 中設定字串,用於儲存路線符記。例如:
String routeToken = "route token returned by Routes API";
傳回的路徑符記範例:
{ // Other fields "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g", }
使用
Navigator.setDestinations
方法將路線憑證傳遞至 Navigation SDK,指定與建立路線憑證時相同的目的地路標:setDestinations(List
destinations, CustomRoutesOptions customRoutesOptions, DisplayOptions displayOptions); 例如:
CustomRoutesOptions customRoutesOptions = CustomRoutesOptions.builder() .setRouteToken(routeToken) .setTravelMode(TravelMode.DRIVING) .build();
Navigator.setDestinations
方法會傳回要求的狀態。如果
工具會尋找從車輛位置到指定目的地的路線
它會傳回 RouteStatus.OK
。
如要進一步瞭解這個方法,請參閱
Navigator.setDestinations
。
範例
以下程式碼範例示範如何使用路線符記指定預定路線。
ArrayList <Waypoint> destinations = Lists.newArrayList();
Waypoint waypoint1 =
Waypoint.builder()
.setLatLng(10, 20)
.setTitle("title")
.setVehicleStopover(true)
.build();
destinations.add(waypoint1);
Waypoint waypoint2 =
Waypoint.builder()
.setPlaceId("ChIJYV-J-ziuEmsRIMyoFaMedU4")
.setTitle("title")
.setVehicleStopover(true)
.build()
destinations.add(waypoint2);
String routeToken = "route token returned by Routes API";
CustomRoutesOptions customRoutesOptions =
CustomRoutesOptions.builder()
.setRouteToken(routeToken)
.setTravelMode(TravelMode.DRIVING)
.build();
// Existing flow to get a Navigator.
NavigationApi.getNavigator(...);
// Existing flow for requesting routes.
ListenableResultFuture<RouteStatus> routeStatusFuture =
navigator.setDestinations(destinations, customRoutesOptions);
// Or with display options.
DisplayOptions displayOptions = new DisplayOptions();
ListenableResultFuture<RouteStatus> routeStatusFuture =
navigator.setDestinations(destinations, customRoutesOptions, displayOptions);
路線符記與 Navigation SDK 的互動方式
以下為 Navigation SDK 產生的路徑和規劃方式 路徑符記中的路徑:
覆寫先前設定的任何目的地。
使用車輛的出發位置。
調整道路和路況。詳情請見 為何系統可能無法完全遵循預定的路線。
視需要忽略下列轉送相關選項:
avoidsHighways
avoidsTolls
avoidsFerries
licensePlateRestriction
追蹤:
路標相關選項,例如偏好道路兩側。
路徑目標。如果 Navigation SDK 需要調整傳回的路線,就會使用您在要求路線符記時指定的路線目標。因此,您應該使用 您在 Routes API 中指定的路線控點相關選項。