OptimizeTourResponse의 경로 토큰을 사용하여 Navigation SDK에서 탐색 세션을 시작합니다. 탐색 세션은 Route Optimization API에서 반환된 경로를 따르려고 시도합니다. 동적인 도로 상황으로 인해 지정된 토큰으로 생성된 경로가 원래 경로와 다를 수 있습니다. 경로 토큰은 만료되지 않지만, 실제 경로가 계획된 경로에 최대한 가깝도록 토큰 생성 후 가능한 한 빨리 경로 토큰을 사용하는 것이 좋습니다.
Navigator.setDestinations 메서드를 사용하여 경로 최적화 API에서 생성된 경로 토큰을 내비게이션 SDK에 전달할 때는 ShipmentRoute 전환의 종료 위치와 일치하는 단일 목적지를 지정해야 합니다.
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-09-04(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)."]]