过渡多段线和路线令牌
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
此方案使用路线优化 API 生成包含路线多段线的路线令牌。
在 OptimizeToursRequest
消息中,将 populateTransitionPolylines
(REST、gRPC)设置为在 OptimizeToursResponse
中为 ShipmentRoute
的转换生成 routePolyline
(REST、gRPC)和 routeToken
(REST、gRPC)字段。
查看 populateTransitionPolylines=true 的示例请求
{
"populateTransitionPolylines": true,
"model": {
"shipments": [
{
"pickups": [
{
"arrivalLocation": {
"latitude": 37.73881799999999,
"longitude": -122.4161
}
}
],
"deliveries": [
{
"arrivalLocation": {
"latitude": 37.79581,
"longitude": -122.4218856
}
}
]
}
],
"vehicles": [
{
"startLocation": {
"latitude": 37.73881799999999,
"longitude": -122.4161
},
"endLocation": {
"latitude": 37.73881799999999,
"longitude": -122.4161
},
"costPerKilometer": 1.0
}
],
"globalStartTime": "2024-02-13T00:00:00.000Z",
"globalEndTime": "2024-02-14T06:00:00.000Z"
}
}
查看对 populateTransitionPolylines=true 的请求的响应示例
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:39:02Z",
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
{
"startTime": "2024-02-13T00:19:43Z",
"detour": "0s"
}
],
"transitions": [
{
"travelDuration": "0s",
"waitDuration": "0s",
"totalDuration": "0s",
"startTime": "2024-02-13T00:00:00Z",
"routePolyline": {}
},
{
"travelDuration": "1183s",
"travelDistanceMeters": 8591,
"waitDuration": "0s",
"totalDuration": "1183s",
"startTime": "2024-02-13T00:00:00Z",
"routePolyline": {
"points": "}{ieFlkdjV?A@I?E@K?S@K?GB]@W?C?G@O?C@E?E@EB_AB_@?G?Q?KAQCm@?MAOAU?K?A?C?CAK?K?A?A?A?CAC?QAM?KASAE?C?CAEAC?ACGIO]s@ACAACCAECEAEEECIKSOYEIMWCGIMGKCIGMAAEI?ACGAC?C?AAE?C@a@?C?G@O@k@@O?]Bc@@k@@k@@c@Bq@@k@@]Bu@@e@@_@?OD{A@c@?I@]@O?C@i@BcAFq@?_@gAGeACk@G]Ew@SQGOGOKMEMGk@g@UOc@Uy@i@IGKIe@YMIYU_@UGEECEC]YkBoAYS]Q[OMEOEc@Oq@Sy@Ww@SA?OCKCQC[Eo@MSAe@EYGYCi@GgAMG?e@GGAYC[AkAEeAEW@I?EAM?GAG?IAIAGAEAKAOCGCIAWIc@I_@IEASEMCUEICECIAo@Ok@Ka@I]IGAc@G_@EA?SCOASCWCUAI?O?g@AUA_@A[AI?I?I?SAI@K?Q?A?KV_@?S?Q@u@Ba@@I@eADG@m@Bk@Bc@@K@m@BQ@_@BK?_@BY@e@BY@I@Q@YDE?]DYFC@[F]LMDE@GBUJGDEBKFMHOJA@UPWVA?WXY^SVQV[d@GHq@fAGJCBQTILA@EFOPIHIJSRQPUPSNYNC@OHYLSFMDODYHI@C?QBMBYBQ?M?M@SAI?G?CAI?KAWCa@I]IMEOEMEOIQGMGQK]Og@[]QUMg@WMG]MOGMEYIQGOCWGg@Ic@ESCUAaAGSASAU?M?e@Ae@AE?gA?QPA@W@c@Bo@DU@UB[@WBg@BM@SBM?O@K@K@O@OBKBKDKBKDKDA@EBGBGDEDGDWTA@EFEFMLEHQVORMNINQTSZQVA@A@g@r@GJA@CDEFKNQ\\MPKPe@|@[h@KPCHEHEJENEPCPCPAL?\\@NBNDNBLFNFNLRVf@FLDLDJBLBJ@L@R?f@ANAZARC^EjAElAAPCtAAx@?FAf@EfFC`D?p@Ar@Ap@Ax@Ax@?NAd@?BAVA\\MV?BAJGj@Gb@Gj@CPGz@ANAB?FGj@C^?BAFEl@M|AAHC\\IjAENCHCHCDCBCBEDGDC@GBMBA?IFo@OSEMEyAc@cBs@[Oc@SGEAA]U_Ao@]Yk@JYHUFa@JuAXgAVe@HQB_AJs@L_@FA?A?iBT{ARuAPeALWBYDgAL_AJ_@De@Fw@H_ALYB]Di@Hu@Hs@H]HC?_@F_@DYDc@D_@Dy@Ja@D}APYDI@E?QBO@uAPWDYBMBQ@E@C?YD}@L]Da@Fy@Hs@Fk@Hs@Fi@Fa@F_@DYB[Hw@HI@_AJ[DWDMBi@FO@w@JWDK@e@FM@g@Di@FSB]F_@F}@J[Da@D_@DUBeALG@UBe@F]F_@DiANoANu@F_@Di@Fq@JK@QB[D_ALs@JUBaAJy@J]D[@c@DgALg@F[Hw@Hq@HU@[DSsCMqBCWDSRC"
},
"routeToken": "CvMBCpoBMpcBGnwKJwIWCTqXLDcqhgCkvimDkSzlkpMC-vjWAaDKOd3tCNPWjgKY9ZoCABIkp-WKdQga3q4YIIiUZ4H3B1KNfwDrYPeL9O2eVJwjIWAzanUeGgsAIAW-AdIBAg8hCioJIAJwdXUNbR4bPWHfPD9FaRDGPkjIybzk-fDMxbIBIhdUUlBpWnQ2NkJNeTRrZVFQdy02ZjhRVRAFGjsKOQoYCg0KAggBEQAAAAAAgGZAEQrXo3A9YZRAEgAiGQoXVFJQaVpzV1ZCTXk0a2VRUHctNmY4UVUoASIVANvZE2tQPAWkpIsvQ700Jn8qVo_m"
},
{
"travelDuration": "1159s",
"travelDistanceMeters": 8765,
"waitDuration": "0s",
"totalDuration": "1159s",
"startTime": "2024-02-13T00:19:43Z",
"routePolyline": {
"points": "{~teF`oejVHARCjAOr@IFx@NzBHtA?HBXBl@ZI^ENAl@It@IRC`AM~@KZEZE`@Gf@G`@GHAZEj@EZAfBUTCfC]ZE\\Gj@Gl@Gp@IREZE`AMRCf@E`@GVEXCj@G\\Ez@K\\Gf@ELCHA`@G\\C\\GRA|@MfAM`@Ep@Ih@G|@K\\ERCTCr@I~@K\\GXEPAp@I|@K\\EXE~@QbAKDATAzDe@VEd@ELALAVEVCNCHAVCRCLC^EVEPAZGj@Gn@I~ASj@I^E~BW^ENAtASn@GZE^E`AKd@I\\GXE\\Eb@Gr@Kd@IPEXGbB_@l@MXGb@I`AUp@O@AbAUREHC`@EDAdBa@TEr@Oj@OHCNCXIJEFEPKLKJGDAB?@AJ?d@@VBB?B@J@`@FL?B@B?r@BV@FHFDBBDDDBDBDDBDDFBHBF@F@J@F?H@HAH?HAHCFAHCFEFCFEDEDEDGBKDG@I?G?GAKAIEECGEEEEEGICKCICKAMAQ?Q@Q@UBc@Dc@Fw@F}@?C?CISB_@Be@B]?K?I@S@o@@q@@_@?g@@eB@y@@g@?}@@{@@s@?Y?[@m@?GByB@O?c@@]?[@a@Bc@Bq@JyBFq@Fu@Fk@BY@KToBJO?ALu@Da@Fe@@UBa@Bg@Bi@Dg@@O@OBO@M@EBSBMDQFYDQHYN]JWHSVc@LSLQZ]HIZSJGDAHCDAJEB?DADABAD?DABAD?FALAXCp@EH?PC@?HQjCK^C\\CPANAz@CJAB?VAj@CVAB?b@A@?^@R?Z@\\Bf@Ft@LXFNFF@RFPFTHLHHBLFFBHFLFPHXPVLPJDBPHRLb@RD@`@NB@XHXHRBNBH@L@PB@?Z@N?H?J?H?PAD?PAHALAPCVGJADANERIVIBALGXOZQROVSFILKPSNO\\c@NURWLST_@PY@?LSHMLSLOT[BEPQJMHKHI@?JKLIPONITOVMZM@?NEPGPENCXE@?ZEXC`@C\\CH?p@EH?VAfAGl@C\\C\\A@?v@EjAE`AEFAD?TAX?B?X?l@?d@BjAFNXXFFB\\HDBj@Nl@NVFFBXHLBR@@@NB^HJBB@B?JB@@@?B@D@XFLBHDNHJT@BDJJZDRBJDPBH@DBD@BDFBBDFFDFD@?@@B@D?B@D?B?D?@?B?BAB?BABA@?DCFIPQBCBALQBE@AV_@DIPWLMLOHGHGHGJELGFADCFADAHAH?B?F?L@J@H@HB\\Jf@Nl@NLDPDZHLDNDZHt@TL@D?L?JAFANE^IVGVEF?F?D?F?F@B@D@TFjCx@RFPHVJz@f@TNB@VPb@Xb@Vf@ZDDHD\\TXPLHb@ZJHTLPH\\V`@VPJb@\\XNXNVLTFv@T^Dn@H~@FjADGp@CbAAh@?BANA\\?HAb@EzA?NA^Ad@Ct@A\\Aj@Cp@Ab@Aj@Aj@Cb@?\\ANAj@AN?F?BA`@?B@D?@?B@BBF?@DH@@FLBHFJHLBFLVDHNXJRBHDD@DBD@DBB@@@B\\r@HNBF?@@B@D?B?B@D@R?J@L?P@B?B?@?@?@?J@J?B?B?@?J@T@N?LBl@@P?J?P?FC^C~@AD?DAD?BAN?F?BAVC\\?FAJ?RAJ?DAH?@"
},
"routeToken": "CvsBCqIBMp8BGoMBCisCFgtG1Hlkf4MAwCL3qQKkpALomZ4Ci7meAozjjAPP34kDmSPq3BeDoWEAEiQzanUe6iFiW5kIYp6_RksOUl0YSWqIhERXJcl7xeckmqblinUaCgALCSuQBwIAdR4qCTkbWSARAAocAzICAgE9aRDGPkU-QYY-SIWx4e-az6a28QEiF1RSUGladU8zQk15cmtlUVBvZnVyd0FzEAUaOwo5ChgKDQoCCAERAAAAAACAZkARCtejcD0ulEASACIZChdUUlBpWnQtVkJNeXJrZVFQb2Z1cndBcygBIhUA29kTa1qXXaY59KJpCuXOkxw-Vkw"
}
],
"metrics": {
"performedShipmentCount": 1,
"travelDuration": "2342s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2342s",
"travelDistanceMeters": 17356
},
"routeCosts": {
"model.vehicles.cost_per_kilometer": 17.356
},
"routeTotalCost": 17.356
}
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2342s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2342s",
"travelDistanceMeters": 17356
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2024-02-13T00:00:00Z",
"latestVehicleEndTime": "2024-02-13T00:39:02Z",
"totalCost": 17.356,
"costs": {
"model.vehicles.cost_per_kilometer": 17.356
}
}
}
使用来自 OptimizeTourResponse
的路线令牌在 Navigation SDK 中启动导航会话。导航会话会尝试按照 Route Optimization API 返回的路线行驶。由于道路状况是动态变化的,因此使用给定令牌生成的路线可能与原始路线不同。虽然路线令牌不会过期,但我们建议您在生成令牌后尽快使用路线令牌,以尽可能使实际路线接近规划路线。
使用 Navigator.setDestinations
方法将由 Route Optimization API 生成的路线令牌传递给 Navigation SDK 时,您必须指定与 ShipmentRoute
过渡的结束位置相符的单个目的地。
如需详细了解路线令牌,请参阅
Android 版 Navigation SDK 和 iOS 版 Navigation SDK 的“规划路线”文档。
如需详细了解路线多段线编码,请参阅多段线。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-08-31。
[null,null,["最后更新时间 (UTC):2025-08-31。"],[[["\u003cp\u003eBy setting \u003ccode\u003epopulateTransitionPolylines\u003c/code\u003e to true in your \u003ccode\u003eOptimizeToursRequest\u003c/code\u003e, you can generate route polylines and route tokens for transitions within a \u003ccode\u003eShipmentRoute\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eRoute tokens, generated by the Route Optimization API, can be used to start navigation sessions in the Navigation SDK, allowing you to follow a pre-planned route.\u003c/p\u003e\n"],["\u003cp\u003eWhile route tokens don't have an expiration date, it's recommended to use them as soon as possible to minimize deviations between the planned and actual routes due to real-time road conditions.\u003c/p\u003e\n"],["\u003cp\u003eWhen utilizing a route token with Navigation SDK's \u003ccode\u003eNavigator.setDestinations\u003c/code\u003e, you need to specify a single destination that corresponds to the end location of the \u003ccode\u003eShipmentRoute\u003c/code\u003e transition.\u003c/p\u003e\n"]]],[],null,["# Transition polylines and route tokens\n\nThis scenario generates route tokens with route polylines using the\nRoute Optimization API.\n\nIn your `OptimizeToursRequest` message, set `populateTransitionPolylines`\n([REST](/maps/documentation/route-optimization/reference/rest/v1/projects/optimizeTours#body.request_body.FIELDS.populate_transition_polylines), [gRPC](/maps/documentation/route-optimization/reference/rpc/google.maps.routeoptimization.v1#google.maps.routeoptimization.v1.OptimizeToursRequest.FIELDS.bool.google.maps.routeoptimization.v1.OptimizeToursRequest.populate_transition_polylines)) to generate `routePolyline` ([REST](/maps/documentation/route-optimization/reference/rest/v1/ShipmentRoute#Transition.FIELDS.route_polyline), [gRPC](/maps/documentation/route-optimization/reference/rpc/google.maps.routeoptimization.v1#google.maps.routeoptimization.v1.ShipmentRoute.Transition.FIELDS.google.maps.routeoptimization.v1.ShipmentRoute.EncodedPolyline.google.maps.routeoptimization.v1.ShipmentRoute.Transition.route_polyline)) and\n`routeToken` ([REST](/maps/documentation/route-optimization/reference/rest/v1/ShipmentRoute#Transition.FIELDS.route_token), [gRPC](/maps/documentation/route-optimization/reference/rpc/google.maps.routeoptimization.v1#google.maps.routeoptimization.v1.ShipmentRoute.Transition.FIELDS.string.google.maps.routeoptimization.v1.ShipmentRoute.Transition.route_token)) fields in the transitions for a\n`ShipmentRoute` in the `OptimizeToursResponse`. \n\n#### See an example request with populateTransitionPolylines=true\n\n```json\n{\n \"populateTransitionPolylines\": true,\n \"model\": {\n \"shipments\": [\n {\n \"pickups\": [\n {\n \"arrivalLocation\": {\n \"latitude\": 37.73881799999999,\n \"longitude\": -122.4161\n }\n }\n ],\n \"deliveries\": [\n {\n \"arrivalLocation\": {\n \"latitude\": 37.79581,\n \"longitude\": -122.4218856\n }\n }\n ]\n }\n ],\n \"vehicles\": [\n {\n \"startLocation\": {\n \"latitude\": 37.73881799999999,\n \"longitude\": -122.4161\n },\n \"endLocation\": {\n \"latitude\": 37.73881799999999,\n \"longitude\": -122.4161\n },\n \"costPerKilometer\": 1.0\n }\n ],\n \"globalStartTime\": \"2024-02-13T00:00:00.000Z\",\n \"globalEndTime\": \"2024-02-14T06:00:00.000Z\"\n }\n}\n \n``` \n\n#### See an example response to the request with populateTransitionPolylines=true\n\n```json\n{\n \"routes\": [\n {\n \"vehicleStartTime\": \"2024-02-13T00:00:00Z\",\n \"vehicleEndTime\": \"2024-02-13T00:39:02Z\",\n \"visits\": [\n {\n \"isPickup\": true,\n \"startTime\": \"2024-02-13T00:00:00Z\",\n \"detour\": \"0s\"\n },\n {\n \"startTime\": \"2024-02-13T00:19:43Z\",\n \"detour\": \"0s\"\n }\n ],\n \"transitions\": [\n {\n \"travelDuration\": \"0s\",\n \"waitDuration\": \"0s\",\n \"totalDuration\": \"0s\",\n \"startTime\": \"2024-02-13T00:00:00Z\",\n \"routePolyline\": {}\n },\n {\n \"travelDuration\": \"1183s\",\n \"travelDistanceMeters\": 8591,\n \"waitDuration\": \"0s\",\n \"totalDuration\": \"1183s\",\n \"startTime\": \"2024-02-13T00:00:00Z\",\n \"routePolyline\": {\n \"points\": \"}{ieFlkdjV?A@I?E@K?S@K?GB]@W?C?G@O?C@E?E@EB_AB_@?G?Q?KAQCm@?MAOAU?K?A?C?CAK?K?A?A?A?CAC?QAM?KASAE?C?CAEAC?ACGIO]s@ACAACCAECEAEEECIKSOYEIMWCGIMGKCIGMAAEI?ACGAC?C?AAE?C@a@?C?G@O@k@@O?]Bc@@k@@k@@c@Bq@@k@@]Bu@@e@@_@?OD{A@c@?I@]@O?C@i@BcAFq@?_@gAGeACk@G]Ew@SQGOGOKMEMGk@g@UOc@Uy@i@IGKIe@YMIYU_@UGEECEC]YkBoAYS]Q[OMEOEc@Oq@Sy@Ww@SA?OCKCQC[Eo@MSAe@EYGYCi@GgAMG?e@GGAYC[AkAEeAEW@I?EAM?GAG?IAIAGAEAKAOCGCIAWIc@I_@IEASEMCUEICECIAo@Ok@Ka@I]IGAc@G_@EA?SCOASCWCUAI?O?g@AUA_@A[AI?I?I?SAI@K?Q?A?KV_@?S?Q@u@Ba@@I@eADG@m@Bk@Bc@@K@m@BQ@_@BK?_@BY@e@BY@I@Q@YDE?]DYFC@[F]LMDE@GBUJGDEBKFMHOJA@UPWVA?WXY^SVQV[d@GHq@fAGJCBQTILA@EFOPIHIJSRQPUPSNYNC@OHYLSFMDODYHI@C?QBMBYBQ?M?M@SAI?G?CAI?KAWCa@I]IMEOEMEOIQGMGQK]Og@[]QUMg@WMG]MOGMEYIQGOCWGg@Ic@ESCUAaAGSASAU?M?e@Ae@AE?gA?QPA@W@c@Bo@DU@UB[@WBg@BM@SBM?O@K@K@O@OBKBKDKBKDKDA@EBGBGDEDGDWTA@EFEFMLEHQVORMNINQTSZQVA@A@g@r@GJA@CDEFKNQ\\\\MPKPe@|@[h@KPCHEHEJENEPCPCPAL?\\\\@NBNDNBLFNFNLRVf@FLDLDJBLBJ@L@R?f@ANAZARC^EjAElAAPCtAAx@?FAf@EfFC`D?p@Ar@Ap@Ax@Ax@?NAd@?BAVA\\\\MV?BAJGj@Gb@Gj@CPGz@ANAB?FGj@C^?BAFEl@M|AAHC\\\\IjAENCHCHCDCBCBEDGDC@GBMBA?IFo@OSEMEyAc@cBs@[Oc@SGEAA]U_Ao@]Yk@JYHUFa@JuAXgAVe@HQB_AJs@L_@FA?A?iBT{ARuAPeALWBYDgAL_AJ_@De@Fw@H_ALYB]Di@Hu@Hs@H]HC?_@F_@DYDc@D_@Dy@Ja@D}APYDI@E?QBO@uAPWDYBMBQ@E@C?YD}@L]Da@Fy@Hs@Fk@Hs@Fi@Fa@F_@DYB[Hw@HI@_AJ[DWDMBi@FO@w@JWDK@e@FM@g@Di@FSB]F_@F}@J[Da@D_@DUBeALG@UBe@F]F_@DiANoANu@F_@Di@Fq@JK@QB[D_ALs@JUBaAJy@J]D[@c@DgALg@F[Hw@Hq@HU@[DSsCMqBCWDSRC\"\n },\n \"routeToken\": \"CvMBCpoBMpcBGnwKJwIWCTqXLDcqhgCkvimDkSzlkpMC-vjWAaDKOd3tCNPWjgKY9ZoCABIkp-WKdQga3q4YIIiUZ4H3B1KNfwDrYPeL9O2eVJwjIWAzanUeGgsAIAW-AdIBAg8hCioJIAJwdXUNbR4bPWHfPD9FaRDGPkjIybzk-fDMxbIBIhdUUlBpWnQ2NkJNeTRrZVFQdy02ZjhRVRAFGjsKOQoYCg0KAggBEQAAAAAAgGZAEQrXo3A9YZRAEgAiGQoXVFJQaVpzV1ZCTXk0a2VRUHctNmY4UVUoASIVANvZE2tQPAWkpIsvQ700Jn8qVo_m\"\n },\n {\n \"travelDuration\": \"1159s\",\n \"travelDistanceMeters\": 8765,\n \"waitDuration\": \"0s\",\n \"totalDuration\": \"1159s\",\n \"startTime\": \"2024-02-13T00:19:43Z\",\n \"routePolyline\": {\n \"points\": \"{~teF`oejVHARCjAOr@IFx@NzBHtA?HBXBl@ZI^ENAl@It@IRC`AM~@KZEZE`@Gf@G`@GHAZEj@EZAfBUTCfC]ZE\\\\Gj@Gl@Gp@IREZE`AMRCf@E`@GVEXCj@G\\\\Ez@K\\\\Gf@ELCHA`@G\\\\C\\\\GRA|@MfAM`@Ep@Ih@G|@K\\\\ERCTCr@I~@K\\\\GXEPAp@I|@K\\\\EXE~@QbAKDATAzDe@VEd@ELALAVEVCNCHAVCRCLC^EVEPAZGj@Gn@I~ASj@I^E~BW^ENAtASn@GZE^E`AKd@I\\\\GXE\\\\Eb@Gr@Kd@IPEXGbB_@l@MXGb@I`AUp@O@AbAUREHC`@EDAdBa@TEr@Oj@OHCNCXIJEFEPKLKJGDAB?@AJ?d@@VBB?B@J@`@FL?B@B?r@BV@FHFDBBDDDBDBDDBDDFBHBF@F@J@F?H@HAH?HAHCFAHCFEFCFEDEDEDGBKDG@I?G?GAKAIEECGEEEEEGICKCICKAMAQ?Q@Q@UBc@Dc@Fw@F}@?C?CISB_@Be@B]?K?I@S@o@@q@@_@?g@@eB@y@@g@?}@@{@@s@?Y?[@m@?GByB@O?c@@]?[@a@Bc@Bq@JyBFq@Fu@Fk@BY@KToBJO?ALu@Da@Fe@@UBa@Bg@Bi@Dg@@O@OBO@M@EBSBMDQFYDQHYN]JWHSVc@LSLQZ]HIZSJGDAHCDAJEB?DADABAD?DABAD?FALAXCp@EH?PC@?HQjCK^C\\\\CPANAz@CJAB?VAj@CVAB?b@A@?^@R?Z@\\\\Bf@Ft@LXFNFF@RFPFTHLHHBLFFBHFLFPHXPVLPJDBPHRLb@RD@`@NB@XHXHRBNBH@L@PB@?Z@N?H?J?H?PAD?PAHALAPCVGJADANERIVIBALGXOZQROVSFILKPSNO\\\\c@NURWLST_@PY@?LSHMLSLOT[BEPQJMHKHI@?JKLIPONITOVMZM@?NEPGPENCXE@?ZEXC`@C\\\\CH?p@EH?VAfAGl@C\\\\C\\\\A@?v@EjAE`AEFAD?TAX?B?X?l@?d@BjAFNXXFFB\\\\HDBj@Nl@NVFFBXHLBR@@@NB^HJBB@B?JB@@@?B@D@XFLBHDNHJT@BDJJZDRBJDPBH@DBD@BDFBBDFFDFD@?@@B@D?B@D?B?D?@?B?BAB?BABA@?DCFIPQBCBALQBE@AV_@DIPWLMLOHGHGHGJELGFADCFADAHAH?B?F?L@J@H@HB\\\\Jf@Nl@NLDPDZHLDNDZHt@TL@D?L?JAFANE^IVGVEF?F?D?F?F@B@D@TFjCx@RFPHVJz@f@TNB@VPb@Xb@Vf@ZDDHD\\\\TXPLHb@ZJHTLPH\\\\V`@VPJb@\\\\XNXNVLTFv@T^Dn@H~@FjADGp@CbAAh@?BANA\\\\?HAb@EzA?NA^Ad@Ct@A\\\\Aj@Cp@Ab@Aj@Aj@Cb@?\\\\ANAj@AN?F?BA`@?B@D?@?B@BBF?@DH@@FLBHFJHLBFLVDHNXJRBHDD@DBD@DBB@@@B\\\\r@HNBF?@@B@D?B?B@D@R?J@L?P@B?B?@?@?@?J@J?B?B?@?J@T@N?LBl@@P?J?P?FC^C~@AD?DAD?BAN?F?BAVC\\\\?FAJ?RAJ?DAH?@\"\n },\n \"routeToken\": \"CvsBCqIBMp8BGoMBCisCFgtG1Hlkf4MAwCL3qQKkpALomZ4Ci7meAozjjAPP34kDmSPq3BeDoWEAEiQzanUe6iFiW5kIYp6_RksOUl0YSWqIhERXJcl7xeckmqblinUaCgALCSuQBwIAdR4qCTkbWSARAAocAzICAgE9aRDGPkU-QYY-SIWx4e-az6a28QEiF1RSUGladU8zQk15cmtlUVBvZnVyd0FzEAUaOwo5ChgKDQoCCAERAAAAAACAZkARCtejcD0ulEASACIZChdUUlBpWnQtVkJNeXJrZVFQb2Z1cndBcygBIhUA29kTa1qXXaY59KJpCuXOkxw-Vkw\"\n }\n ],\n \"metrics\": {\n \"performedShipmentCount\": 1,\n \"travelDuration\": \"2342s\",\n \"waitDuration\": \"0s\",\n \"delayDuration\": \"0s\",\n \"breakDuration\": \"0s\",\n \"visitDuration\": \"0s\",\n \"totalDuration\": \"2342s\",\n \"travelDistanceMeters\": 17356\n },\n \"routeCosts\": {\n \"model.vehicles.cost_per_kilometer\": 17.356\n },\n \"routeTotalCost\": 17.356\n }\n ],\n \"metrics\": {\n \"aggregatedRouteMetrics\": {\n \"performedShipmentCount\": 1,\n \"travelDuration\": \"2342s\",\n \"waitDuration\": \"0s\",\n \"delayDuration\": \"0s\",\n \"breakDuration\": \"0s\",\n \"visitDuration\": \"0s\",\n \"totalDuration\": \"2342s\",\n \"travelDistanceMeters\": 17356\n },\n \"usedVehicleCount\": 1,\n \"earliestVehicleStartTime\": \"2024-02-13T00:00:00Z\",\n \"latestVehicleEndTime\": \"2024-02-13T00:39:02Z\",\n \"totalCost\": 17.356,\n \"costs\": {\n \"model.vehicles.cost_per_kilometer\": 17.356\n }\n }\n}\n \n```\n\nStart a navigation session in Navigation SDK with a route token\nfrom the `OptimizeTourResponse`. The navigation session attempts to follow the\nroute returned by the Route Optimization API. Due to dynamic road\nconditions, a route generated with a given token may differ from the original\nroute. Although route tokens don't expire, we recommend using the route token as\nsoon as feasible after token generation to maximize how close the actual route\nis to the planned route.\n\nWhen passing a route token generated by Route Optimization API to\nthe Navigation SDK using `Navigator.setDestinations` method, you\nmust specify a single destination that matches the end location of the\n`ShipmentRoute` transition.\n\nFor more information on route tokens, see the Plan a route documentation for [Navigation SDK for Android](/maps/documentation/navigation/android-sdk/customize-route) and [Navigation SDK for iOS](/maps/documentation/navigation/ios-sdk/route-customizations).\n\nFor details about route polyline encoding, see [Polylines](/maps/documentation/route-optimization/pickup-delivery-order-optimization#polylines)."]]