전환 다중선 및 경로 토큰
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
이 시나리오에서는 Route Optimization 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
메서드를 사용하여 경로 최적화 API에서 생성된 경로 토큰을 내비게이션 SDK에 전달할 때는 ShipmentRoute
전환의 종료 위치와 일치하는 단일 목적지를 지정해야 합니다.
경로 토큰에 관한 자세한 내용은
Android용 Navigation SDK 및 iOS용 Navigation SDK의 경로 계획 문서에서 확인하세요.
경로 다중선 인코딩에 대한 자세한 내용은 다중선을 참고하세요.
달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스에 따라 라이선스가 부여되며, 코드 샘플에는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 Google Developers 사이트 정책을 참조하세요. 자바는 Oracle 및/또는 Oracle 계열사의 등록 상표입니다.
최종 업데이트: 2025-08-31(UTC)
[null,null,["최종 업데이트: 2025-08-31(UTC)"],[[["\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)."]]