Полилинии перехода и маркеры маршрута
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Этот сценарий генерирует маркеры маршрута с полилиниями маршрута с использованием API оптимизации маршрута.
В сообщении OptimizeToursRequest
задайте populateTransitionPolylines
( REST , gRPC ) для генерации полей routePolyline
( REST , gRPC ) и routeToken
( REST , gRPC ) в переходах для ShipmentRoute
в OptimizeToursResponse
.
Посмотрите пример запроса с 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
}
}
}
Запустите сеанс навигации в Navigation SDK с токеном маршрута из OptimizeTourResponse
. Сеанс навигации пытается следовать маршруту, возвращаемому API оптимизации маршрутов. Из-за динамических дорожных условий маршрут, сгенерированный с использованием данного токена, может отличаться от исходного. Хотя токены маршрутов не имеют срока действия, мы рекомендуем использовать токен маршрута как можно скорее после его генерации, чтобы максимально приблизить фактический маршрут к запланированному.
При передаче токена маршрута, сгенерированного Route Optimization API, в Navigation SDK с помощью метода Navigator.setDestinations
необходимо указать один пункт назначения, соответствующий конечному местоположению перехода ShipmentRoute
.
Дополнительную информацию о токенах маршрута см. в документации по планированию маршрута для Navigation SDK для Android и Navigation SDK для iOS .
Подробную информацию о кодировании полилиний маршрута см. в разделе Полилинии .
Если не указано иное, контент на этой странице предоставляется по лицензии Creative Commons "С указанием авторства 4.0", а примеры кода – по лицензии Apache 2.0. Подробнее об этом написано в правилах сайта. Java – это зарегистрированный товарный знак корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-08-29 UTC.
[null,null,["Последнее обновление: 2025-08-29 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)."]]