Example #1
0
        public async Task ReturnsOptimisedRoutes()
        {
            var mappingSettings = new MappingSettings {
                GoogleMapsApiKey = "somekey"
            };
            var mockedHttpClient = new Mock <IHttpClient>();

            var service = new GoogleOptimizeRouteService(Options.Create(mappingSettings), Mock.Of <ILogger <GoogleOptimizeRouteService> >(), mockedHttpClient.Object);

            var mockedHttpResponse = new HttpResponseMessage(System.Net.HttpStatusCode.OK)
            {
                Content = new StringContent(
                    @"{'geocoded_waypoints':[{'geocoder_status':'OK','place_id':'ChIJIdRBWtwEzkwRZt5I82PCcn4','types':['street_address']
                        },{'geocoder_status':'OK','place_id':'EjIxLTMgQ2hlbWluIFN0IEplYW4sIExhYy1kZXMtUGxhZ2VzLCBRQyBKMFQsIENhbmFkYQ','types':['street_address']
                        },{'geocoder_status':'OK','place_id':'EjQxNDAgQ2hlbWluIFNpb3VpLCBMYWMtZGVzLVBsYWdlcywgUUMgSjBUIDFLMCwgQ2FuYWRh','types':['street_address']},{'geocoder_status':'OK','place_id':'Ei0zNDgwIFN0IFJvc2UgUmQsIEZvdXJuaWVyLCBPTiBLMEIgMUcwLCBDYW5hZGE','types':['street_address']},{'geocoder_status':'OK','place_id':'EikyMDAgU3Vzc2V4IERyLCBPdHRhd2EsIE9OIEsxTiA1QTIsIENhbmFkYQ','types':['street_address']}],'routes':[{'bounds':{'northeast':{'lat':46.102856,'lng':-74.58212709999999},'southwest':{'lat':45.3031686,'lng':-75.7195387}},'copyrights':'Mapdata©2017Google','legs':[{'distance':{'text':'123km','value':123357},'duration':{'text':'1hour46mins','value':6350},'end_address':'1-3CheminStJean,Lac-des-Plages,QCJ0T,Canada','end_location':{'lat':46.102838,'lng':-74.989468},'start_address':'24SussexDr,Ottawa,ONK1M1M4,Canada','start_location':{'lat':45.4436416,'lng':-75.6932209},'steps':[{'distance':{'text':'0.6km','value':613},'duration':{'text':'1min','value':79},'end_location':{'lat':45.438672,'lng':-75.69656519999999},'html_instructions':'Head\u003cb\u003esouthwest\u003c/b\u003eon\u003cb\u003eSussexDr\u003c/b\u003e/\u003cb\u003eOttawaRegionalRd93\u003c/b\u003etoward\u003cb\u003eAlexanderSt\u003c/b\u003e','polyline':{'points':'wujtGry~lMHDdAj@bAh@|@d@bAl@h@ZFBHDJD\\PNHbAn@nBlARJpDrBHDt@f@zA|@JFFN@BBBd@Z'},'start_location':{'lat':45.4436416,'lng':-75.6932209},'travel_mode':'DRIVING'},{'distance':{'text':'0.1km','value':128},'duration':{'text':'1min','value':18},'end_location':{'lat':45.4381071,'lng':-75.6953206},'html_instructions':'Turn\u003cb\u003eleft\u003c/b\u003eonto\u003cb\u003eKingEdwardAve\u003c/b\u003e/\u003cb\u003eOttawaRegionalRd99S\u003c/b\u003e','maneuver':'turn-left','polyline':{'points':'uvitGpn_mMRLH[r@qC\\yA'},'start_location':{'lat':45.438672,'lng':-75.69656519999999},'travel_mode':'DRIVING'},{'distance':{'text':'0.6km','value':593},'duration':{'text':'1min','value':36},'end_location':{'lat':45.4360868,'lng':-75.699248},'html_instructions':'Taketherampto\u003cb\u003eGatineau\u003c/b\u003e','polyline':{'points':'esitGvf_mMFIJSVg@PYPSHG^Wb@SRCLAT?TBLDNDLDJFLJHFFJLNJNHLJRJTLXJXFXHZFZHb@DR@DLRBr@@^@`@?v@?b@An@Ch@Cb@CVIp@Kt@Id@Kl@Ml@'},'start_location':{'lat':45.4381071,'lng':-75.6953206},'travel_mode':'DRIVING'},{'distance':{'text':'0.3km','value':267},'duration':{'text':'1min','value':13},'end_location':{'lat':45.43694929999999,'lng':-75.7024479},'html_instructions':'Continueonto\u003cb\u003eMacdonald-CartierBridgeN\u003c/b\u003e\u003cdivstyle=\'font-size:0.9em\'\u003eEnteringQuébec\u003c/div\u003e','polyline':{'points':'qfitGh_`mMWxAUpAe@jC_@vBw@nE'},'start_location':{'lat':45.4360868,'lng':-75.699248},'travel_mode':'DRIVING'},{'distance':{'text':'0.9km','value':931},'duration':{'text':'1min','value':43},'end_location':{'lat':45.43956559999999,'lng':-75.71377989999999},'html_instructions':'Continueonto\u003cb\u003eAutoroute5N\u003c/b\u003e','polyline':{'points':'}kitGhs`mMc@dCa@bCq@~Dk@tDq@~DSlAE`@Gf@Gd@[xBSxAQvA]lC]jCWnB_@vCQpAWrBSvAADUhB'},'start_location':{'lat':45.43694929999999,'lng':-75.7024479},'travel_mode':'DRIVING'},{'distance':{'text':'51.4km','value':51365},'duration':{'text':'31mins','value':1847},'end_location':{'lat':45.6249394,'lng':-75.23923259999999},'html_instructions':'Takeexit\u003cb\u003e2\u003c/b\u003etomergeonto\u003cb\u003eAutoroute50E\u003c/b\u003e/\u003cb\u003eQC-148E\u003c/b\u003etoward\u003cb\u003eMontréal\u003c/b\u003e\u003cdivstyle=\'font-size:0.9em\'\u003eContinuetofollowAutoroute50E\u003c/div\u003e','maneuver':'ramp-right','polyline':{'points':'i|itGbzbmMQX?@I\\oAhHKf@G`@Ot@Q`AUbAYpAWfAW|@M^Ur@Sf@Q`@KTY\\WVe@`@SJWJa@LUDUB_@@{A@wBAyBCuGKG?c@CcAGYAg@Ge@Km@Om@Q[MQI]OYQ[SUOSOa@[QOMMg@e@ACi@k@}@cAA?KEs@w@cAcA][_@YYS]S_@Sc@S]Mm@SYGYEm@Ii@GQAUAi@Au@?o@@eABqFJwABu@By@@U@wEFsBBaA@kGJM?]?A?kA@}CBiBBoCB_A?g@Ae@?o@Cg@Cu@E}@IWCc@GmASiB[mB]s@OyHsAc@Gy@MmB]qDi@oASmAUwAWeF{@cF{@eBYaBY{@K_COcBGcCDgBHsAJgCRuQxAeKv@sALiBNsJx@uFd@oCToFd@kBPsD\\qCXgAHqBLmNlAaAHq@Bs@Bw@@u@?q@Cu@Cs@Gk@Eu@Kq@Km@Kk@Mm@Ow@Wq@Sm@Ui@Uo@[m@[m@[o@a@q@c@i@a@s@m@o@k@q@m@y@{@e@k@aAmAg@u@U[a@o@_@q@S][k@i@cAaAyBg@sAg@yAe@yAa@yA[kAg@aC]qBUyAOkAMiACMI{@Gs@IcAOiCIkAMkBiAgQKqAC[?AAYUcDOoBKkBAI]eFQ{CKqAKaBEu@QeCGw@GaAMyBiAkPe@oH[cFWwDKyAMgBUeDSyC_@aGU}CG{@WwDq@gKQmCkBwYGiA}A}UcD_g@mCqb@qAoSaAqOGcAGcAAa@O_DC[Ew@EyAGgBGgCGyCGqDC{EAeD@sZ?kE?iG?{Q?wB?yD?eF?aA?cM?gC@aE?}C?aB?uC@gF?sM?yB?qE?yF?se@@qQ?yA@kD?kKA_JBmM@aM?kDCaN?yB@gMAuFAaGEqGGoGKyGKqFQsGQuFOsEKiCMkDW_HQiFUwFWsGQcFUgGKeCWuHa@sKQuE]aJ[gIa@}KEgAEeASkF]eJQuEYqHAi@QkFGsAQsEIyCUoEQoCMcBEm@Gg@YoCUoB_@mCWeBSkAoBoJ]oAU}@YeASs@_GaT}AqF_AaDoBgHgDsLqBmH_B{FwDcNmAkE}@cDwByHiA}D}AsF{CsK}Iy[cLga@oAoEqBiHWaA}@_DmCuJwAeFcAoDmB}GSw@mB{GqEgPACyBaIqAuEwAeFc@cBgA{D_BuF{BgIqAuE{AmFc@{AwAkFeAuDq@aC]kAq@eCwAeFi@wB[sAWmA_@oBQ_AKo@Oy@McAMaAMcAM_AKaAIcAIgAGk@Ck@IiAG_AEaACq@CaAEeAEyACeACkAAaACcAEgACeAE{ACaACeACeACcACo@E{AE{AE{AE{AC}AE{AGqBE}ACeACgAE{AEwAEsBEgACcAE}AC{AGqBIiCE_BEqBE{ACeAE}AEoBGsBE}ACeACcAEyAGwBEeBEuBGqBEqBG}BGuBGkBIgBIcBMgBOeBQ_BUqBS{AU{ASsAWoA]eBc@iBW_A[mAMc@Qi@s@yBe@qAm@}As@qB}DiKOa@k@{Au@qBw@qB}@gCoAmDc@qAi@{A]eA]cAg@aBgAcDk@eBYy@Wy@c@kAk@iBc@sAi@eB_@oAY_Ag@eBe@cBSs@Qm@eAyDu@mCqA{Ee@gBu@qCYgAW_AU_A]oAYgAc@cBe@eBu@oCm@}BcAwD}@aDcAwD{AwFyBgIm@}Bk@wBo@{Be@iB{@aDg@gBm@wB?Am@wBg@gBg@eBe@cB{@cDeAyDu@qCk@yB_@uA}@cDk@sB}@cD{@_DUcAsByHg@kBUy@W_Aa@{ASs@Mi@K_@Mc@IMGWsA_FcBoGOg@Su@Sw@Om@Qo@W_AW}@Su@YeAW_AQq@Qq@Sq@Sw@Qm@Oi@Qq@Me@Ss@Ok@Su@W_ASq@Uu@Ok@[_A[{@Oa@Ui@Ys@Ym@O_@QYWi@We@Yi@[e@U]]c@a@i@a@i@a@g@a@e@_@a@[[]]_@_@_@]c@]k@a@o@c@]Q]S[Q]Qe@SUMWKi@Q]M_@Mc@Me@M_@Ka@Ie@K_@GSCSESA]E]Ea@C[Ai@Ag@As@Ak@@c@@a@Bk@Ba@Bke@jDeL|@{Hl@oE\\yOjAqHj@qDZ}L~@cHh@[ByALYBA?]Bg^bC_BLy@FgBLwBN{CVyBTiBPyBToBPgBLiBJaCPcABcABu@?i@Ci@Ao@Es@Gw@IaAMkASm@MiAYmBi@_AWi@Sg@UeB}@ECe@Ym@a@g@[e@_@s@i@cA}@YY_@]_@_@GGi@m@SUk@s@k@u@g@s@_@g@Yc@Yg@Ye@Wc@Uc@We@]s@Wi@[q@_@{@[{@_@eAa@gAY}@]gA[iA]oAYoAMg@Mm@Os@Ii@YaBmBkLiFi[qAuH}AmJ_BiJkBaLuAgIo@aEm@qDg@wC}@qFk@kDo@yDg@wC_@{BWyASkAm@wDSeAiAeH}@_FoAsHe@sCSkAIg@UeBU}A]mCWyBUiBKkAO}AKkAOyASiCW_EKeBY_FOoC?SGeBCeBA_@CgAAgBAgAAeB?yA?iB?yA?u@?aA@g@?m@@c@?w@Bm@B_BBiA?c@J{ELcDPkDVeFFuAN_DRmELmCTcFFwADkAJ{BNuEHgBLsCJqCFaBDq@?ADs@HuBDsABcAHwCN_E@m@@e@?cDBgCDyBBwAHgGDyC@oBFsMFoBFoC@oB@iD?_B?}C?Q@UF{ADu@R}CZyDf@uFb@qF^sF\\uEd@}H^eGd@qGd@iGZsEZoFXyELgBJeBHkADo@BWVyCVcD@SPwB@OVgDPeCB]NyBRuCNiBXkDToDD{@HkBFcBFeCDoC@uA@iA?uA?gDAgBAaCEyBCeAIoDGaCE{@GeBGgAI{AKyAI_BQyCI_B[cGCa@YyFa@wGU_E[kFMmBK{BCq@qBc^W{Ee@qI_@}GYaFEw@SgEUmFG{BKgDIcEUeO'},'start_location':{'lat':45.43956559999999,'lng':-75.71377989999999},'travel_mode':'DRIVING'},{'distance':{'text':'0.8km','value':813},'duration':{'text':'1min','value':47},'end_location':{'lat':45.62337,'lng':-75.23830319999999},'html_instructions':'Takeexit\u003cb\u003e187\u003c/b\u003efor\u003cb\u003eQC-317\u003c/b\u003etoward\u003cb\u003eThurso\u003c/b\u003e/\u003cb\u003eRipon\u003c/b\u003e','maneuver':'ramp-right','polyline':{'points':'{bnuGddfjMHa@?AA]CiBAgBAqA@gA@eADiCFgAFu@D[F]DQHYJUJQPUJKFELGPIDCNENAJ?N?J@NDRFJHNJDDHHJPLTVn@L`@J^H`@D^Bl@@l@?b@Cd@C^u@hE]rB'},'start_location':{'lat':45.6249394,'lng':-75.23923259999999},'travel_mode':'DRIVING'},{'distance':{'text':'24.6km','value':24618},'duration':{'text':'16mins','value':981},'end_location':{'lat':45.7860565,'lng':-75.1076384},'html_instructions':'Turn\u003cb\u003eright\u003c/b\u003eonto\u003cb\u003eQC-317N\u003c/b\u003e','maneuver':'turn-right','polyline':{'points':'aymuGj~ejMkAi@c@Qi@Si@Q_@Mo@Ou@Os@Ku@Ko@IK?k@Ga@Ac@AmA?i@@}@FaAJu@H]FaBZmCp@{Cz@_AT]H}@N]D}@J}DZsAJWDaAP_B^qOvDqKlCaCl@oAVWBW@SAWASAWGYIa@Oc@WYUYWW[QUS[O_@O]Ok@Mg@Kk@Io@Go@Cq@?i@?i@FyCT}IVaJr@mY@kBAc@Ci@Co@Ga@Ky@Q}@U{@Sk@a@}@c@u@iAaB}@oA{@mA]c@u@y@_@Y]SWOYMQIYI]IQCSCOAWA[?g@@kEHkDHs@Cc@C[C_@GWG_@K[K_@MSIsAo@cCkAqB_A_Bo@YMe@Oy@MyEo@_Eg@mBWo@KYI]MYM[QaCiB_DcC{AkAwAgA_BmAo@e@u@e@s@]_Ae@y@[gDmAcC_AuAk@yAk@qAc@uBy@_@O}@]o@[yBaAmB_AsAm@iCeA_Cy@{Ai@sFmBm@SgA[s@Qq@KaAMwEe@s@EwDYqBSa@Ck@C_@AY?c@D}@Jm@L[He@Ni@Tm@Xg@\\y@j@q@n@k@t@o@|@o@x@g@p@SVg@f@c@Ze@Te@Re@Lg@Dg@@YASAiBO{@GeCO_CKcAEcBDsALeBT}AVyATs@F{@L{@NwBXk@Hi@@c@?i@Ea@Kc@Oc@Qa@W_@Y][[a@Yc@Sa@M[e@uAiBmFqCkI[u@Yk@_@k@QS]_@c@c@i@_@]S[Oi@Oi@Km@Ei@AiADoAD{@Dy@DkAD}@Cs@Gq@K]I]K{@_@oAi@gAa@_A[c@Ow@_@eB_AoAu@gBaAaAi@s@_@m@YoAs@y@_@m@YWMi@UoFkCqDiBo@_@y@a@]QsAq@aAg@o@_@u@i@_@[i@g@c@e@aAiA]g@_@k@S]Uc@We@]y@c@iAW{@o@aCOs@O{@MgAOoAM}Ac@aGiAwNw@mKu@oKEk@Ey@SmCUwCSoCW{DYsD]iEWaDOsBOeCa@mFSeCG}@MeBUkDUcDMcBI}@[mEUyCs@yJSuCSgCUgD_@}EIuAE_AEu@EoAAs@EwAEeACwAAy@?s@AqA?aA@cA?q@@g@DeBF_CL{ENyFN}ELaE`@wSBo@?W@g@?m@Au@Ac@Ey@Go@C[Ee@Gc@Ik@G_@I[EUI[Me@Qs@]mA]kAmByG{@aD]oAUs@Uu@Um@Yq@Uk@Q_@k@kAYi@S]U_@e@q@Ya@c@k@e@k@WW_@a@[Ya@_@[Ug@_@_BeAqCkBoAy@u@e@aAk@m@[u@_@m@Wk@WcA[u@UcAWi@Mm@Ka@Gg@ImBQQCQA[A_@A}@A}GEyDAgCAsC?oCA{AAgA?iA?w@?k@Ag@CWAUCOCQC[I]I_AYgA][IYG]IUEWE[E]COA]ASA]?eA@}A?iB@eFHeDDiFD}FBuB@gC?kA@u@?yB@gB@}ABoBDwA@kC@iBByA@uA@{AAg@?g@Ae@Ay@CcACcCIaCKk@Cu@C{EQqBEmDMo@Ey@EMAIAKAKCKCYGc@M[I[OUMOGSOmA_Ai@o@Y_@a@k@S_@S_@Qa@Si@_@gAOi@Oi@EQG]Ga@Ky@Ge@E_@Ei@IaAOuBKkAK}AWeEO_CEa@CYEWGa@G_@Ic@IWESK]K]M_@Oa@[u@KWOYMWQYMSMQKO[a@SUQQGGIIKKMKUQMKOIOKQIQKSI_@OUKOESGMCKCe@G_AOsC_@aFo@uDc@sDc@eKsA_@GyAQsCYa@GoASWG[I[K_@Ma@Q]Om@Y_@U]Uy@o@i@a@w@o@yBuBoCeCkDeD_KiJcC}B}A}A]_@OQuCkDUYeA{Ac@o@e@s@aA}Ao@gAe@{@e@{@aAeBiAqB[m@}@aBgBaDaBqCi@{@e@y@sAeCgAqBkAwBoJyPqA{B{AoCo@cAW_@Y]_@e@u@s@][c@]i@_@WO]SSIWMQGmAc@UI[IQE[GQCMCUAc@Eo@CcA?cB?eC?E?uRDM@'},'start_location':{'lat':45.62337,'lng':-75.23830319999999},'travel_mode':'DRIVING'},{'distance':{'text':'7.1km','value':7089},'duration':{'text':'7mins','value':428},'end_location':{'lat':45.8277223,'lng':-75.0682656},'html_instructions':'Turn\u003cb\u003eright\u003c/b\u003eonto\u003cb\u003eRueBoucher\u003c/b\u003e/\u003cb\u003eQC-317N\u003c/b\u003e\u003cdivstyle=\'font-size:0.9em\'\u003eContinuetofollowQC-317N\u003c/div\u003e','maneuver':'turn-right','polyline':{'points':'{qmvGvmliM?Y?S?mDAeD?eI?oD?sM@sC?gA?Q?U?Y@k@@a@@Q@UDi@D[B]DWN_ANy@Lm@Ja@Lk@F[BQ@I@I?K?OAQCOCMEKEIEGIMEEEEGAGCECIAG?C?C?C@G?E@GBIDIHKLINKTK^Kb@I^Mb@GTKVM`@Uf@QZOVOVKJIJUVSRUP]TYLQHUHWDYF_@D]Da@Bi@BK@I?K?KAKAIAOCMGKEKGMIEEIIe@e@kFeG}@cAS]Wc@Sc@K[GQCQCQCc@Ai@Ak@@g@BqD?oB@cC@kA?e@B[BU@Q@KDSDUF[@I@K@O@MAWAQCSCQCKEKCICIGMIMGEIGMIQIoA_@wC{@YIm@M]I]IOEMG[QSOOOOOOUOUWi@_@o@IMMOKMOOQMMGMGSIUEw@Ku@IaD_@}@MWEQGICGCIGIGGIW[S_@MQKMKIKGIEICIAK?K@IBMDIDYRWN]Rc@R]LYFM@I?G?KAMCOIOGQKQMQMQOUQIEQISIYG}@QkASk@IiASw@OeAQ{LqB}Ci@sE{@}AWc@Ik@G_AGiEOmDMSAU?O@IBI@OD[NQJWPe@\\}@n@q@f@_@VOFOFYHUDUD]@eABqA@_@B[BW@_@B]B]De@D_@Dg@Hq@J{@LK?I@M?O@q@?}AAiAAMAMAMCOEQIQKQMOOWYq@w@e@e@eBaBcB}AUQYYqBaCQSMOi@i@s@o@QQQMWQ_@SmAo@q@a@w@e@_@QeAg@YQSOWUcAgA}@}@QQKMW]WeA_@kBWsAYcB]oBGYIUM]]c@QSa@a@{@y@w@o@q@e@]UWQIGSScAkB_@o@We@MYKSMWIUQe@Ma@IWQs@Qs@Oo@Gc@G]Ii@Gg@Ea@Eg@GiAGcAMwBMeCGuAMqBIaBIaBGw@'},'start_location':{'lat':45.7860565,'lng':-75.1076384},'travel_mode':'DRIVING'},{'distance':{'text':'22.9km','value':22884},'duration':{'text':'20mins','value':1177},'end_location':{'lat':46.0074772,'lng':-75.054895},'html_instructions':'Turn\u003cb\u003eleft\u003c/b\u003eonto\u003cb\u003eQC-321N\u003c/b\u003e(signsfor\u003cb\u003eCheneville\u003c/b\u003e)','maneuver':'turn-left','polyline':{'points':'gvuvGtwdiMy@G[ESEUEUGSIQIOGMGUOMIKGWSm@m@oAoAcBgBQQ_AaAWUo@k@y@q@_@We@[s@c@yA{@sCcBIE_CuA_DmBq@e@USSQQSa@e@[c@Ye@Q[M[Q]KYOc@K_@YkAa@iBOq@gCwLyAaHQu@a@_BQi@[aAa@}@]s@g@{@m@{@QUc@g@[]EE]Ym@e@WQa@Uk@[qFqC}C{AcDcBaDaBiAk@w@a@e@Qe@OYI[Gc@Ig@IYCYCWAmBCiBC{BA}D?wG?oB?o@?[AMASAYC_@G[G]K_@Ka@OUI[MSK[OaAa@i@Uq@Wi@Sc@Mg@Mk@Ma@Ic@I]Cq@G}@C_AAi@@w@B{CR_Gd@oRzAmDXaAFy@DiABm@?YCm@Ec@Ge@Iu@O{A[aAUiDy@{A_@iBa@wA]gASc@Gc@E[A]Ae@Fa@Be@F[FYJ[Je@V[PQLa@Xe@b@_@`@WZW^SXm@x@mA|AmBhCuC`EyHfK{@jAg@j@WZYVURSPSPYVo@d@g@Zc@Xa@T_@R_@Li@Rg@Nm@Pm@Lo@Ly@Na@DYBk@DQ@_@?cDH{HJyCF_DBsB@iB?qBBq@?iA@_FDqD@kB@[M}@w@i@a@e@G_A?_ATyBr@wBd@g@Ji{@dAyFF}B?uKf@{EvCiEzCsFbEeAVi@F_A?qRiC}A?mANwAl@_ClAcD~B_E|BoDz@_H`BiBb@cAHeC@aEEqGEyCBy@HwCz@iJhCgCt@{@DqAIoA]eD{AgLqGuHuDiFsCkVmMyDuB}@o@kAcAqBwC}BuCcB}B}A{AqA_AwAe@_AWgAQoAI}BRqB\\w@BwAN}@GaBA_AQw@YiAq@gCyBuDoCsAwB_@{Aq@_BeB_BsAiAq@_A_@c@c@Yg@a@k@SuAc@cFgAwBs@a@[]o@[eA}A{IQg@SYUO]Ke@BgA^WBSCc@QWWOWOa@a@mB[cA_@m@i@e@w@_@q@Qo@KeCQe@G[QKG[W_@e@yEyDiCiBoDuC{@o@{@g@uAk@qFeBy@g@y@w@qBcCcAuAcA{A{BwCeAyBkByEu@qB{@yAq@aBy@sBYm@_@a@mAoAo@cAe@eAc@eAk@wBQm@Yg@SSQGUCm@Nc@@K?OEYO[KOEUAaATqCt@sCHq@LSRW\\eAbDa@~AaCrH]p@c@f@{@h@mAZgAJeAMQIiAi@WWaAuAs@w@k@o@e@[i@Se@Mg@?o@TwAjAkApA}DpCw@j@e@n@gAnCoB|D]lAgAbGUt@QVY\\{@d@_JtF{@n@u@l@w@`BSj@]xAKp@MhAGtAKtAQhAa@hAe@t@gAnA_Af@kAl@iAf@UFS?sGKc@H]N]b@uA|BwCvCyAxAsDhD{BfAgBnA}DhEeBfBmAf@w@Xm@Pq@@o@IiA[mCk@YC_@@g@Dm@IKIeAyAcAgBi@e@m@Io@Am@HaG|B}B|@a@Vc@j@k@v@s@dAy@|@KN[TUJm@Di@Ey@Ky@@_AJy@Nu@Dm@RULo@b@{BfA{@t@q@hAoAvCo@xB[z@{@xAY^e@\\u@b@aAZ'},'start_location':{'lat':45.8277223,'lng':-75.0682656},'travel_mode':'DRIVING'},{'distance':{'text':'2.6km','value':2633},'duration':{'text':'4mins','value':255},'end_location':{'lat':46.026179,'lng':-75.04019599999999},'html_instructions':'Turn\u003cb\u003eright\u003c/b\u003eonto\u003cb\u003eCheminduLacDoréN\u003c/b\u003e','maneuver':'turn-right','polyline':{'points':'wyxwGbdbiMOyEW}Ek@cFw@mBqBwAsNuGkDmCYo@u@aDq@gEaA{AuFc@gBa@cDt@wDDyDI_JPsAc@c@a@oFuImBeBaEgAuGo@_CyByAkCaEyD[cA'},'start_location':{'lat':46.0074772,'lng':-75.054895},'travel_mode':'DRIVING'},{'distance':{'text':'3.7km','value':3740},'duration':{'text':'7mins','value':430},'end_location':{'lat':46.058468,'lng':-75.043503},'html_instructions':'Turn\u003cb\u003eleft\u003c/b\u003e','maneuver':'turn-left','polyline':{'points':'sn|wGfh_iMg`@r@e|@qI{Tf@aMbBiL}AmLb@eQfFqIf@kIvAqDvN'},'start_location':{'lat':46.026179,'lng':-75.04019599999999},'travel_mode':'DRIVING'},{'distance':{'text':'7.5km','value':7468},'duration':{'text':'16mins','value':959},'end_location':{'lat':46.101137,'lng':-74.988226},'html_instructions':'Sharp\u003cb\u003eright\u003c/b\u003eonto\u003cb\u003eCheminduClubdesDouze\u003c/b\u003e/\u003cb\u003ePapineau-Labelle7\u003c/b\u003e\u003cdivstyle=\'font-size:0.9em\'\u003eContinuetofollowPapineau-Labelle7\u003c/div\u003e','maneuver':'turn-sharp-right','polyline':{'points':'mxbxGz|_iMSeEm@{BsAsAaK?sAu@yDg@mHiMyIiGcAiC{DoPoAkCoF}FgA{FaDu@_AaAy@kBi@eECwH_@eC}AuCcH{GgEl@cF?aBe@}CsBmDyDmJcFmDiEwB_FyAwB_F{Dy@_B}CgL?sFc@qAuAcBkEgB_AcAaBiE{AuJ_@qFs@qAyB_AsBaBcEmI]{ACgCd@gDB{CoAuE{DeGgA[q@_D[k@a@sAc@gHIuCHoGCiB]{@u@k@{AQcD?}@[[q@MeCT}E?aDe@qGCgIs@aE[a@k@?{A`@u@BaC~@oAJ_Ea@{CIqAHiGfBoE|@mD|@_@A'},'start_location':{'lat':46.058468,'lng':-75.043503},'travel_mode':'DRIVING'},{'distance':{'text':'0.2km','value':215},'duration':{'text':'1min','value':37},'end_location':{'lat':46.102838,'lng':-74.989468},'html_instructions':'Slight\u003cb\u003eleft\u003c/b\u003eonto\u003cb\u003eCheminStJean\u003c/b\u003e','maneuver':'turn-slight-left','polyline':{'points':'cckxGlcuhMkCt@gE`E'},'start_location':{'lat':46.101137,'lng':-74.988226},'travel_mode':'DRIVING'}],'traffic_speed_entry':[],'via_waypoint':[]},{'distance':{'text':'26.9km','value':26851},'duration':{'text':'43mins','value':2588},'end_address':'140CheminSioui,Lac-des-Plages,QCJ0T1K0,Canada','end_location':{'lat':45.99208,'lng':-74.983795},'start_address':'1-3CheminStJean,Lac-des-Plages,QCJ0T,Canada','start_location':{'lat':46.102838,'lng':-74.989468},'steps':[{'distance':{'text':'0.2km','value':215},'duration':{'text':'1min','value':35},'end_location':{'lat':46.101137,'lng':-74.988226},'html_instructions':'Head\u003cb\u003esoutheast\u003c/b\u003eon\u003cb\u003eCheminStJean\u003c/b\u003etoward\u003cb\u003eCheminduChenailduMoine\u003c/b\u003e/\u003cb\u003ePapineau-Labelle7\u003c/b\u003e','polyline':{'points':'wmkxGdkuhMfEaEjCu@'},'start_location':{'lat':46.102838,'lng':-74.989468},'travel_mode':'DRIVING'},{'distance':{'text':'0.4km','value':391},'duration':{'text':'1min','value':76},'end_location':{'lat':46.10336,'lng':-74.9854522},'html_instructions':'Turn\u003cb\u003eleft\u003c/b\u003eonto\u003cb\u003eCheminduChenailduMoine\u003c/b\u003e/\u003cb\u003ePapineau-Labelle7\u003c/b\u003e','maneuver':'turn-left','polyline':{'points':'cckxGlcuhMmBuAiFa@aAs@a@_K'},'start_location':{'lat':46.101137,'lng':-74.988226},'travel_mode':'DRIVING'},{'distance':{'text':'7.1km','value':7076},'duration':{'text':'9mins','value':550},'end_location':{'lat':46.067168,'lng':-74.931664},'html_instructions':'Turn\u003cb\u003eright\u003c/b\u003eonto\u003cb\u003eCheminduChenailduMoine\u003c/b\u003e','maneuver':'turn-right','polyline':{'points':'_qkxG`rthM?EnBwAfDyA`LcE|C_AbBoCR_BeA{G?aF[aCDaBb@cB`DyD\\cDtByCnBiFVmFx@mB_B}AgMgD}BmCOwBlAeDaCqFdGeFAqBmBsGJ_B`Vsa@zCoEdEkDjKe@`CqCbDeCxBuA`DiAx@u@^cAhA_If@oAhEoBlYeHnEuBzBeCtCkFtCwJrA}AlD{BxB{CrA{Gp@yBhAgB~@eA|ImAvC{A|CqCfJmNdIaQrCuDjF}D`A]'},'start_location':{'lat':46.10336,'lng':-74.9854522},'travel_mode':'DRIVING'},{'distance':{'text':'6.9km','value':6947},'duration':{'text':'12mins','value':736},'end_location':{'lat':46.03145139999999,'lng':-74.87946359999999},'html_instructions':'Turn\u003cb\u003eleft\u003c/b\u003eonto\u003cb\u003eCheminduBaluchon\u003c/b\u003e','maneuver':'turn-left','polyline':{'points':'yndxGzajhMfAsELuGvDoSl@gHh@oLy@eEUiEPqBtSef@vF{OtEmIrEsZhBsDzDoAlE}BjBwE`@aEOaCw@}EEyCFoCLuCF{AI}B[eBD_BTeCf@_CbAqBz@gB\\iBLyANmBFkCIoCM_CDcB^eC|@wC~@eCZeAj@gA`Am@jBo@hACrAPl@Xv@TdAExCUx@Cx@o@v@e@z@k@xAk@zAq@rA[xBB|@^dA^xACnB[`BYh@s@lAq@lAWfAs@|@gAxC}Cx@i@hAe@dAk@v@s@bAeAz@iAt@uA`Am@xBVjAVbBB|@SzA@|@DhA`@r@ZjAK|AQpBD`BAvAJxAb@r@v@\\dAr@t@nA\\lADvBMv@cBb@uADe@?S[g@KSGQAO@OHSFGF?H@XLt@d@'},'start_location':{'lat':46.067168,'lng':-74.931664},'travel_mode':'DRIVING'},{'distance':{'text':'3.4km','value':3375},'duration':{'text':'5mins','value':315},'end_location':{'lat':46.0029629,'lng':-74.88867689999999},'html_instructions':'Turn\u003cb\u003eright\u003c/b\u003eonto\u003cb\u003eCheminduLacdelaCarpe\u003c/b\u003e','maneuver':'turn-right','polyline':{'points':'qo}wGr{_hMRx@p@rBfBjB`CfAbBDtBZrBVxBrAfAxA|@fBTVhAbAhCnAvF~AnAt@xB~A~A|@vBZnAPfDYj@@n@^vGrA`C\\vCFz@L`CfAl@Hd@?b@HTPt@~@jA|AtAfAvBj@`CKnGpAdDDjAu@fE_BzAGrD^|GHrEt@nDDnDLxDHtDv@'},'start_location':{'lat':46.03145139999999,'lng':-74.87946359999999},'travel_mode':'DRIVING'},{'distance':{'text':'0.6km','value':611},'duration':{'text':'1min','value':70},'end_location':{'lat':46.003162,'lng':-74.896562},'html_instructions':'Turn\u003cb\u003eright\u003c/b\u003eonto\u003cb\u003eMontéeLafrance\u003c/b\u003e','maneuver':'turn-right','polyline':{'points':'o}wwGfuahMIrFDlAYvYE`EMfBHbB'},'start_location':{'lat':46.0029629,'lng':-74.88867689999999},'travel_mode':'DRIVING'},{'distance':{'text':'1.4km','value':1432},'duration':{'text':'2mins','value':124},'end_location':{'lat':46.003867,'lng':-74.9103669},'html_instructions':'Turn\u003cb\u003eright\u003c/b\u003eonto\u003cb\u003eCheminduTourduLac\u003c/b\u003e','maneuver':'turn-right','polyline':{'points':'w~wwGnfchM_ItFeDlBgBnA_BbBi@|@Wj@St@G|CJrBn@~QZhAXf@hEzEVfAbAxF^nBp@vBR`@FPr@b@bAnE'},'start_location':{'lat':46.003162,'lng':-74.896562},'travel_mode':'DRIVING'},{'distance':{'text':'6.8km','value':6804},'duration':{'text':'11mins','value':682},'end_location':{'lat':45.99208,'lng':-74.983795},'html_instructions':'Continuestraightonto\u003cb\u003eCheminSioui\u003c/b\u003e','maneuver':'straight','polyline':{'points':'ecxwGx|ehMNn@Dz@?nAc@rCSx@]p@m@t@wDfE[j@Ov@CbABn@l@rA`@nBj@tBDn@?n@GxDi@rBq@pBs@hD[r@eA|@Sb@Cl@BvBb@fC|@dCPjAB`DCdDLbGJjAf@vCr@jC`AfCb@bA|BzD\\x@VrBTd@x@vBLnAVrFAlDLzHAfEApBHnGCx@MhB@x@Nn@?n@Md@Sd@eAhD{AlCc@xDMhGDzBj@vEr@pC|@~AhB~Al@fBF|AQpGXnAZ|I@HjB|EBfEa@zAwBjEo@jCCpAr@tEcA~HXjCzBbJTlBC|An@rC[pFPtAxCbJXzARfJfAdGlBhFbHSbBgAp@a@bJ~DvDbJnDtD~AtJd@dFRzEaAzFd@fDlA|DlAbCtC`D'},'start_location':{'lat':46.003867,'lng':-74.9103669},'travel_mode':'DRIVING'}],'traffic_speed_entry':[],'via_waypoint':[]},{'distance':{'text':'132km','value':132082},'duration':{'text':'1hour49mins','value':6536},'end_address':'3480StRoseRd,Fournier,ONK0B1G0,Canada','end_location':{'lat':45.4000788,'lng':-74.9997274},'start_address':'140CheminSioui,Lac-des-Plages,QCJ0T1K0,Canada','start_location':{'lat':45.99208,'lng':-74.983795},'steps':[{'distance':{'text':'6.8km','value':6804},'duration':{'text':'11mins','value':682},'end_location':{'lat':46.003867,'lng':-74.9103669},'html_instructions':'Head\u003cb\u003enortheast\u003c/b\u003eon\u003cb\u003eCheminSioui\u003c/b\u003etoward\u003cb\u003eCheminduLaclaRouge\u003c/b\u003e','polyline':{'points':'oyuwGvgthMuCaDmAcCmA}De@gD`A{FS{Ee@eF_BuJoDuDwDcJcJ_Eq@`@cBfAcHRmBiFgAeGSgJY{AyCcJQuAZqFo@sCB}AUmB{BcJYkCbA_Is@uEBqAn@kCvBkE`@{ACgEkB}EAI[}IYoAPqGG}Am@gBiB_B}@_Bs@qCk@wEE{BLiGb@yDzAmCdAiDRe@Le@?o@Oo@Ay@LiBBy@IoG@qB@gEM{H@mDWsFMoAy@wBUe@WsB]y@}B{Dc@cAaAgCs@kCg@wCKkAMcGBeDCaDQkA}@eCc@gCCwBBm@Rc@dA}@Zs@r@iDp@qBh@sBFyD?o@Eo@k@uBa@oBm@sACo@BcANw@Zk@vDgEl@u@\\q@Ry@b@sC?oAE{@Oo@'},'start_location':{'lat':45.99208,'lng':-74.983795},'travel_mode':'DRIVING'},{'distance':{'text':'3.2km','value':3188},'duration':{'text':'5mins','value':279},'end_location':{'lat':45.992446,'lng':-74.88206799999999},'html_instructions':'Continueonto\u003cb\u003eCheminduTourduLac\u003c/b\u003e','polyline':{'points':'ecxwGx|ehMcAoEs@c@GQSa@q@wB_@oBcAyFWgAiE{EYg@[iAo@_RKsBF}CRu@Vk@h@}@~AcBfBoAdDmB~HuFvD_CjAkAlByAnC{AhBuAxDeIj@{A\\cBDwAK{A[_EBIlAoCrJaUzAoCpKqFnBiDb@g@^]\\]^KhAK^B'},'start_location':{'lat':46.003867,'lng':-74.9103669},'travel_mode':'DRIVING'},{'distance':{'text':'0.5km','value':467},'duration':{'text':'1min','value':44},'end_location':{'lat':45.9901152,'lng':-74.87725879999999},'html_instructions':'Turn\u003cb\u003eleft\u003c/b\u003eonto\u003cb\u003eRueConrad-Schmidt\u003c/b\u003e','maneuver':'turn-left','polyline':{'points':'y{uwG|k`hMfDyNlBwG`@i@hAoAnAu@'},'start_location':{'lat':45.992446,'lng':-74.88206799999999},'travel_mode':'DRIVING'},{'distance':{'text':'40.8km','value':40813},'duration':{'text':'28mins','value':1703},'end_location':{'lat':45.6726152,'lng':-74.9491067},'html_instructions':'Turn\u003cb\u003eright\u003c/b\u003eonto\u003cb\u003eQC-323S\u003c/b\u003e','maneuver':'turn-right','polyline':{'points':'gmuwGzm_hMd@nBf@~Bh@fC^bBT`Ab@bB`@pAj@`BdAjCn@pAx@tAl@bAx@jA`AjAz@x@jAjAnAdAvBhBvHtGxD`DlBfBHFjB`BlGlFnHjGlD~CfAfAr@t@r@z@pDlFzBxEdB`Eb@pAj@zAdAfC~@~Bl@xAr@nAZd@r@`An@r@f@f@j@d@d@^h@XvBfA|BfAxC~AhBz@lAn@f@Xp@^fB`Ad@RpAp@hAh@bBv@dBr@dCx@lA^dCh@bBXxATbBPdBNjAD|@BjA@fA?dAAbACbAGdBKhCSbBMdDS^ExBS\\EdBQ~BUpFa@pBCxABzBPd@Fb@Hx@NjAZhA`@v@^^Pp@\\|@h@b@XlA|@x@t@x@z@vCzCxAvAt@t@vAzAx@t@~A|Az@r@JHl@`@p@^XPx@^z@^zAl@LDRDZF^Fb@FRBv@B`ADz@?|AEjAG|AGpF]hCMdCOr@EhAGjCQxEWdXaBrACzAAj@AT?h@?|B@jDRZ?xCZnCf@~Cr@|OrDzFrAnInBxA\\XF~Ct@fCl@pBd@|IrBzD~@`Dr@jDz@~Cx@fAZd@PnAh@bAf@v@d@nA|@r@n@jAhAd@h@^b@n@x@h@x@l@z@pArBHNJNvBjDb@n@`@f@b@h@d@`@f@b@b@Zt@`@|@`@\\L`@LbAVl@FVBT@n@@dAA`DElGIlKM|CElDGPApDGfDKT?vA?f@Aj@?xA?|@Bt@DP@VBj@FTDVDv@P`@JxEtAbPzEnCv@zu@tTjDbAfAVz@N~@Pn@HZDfBJr@Br@BpBALAlAA|AE`@?x@ClKOzCEfBAlB?zEFf@@p@BvCLpH`@lMr@vDRhFVhDRzBRVDhANVBXDp@NhATn@PjDz@lSjFvBf@hAT`BZhAPxN`Ch|@dNnsA~SvWbE`G~@fIpAhIpAbNxBhInAtB^xJzA~Dn@bBX|B`@rCd@xDl@vCd@l@Pf@Rp@Vv@b@\\Tv@l@p@r@n@x@l@dAl@lAl@bB`@|AXtARtANlAH`C@h@?nBCz@KhBQpC_@zFUnD[lF_@`GEn@q@zLw@nLUdE{@bNc@pHs@zKe@|HEv@CZA^?h@@fABnABz@TzBPlAP`AXlAV~@j@zA^`Ab@v@f@v@b@l@l@l@`@`@\\\\f@\\\\T^Pd@Tj@Pt@Tp@L|B^rB\\xB^|Dl@jDj@hEr@hG`AbC`@fG`AdJxAlJzAtHnA`Ep@bALdAHjA@nE?v@Bv@Dz@Fp@Ht@Lv@PtKnClEfA|Bf@jB`@\\FlNvBbIlAxF~@zGbAvDn@`K|Ax^zFj@Hd@Df@Bt@?t@?r@CtDe@jEo@tHeA|@KrCa@^ErAQtHgAhB[rBWrBWp@Kl@KfA[l@QtAk@p@]|AaAt@k@d@a@t@q@p@q@zAgBdBaClGsIhDwEfCkDl@q@p@o@XSVORMVKj@S^KVIXE\\Eb@Cd@AfBEhBAzACnBA~CI~@Av@AnLObIKhGK|LSrBC|@?v@Bz@Bf@BlAJfALfAPpCf@`Dn@nEx@`F`AjFbAhF`AlFdAdARdARfAVlATXDX@b@@XC|@QZOZQ^Uj@i@\\a@Ta@Ra@L]J]Vs@f@eB`@sAlCkINa@Pa@Te@Zi@LQ^i@\\[Z]`@Y`@[^O\\Oj@QnBc@jAY~D{@d@K`E}@f@KjFmAdASd@Eb@Eh@?d@@`@@N@^Fp@Nh@NjAf@dAb@zFbCfBp@v@Tj@LZB^BV?V?b@?b@E`@G\\Ih@S~Au@|@s@d@e@\\e@T]Va@Rc@Pa@Pa@J]nAwDp@sBf@_Bz@mCl@iB`AaDjAqDt@}BbAaDv@cCj@aBn@gB~@_CbA{BfBuD~D}HjBwD|@cBdAoBv@kAbA{AtBoCpCqDxDcFhAwAvBuCvAoBdA{Ar@qA|@eBjA}Bn@sA|@cBbAaBbAuA`@e@j@o@v@y@~BqBfA_AbB{AnBiBvA_BvBmCtAoB~@kArAmBv@}@^c@`@_@l@_@`@Q\\M`@IXCVELA|@Bt@JZHXJh@XdBlAjLhJfGrErCvB\\V~CdC^Xj@^fAn@l@VLFvAj@zCbAvBp@zAj@DBfC`AlBr@RLt@f@zA|@`@VnBlAnE~CtCfBbBz@tAn@ZNzDtA'},'start_location':{'lat':45.9901152,'lng':-74.87725879999999},'travel_mode':'DRIVING'},{'distance':{'text':'29.2km','value':29171},'duration':{'text':'17mins','value':992},'end_location':{'lat':45.6548896,'lng':-74.58667249999999},'html_instructions':'Turn\u003cb\u003eleft\u003c/b\u003etomergeonto\u003cb\u003eAutoroute50E\u003c/b\u003etoward\u003cb\u003eMontréal\u003c/b\u003e','polyline':{'points':'{lwuG|nmhMXHLkB~@yK^aEJuADu@B}@Cs@I{@[uAUg@Ue@_AeAmAuAaAkA[s@[_AOy@Mw@KiAEoAEsACcC?yB?_A?qA?YAQAQCSFeBJmDDoCDeA@e@JwDJ}CTqFL_CRwDJgBRyCN_CP}BRcCTsCT}BZwCXwCV_C^{CJy@hAqI^mCJ}@D_@Bg@Jw@t@mFx@_GlCgSn@}FpAcLrAmJtAiKrA_Kl@wEtPgnAlDkUvDcTlC{MlCoMpD{O`@iB`AaE|BgJ\\yA`@iBlAeFzAgGRy@j@aCPq@`@{AVeARw@H[F[~@yD`B_H|@}Dx@mDj@oCN{@Jm@\\iBRkAL{@DWp@oE\\uBVgBTkBZyBVwBP}ALaAH}@LqAHgANqBHuAHsAFeAHwAD}@D{@FsBHkCJsFDsCBuB@wDBuABiB@gA?w@?oA?wB@iA@gBFeHBiCF_J@{BD{FDqGB{BBcB?GFiDBuCF{K@gB?{A?{@?gAHuGJsMJwLFcGBcEDgCBoDLkM@eCD}FDqFBqDF}HRwZBcGL_OBgA?]@i@\\aVhFwdDPyJ@eABeARiO\\_S^}SRuMFyD?[LcIFwDBeAPmHDwA@_@F}ADgAHuALyAJ}ALqAN{APcB\\mCf@wD?CJs@D[F[DY@K@Kv@{Eh@mDh@kDdDkU`Gs`@l@wET_CReDFuDCwDQaEWaEMkBa@wFQoCOoBOeBc@{F}@yNSoEI_E?MCaE@mDHeENqENcENgEJmD`@iKBq@@GB{@DaBFqG?aEEoDEoCKqCA[GyAIkB]cGg@gFs@iGaA{GiAcGmAeGgB{J{A{Iw@qEqCiTk@sEmEo\\qAmJ{A_KiAgGgBwHcCwHuL_]cBiFmDqKc@oAK]Qe@Se@q@oBoBmGWcAOq@CKI[Ms@Y{B[cCQaBMqBEo@Eo@GsAG}C@yCHqDv@eVZ_I@}@D{@FqAFoBLiDTgG\\kJLkBTiD`@cEh@mEh@}DnAiHnEeUH_@f@eCh@uD`@{CRqBTgCXaFXgIVsI~@{\\DiA?I?AB{@dAs]PcJ?aGCgI_@uR_@eLIgDc@aNe@gN[eO?uABmCRaHHsBv@{O\\{Fx@iN?C@ERuE^kG'},'start_location':{'lat':45.6726152,'lng':-74.9491067},'travel_mode':'DRIVING'},{'distance':{'text':'0.3km','value':302},'duration':{'text':'1min','value':14},'end_location':{'lat':45.6541615,'lng':-74.5829281},'html_instructions':'Taketheexittoward\u003cb\u003eQC-344\u003c/b\u003e','maneuver':'ramp-right','polyline':{'points':'a~suGtuffMPiAp@_Hf@uEd@kD'},'start_location':{'lat':45.6548896,'lng':-74.58667249999999},'travel_mode':'DRIVING'},{'distance':{'text':'3.8km','value':3754},'duration':{'text':'4mins','value':234},'end_location':{'lat':45.6221447,'lng':-74.594695},'html_instructions':'Keep\u003cb\u003eright\u003c/b\u003eatthefork,followsignsfor\u003cb\u003eQuebec344E\u003c/b\u003e/\u003cb\u003eGrenville\u003c/b\u003e/\u003cb\u003eHawkesbury\u003c/b\u003e/\u003cb\u003eQuébec344E\u003c/b\u003eandmergeonto\u003cb\u003eQC-344\u003c/b\u003e','maneuver':'fork-right','polyline':{'points':'oysuGh~efM\\aAFMFKFIHIJKJGl@[NBdC^\\Dx@P`APxDt@fDh@dCd@|FdA|HxArCn@zFpAbCf@bATlA\\bBh@lA\\XH~DbAb@LlATrCl@t@PtE`Afs@rMjF|@B?p@PdAX\\LXJp@Xf@X`@Tr@h@d@^`@ZPLvAfAr@h@hA|@`NlK~@r@LJLJZXPR^b@VNf@h@PV'},'start_location':{'lat':45.6541615,'lng':-74.5829281},'travel_mode':'DRIVING'},{'distance':{'text':'1.3km','value':1348},'duration':{'text':'2mins','value':94},'end_location':{'lat':45.6124689,'lng':-74.6045843},'html_instructions':'Continueonto\u003cb\u003eJohnSt\u003c/b\u003e\u003cdivstyle=\'font-size:0.9em\'\u003eEnteringOntario\u003c/div\u003e','polyline':{'points':'kqmuGzghfMRVTb@`@b@NNbCnBvAfAlCvBtCzBr@j@tCvBx@n@fBpApAbAzAfAhAz@tAbA\\Vh@`@^ZRNRRNN\\`@TZ\\p@N\\JVHT\\|@VjATbAZhA\\|@Zn@\\d@Z^^\\ZT^Pf@P'},'start_location':{'lat':45.6221447,'lng':-74.594695},'travel_mode':'DRIVING'},{'distance':{'text':'0.7km','value':733},'duration':{'text':'1min','value':74},'end_location':{'lat':45.6095841,'lng':-74.6127731},'html_instructions':'Turn\u003cb\u003eright\u003c/b\u003eonto\u003cb\u003eChenailBlvd\u003c/b\u003e','maneuver':'turn-right','polyline':{'points':'}tkuGrejfMNJLJPPBDDXDXJn@Lv@Jh@ZrDVjCLzAPpBXbBP`ALh@b@lBb@~ADNp@tBFPd@lATb@NXh@~@JNJTj@t@JB'},'start_location':{'lat':45.6124689,'lng':-74.6045843},'travel_mode':'DRIVING'},{'distance':{'text':'10.7km','value':10657},'duration':{'text':'11mins','value':666},'end_location':{'lat':45.519625,'lng':-74.65215859999999},'html_instructions':'Continueonto\u003cb\u003eON-34S\u003c/b\u003e','polyline':{'points':'{bkuGxxkfMb@j@Z\\RPXP\\VLJdAr@bAp@z@x@xA~@bAj@bJnFjIjF`L~GB@l@TXL^RNDNBP@R@^BzAB~A@hBBv@BZBVDb@JRFTHp@\\n@`@f@X^Vp@b@r@d@nAt@lAr@zBbBPJn@\\~@d@p@VNFFBjARPBd@@fACLCh@Ip@O`A]p@W|Ao@NEnIwDhAe@zDeB\\Qr@_@z@]z@]TKLEHCNG\\Ih@MTEb@E`BGb@@N@F?N@L@VDZHj@L\\LxLpE~JzD~H|CrJtD`JpDtHpCxAj@fBr@|@\\fBp@rAj@zAj@dBn@nFtBfJvD~XtKjJlDxGlCfPxGrMnFfMdFdJtDFBdAd@XJf@Tr@XpCjAtAl@r@XhFrBv@XlAh@x@\\NFfBx@pAj@pAh@n@XtCjAHB|B~@xBx@tAh@n@VnAh@zAl@jCdA~@`@rB|@`CdAtAl@zAn@tAj@bCbAjAf@hAd@|@^|CtAzCpAl@Xt@Z\\N|@^rAj@dBr@fAb@~@`@dC`Al@VFBzClAv@ZTJbCdANH|@`@nClA~DfBfBt@bCfAxB|@hAh@zFdCbBp@~@b@z@\\dDtAtBz@RJvAj@x@ZJNZDt@Zt@Xh@R'},'start_location':{'lat':45.6095841,'lng':-74.6127731},'travel_mode':'DRIVING'},{'distance':{'text':'23.7km','value':23690},'duration':{'text':'18mins','value':1071},'end_location':{'lat':45.44086679999999,'lng':-74.90810689999999},'html_instructions':'Turn\u003cb\u003eright\u003c/b\u003eonto\u003cb\u003eMainStW\u003c/b\u003e/\u003cb\u003eRegionalRd10\u003c/b\u003e\u003cdivstyle=\'font-size:0.9em\'\u003eContinuetofollowCheminComté10/RegionalRd10\u003c/div\u003e','maneuver':'turn-right','polyline':{'points':'spytG~nsfM_@xB_@|Ba@|BmFr[uFz[_C~NaAbGsDfUaCtOsGpb@eD~ToBtMeIbj@m@nEgEfZKv@I~@Gl@Cz@@v@Dz@?BNx@\\bAR\\TXRRNNZX\\PZLvAf@|XzJbDjAjGzBvBt@f@XVN@BNLJLV\\T`@Vl@Pv@Nt@NtAFn@DZz@zJt@~I\\|DbAzK\\zCRpA`@dCVjAHXl@zBLb@lAbD~B`GlA|CnA~C|AlE^rA`@bBn@jDnBrKXdAPh@r@lBdAhCj@nAd@~@fAfBj@v@p@`AlHbJdBvBpCvCbDxCnOvOjDjDhCbD~B~C|EvG`AxAbFxHpAnB|DnF|FnHvW|\\x@`A~AvBl@v@dAzA|@rAnFzI\\j@b@p@hBtCbJxNnCtElCnFxBfE`CtE|ClGnB|D|B|EnB|DbArBhAtCN^Ph@Tz@f@hB\\tAlBhInAxF`ArErA~Fh@`Cj@xBbCdIrC|JXbAjAnFv@lEjArGzBfMl@nDzAzHj@zBx@jDpAhF|@fD~@tDj@xB^xA|AbG\\tAPjANfAnApKF^NlAx@`ExIn[`@vA`@zApAxEdBlGd@|Az@~CLn@Nt@f@`Ez@nI|@pIHp@Fj@PtAPv@Nl@x@~B~AlEvA|D|AdExAfE|CjIvCnHvGnPf@dA`JvUhOt`@jDfHp@nB^bBRfAvAdIVrA\\~A^~A`CdKxHtY~C`LpIpYbE|MdH`XtBvIdDxUlAlKl@xDrCnLzBtJNp@^bBp@jCt@`DlAzEZrAXxANz@NfAXjCbAdKx@lI^~Df@~E|@|JLzARxB\\dCfAhGl@fDpB`KrBnLV~Aj@fFXjDRvBXrCJlAPhCJfA@ZF`BBnBBpA@nA?dAFhE@|B@jED~GBvDHdE@b@H~CNnDNfBLdA'},'start_location':{'lat':45.519625,'lng':-74.65215859999999},'travel_mode':'DRIVING'},{'distance':{'text':'2.0km','value':1978},'duration':{'text':'2mins','value':107},'end_location':{'lat':45.4386443,'lng':-74.93309769999999},'html_instructions':'Slight\u003cb\u003eright\u003c/b\u003eonto\u003cb\u003eRidgeRd\u003c/b\u003e','maneuver':'turn-slight-right','polyline':{'points':'mdjtGtnehMX|JtBtb@LdIMxJMfE@lB`@pLJ`JTdJLnB|BpLTlBrApS'},'start_location':{'lat':45.44086679999999,'lng':-74.90810689999999},'travel_mode':'DRIVING'},{'distance':{'text':'6.1km','value':6096},'duration':{'text':'5mins','value':318},'end_location':{'lat':45.424565,'lng':-75.007784},'html_instructions':'Continueonto\u003cb\u003eCountyRd16\u003c/b\u003e','polyline':{'points':'ovitGzjjhMlBbSXlEIvCOhD?dCTrBdClK`AtFt@hGpAlMTrBFr@TnBj@dG^pDT~BJlAJvAHnA?xBA`DOnE?jB@ZFb@xArIhAvEp@rCHp@FhA@fC@vNTfOf@lKxBn[v@zJnAzMh@vJ|A|Nl@fI`@jChD|O~AvJ~Itf@rFpYjEdUDPnDnQvCdO'},'start_location':{'lat':45.4386443,'lng':-74.93309769999999},'travel_mode':'DRIVING'},{'distance':{'text':'1.3km','value':1321},'duration':{'text':'1min','value':78},'end_location':{'lat':45.4133875,'lng':-75.0023314},'html_instructions':'Turn\u003cb\u003eleft\u003c/b\u003eonto\u003cb\u003eWorleyRd\u003c/b\u003e','maneuver':'turn-left','polyline':{'points':'o~ftGr}xhMt[{N`B_@hEInASf\\gO'},'start_location':{'lat':45.424565,'lng':-75.007784},'travel_mode':'DRIVING'},{'distance':{'text':'0.3km','value':308},'duration':{'text':'1min','value':39},'end_location':{'lat':45.412306,'lng':-75.005967},'html_instructions':'Turn\u003cb\u003eright\u003c/b\u003eonto\u003cb\u003eConcessionRd14\u003c/b\u003e','maneuver':'turn-right','polyline':{'points':'uxdtGp{whMfA~FnCvM'},'start_location':{'lat':45.4133875,'lng':-75.0023314},'travel_mode':'DRIVING'},{'distance':{'text':'1.4km','value':1409},'duration':{'text':'2mins','value':135},'end_location':{'lat':45.400433,'lng':-74.9999349},'html_instructions':'Turn\u003cb\u003eleft\u003c/b\u003eonto\u003cb\u003eWorleyRd\u003c/b\u003e','maneuver':'turn-left','polyline':{'points':'}qdtGhrxhMx`@{Q^G`@?b@@NFf@?XGta@uQ'},'start_location':{'lat':45.412306,'lng':-75.005967},'travel_mode':'DRIVING'},{'distance':{'text':'43m','value':43},'duration':{'text':'1min','value':6},'end_location':{'lat':45.4000788,'lng':-74.9997274},'html_instructions':'Continueonto\u003cb\u003eStRoseRd\u003c/b\u003e\u003cdivstyle=\'font-size:0.9em\'\u003eDestinationwillbeontheright\u003c/div\u003e','polyline':{'points':'ugbtGplwhMdAg@'},'start_location':{'lat':45.400433,'lng':-74.9999349},'travel_mode':'DRIVING'}],'traffic_speed_entry':[],'via_waypoint':[]},{'distance':{'text':'74.2km','value':74170},'duration':{'text':'56mins','value':3336},'end_address':'200SussexDr,Ottawa,ONK1N5A2,Canada','end_location':{'lat':45.4367889,'lng':-75.69772739999999},'start_address':'3480StRoseRd,Fournier,ONK0B1G0,Canada','start_location':{'lat':45.4000788,'lng':-74.9997274},'steps':[{'distance':{'text':'6.8km','value':6770},'duration':{'text':'9mins','value':520},'end_location':{'lat':45.3441999,'lng':-74.96588989999999},'html_instructions':'Head\u003cb\u003esouth\u003c/b\u003eon\u003cb\u003eStRoseRd\u003c/b\u003etoward\u003cb\u003eConcessionRd16\u003c/b\u003e','polyline':{'points':'oebtGhkwhMh^kQv@y@Ze@v@q@l@Sv_@kR``Agf@tAs@d`@yRv@w@hAwCZe@ZWh[gOTMb@StBcAhTqK`p@k[lcAaf@'},'start_location':{'lat':45.4000788,'lng':-74.9997274},'travel_mode':'DRIVING'},{'distance':{'text':'2.3km','value':2282},'duration':{'text':'2mins','value':116},'end_location':{'lat':45.3356244,'lng':-74.9919331},'html_instructions':'Turn\u003cb\u003eright\u003c/b\u003eonto\u003cb\u003eConcessionRd20\u003c/b\u003e','maneuver':'turn-right','polyline':{'points':'ghwsGxwphMHTvl@d{CHRHPPRHLLJVNzCvA'},'start_location':{'lat':45.3441999,'lng':-74.96588989999999},'travel_mode':'DRIVING'},{'distance':{'text':'1.0km','value':1035},'duration':{'text':'1min','value':53},'end_location':{'lat':45.3275531,'lng':-74.9858885},'html_instructions':'Turn\u003cb\u003eleft\u003c/b\u003eonto\u003cb\u003eCountyRd8\u003c/b\u003e','maneuver':'turn-left','polyline':{'points':'srusGpzuhMDYRw@V{@Xo@Xk@d@w@b@g@RUVUdAs@jh@mW'},'start_location':{'lat':45.3356244,'lng':-74.9919331},'travel_mode':'DRIVING'},{'distance':{'text':'58.4km','value':58427},'duration':{'text':'32mins','value':1942},'end_location':{'lat':45.4191805,'lng':-75.6516077},'html_instructions':'Turn\u003cb\u003eleft\u003c/b\u003etomergeonto\u003cb\u003eTrans-CanadaHwy\u003c/b\u003e/\u003cb\u003eON-417W\u003c/b\u003etoward\u003cb\u003eOttawa\u003c/b\u003e','polyline':{'points':'e`tsGxtthMTGq@kDGe@CSAUAY?W@UDUDMFSDIDGBKFIFIFEDEFEHENEREP@J@LBJDHDJJJJLPJTHTDRFTD\\N`AXzAbCdWbA`K`ArKv@jIfCtWz@~ILrAfAhKNvAl@hEb@zCfAvGhAdGfBnIhApEfB|GtEvO`BrFhItXbAlDXdAfEzOvApF~EvRrBvIlEzRtCdNtBnKrTbiAzEjYbBzLf@`EbAnIZrCn@bGVfCTdCj@nGR`CXnDvAzTP~CPjDTfGn@hPDjAj@lNZfIPrEHdCt@dR`@tKJxDBvA@bB@`B?rB?nCAz@A|ACrBE~AEtAGrBEv@EfAI`BIrAStCQtBMrAO|AUvBUlBWpBUxA]|BmB~Kc@pC_@~BGf@Id@Y|BWvBIv@Kv@AJYpCWxCQpBOzBUfDMvBK|BKpCQtFGxCCvAAxACtCA|C@vC@vB@zABrBJxEHlDHxBHxALvCTvDRtCTtCVpCVlCTrBRzANpAR~ANrAVrB\\nCRvBRvBNrBNrCLtCHvCB~ABtA?|@@zBAvAA|BExBExAErAE|@KtBWtDKvAOvAOtAOxASvAYvBk@jD_@nBk@jCe@nBc@dBk@jBs@|BWv@m@dBWp@q@bBoArCoAfCgApB{@xAm@`AiAbBoAdBqAdBeAvAcAtAcAtA[d@_BzBaBzB}AtBmCtD_BzB}AzBaAvAiAhBgAtBu@|Ac@`Ae@jAe@nAk@dBUz@g@jBa@fB]`BWvAIf@UvAYxBSpBOvBKxAGrAG~AEzAAxB?vB@tBB~@DvABx@FdANnCPbCPbCXvDTrDVrDTxDTpDJzBLrBJzBTjFPxDLtCLrDHxBF~BHtBd@xRPtGHzCFrBJtCLtDJ|BJnCDbAHzALpCTpETrEPvCNxBTnDNzBVpDd@hGTxCZpDXjDRvBRvBRtB`@bEb@tEVtCXtCPtBNrBJ|AJvAHxAHxBHrBD`AB|ADtBBxB@vA@zA?zAAvBCzBCvBEtAG~BGvAGxAGxAMzBOpBUtCQrBQ~ASnB_@rCc@hDk@rE[lCYrCUtCKpBKnBI`CEtCAbA?zA?n@@V@jBBzADtAFbBNlCJdBRfDXvEb@dHj@hJV~DFpAt@xLH|AFvAHxBD|A@XBtADrB@zAB|C?tBA~AAzACvBEtBG`BErAK~BMnCIvAOxBUlC]pD[jCQxAYrBYpB]pB]pBWtAa@lBs@hDo@hCy@|Ci@hB_A|Cy@~BYx@a@fAo@`BmAtCoAnC}A|CeB~CyAdCuAtByAtBaB~BeH`KeK~NaE|F_BzB}CpEaChD_AxAiAlBMTa@b@_ApBGJc@bAcAhC[|@w@dCi@hB]pAe@rB}@pE]zBQrAOdAKz@Iz@[pDGz@IbBEp@IzBCz@EvDAxD?vC?hJ?nLGrGGvDItCMvCIxASxCMfBa@`FUtB]|Cy@zF[pB_@pBUtAg@tCQx@Q|@w@`DcA~Ds@fC}@fDmAtEyArFe@fBy@hD{@dEm@jDq@fEg@rDc@nDYvCQtBQvBKxAIzAIxAKxBCz@G|AE|AEjBAfAAvAA|AA|B@vATt[NdSDpF^zc@NrSJxS@pGCrGCxEKtFIrEIzCKzCOxDSrEOvCUvDOxBOvBQtBM|AQtBMvAO~AOtAk@jFc@rDYtBsA`KWtBuA|Js@jFw@lGo@lF_@~Cg@`Fy@jIUdCy@vIeAhL_D|\\u@`IsCf[aLbnAg@rFc@nEu@lIa@pEc@pEq@nHu@hIgAdMMvAOzB]pEcA`OOtBu@jMiBj\\w@fNoAlU_AjPsB|^CZYxFi@nJUvDk@~JE`AG~@QjCEj@KvAMzAGx@K|@K|@QvAIv@Mx@EZe@rCm@dD}@dEk@|Bo@|Be@xAWz@[|@o@dBiAvCe@jAmElKaEtJmCrGsB~EoArCq@`ByAlDmAtCkAtCoAvCsA`D_A|BwAhDaA|Be@jAQh@]~@Sr@Ur@Uz@Ol@K`@Ov@YrAO|@SpAM~@Kt@I|@Iz@Gv@Gz@G~@Ez@IbB[dHM|CsAdZ_AtS{@~RQzDYnG_@rIw@`Q]xHi@pLq@lOo@pNa@bIk@|JWnEg@zHc@xGSlCWrDiAdNaApLq@tHmCfXaDj\\m@hGOpA]jD[dD[hD[dDgArKIr@}@jJw@hIiA`L{@~Im@bGi@tFy@~Hm@nG]hD_@vDYtC]nD]jDs@bHa@bEOzAKp@MbAS|AYfBMx@Kl@YvAYpA[pA[nAQl@W~@]fAWv@Wr@Sh@Yt@Wp@_@x@]r@Wf@c@`A]n@]l@k@bA[h@a@n@]f@W\\U\\a@h@a@j@_@f@]b@a@h@k@t@o@z@i@t@m@x@i@t@m@v@e@p@e@p@o@bAu@jAm@bAq@nAq@jA_@r@w@~As@xAi@hAQb@[r@}@tB{@vB_A|BOZGNWl@o@zAa@~@Yp@Yl@Wh@Q\\Wd@KRMVIJo@hAa@p@aA~AaAvAk@v@m@x@e@j@q@x@s@t@aAbAs@n@q@n@g@b@e@`@s@l@u@j@m@^e@\\qAv@iAt@s@`@w@^i@Tk@VoAd@}@\\y@VUFOD[JaA\\m@Ra@JQD}@PcAPk@J_AJ}@Jk@Fi@Bg@Dm@D_ADsAFuADsAHiADy@FgBJu@F_@Da@Fw@Ji@JoAZuA`@eA\\}@\\SJyBjA}@j@w@h@w@l@k@b@[V_At@qCzB}BfB{AbAUPg@Xi@Xe@Ti@Ti@Vk@Ta@Lk@Ps@Ru@Pm@Li@Lg@Lq@Ne@Le@Jk@Lo@Ts@Vk@Tq@\\g@Zm@f@UNQNs@r@a@`@WXSVSXSZOVQV_@n@U`@Sd@o@xAABO`@Qd@IVIRI\\K`@Qx@Or@M|@Id@CZOtACZEf@E^Gv@Q~CS`DEr@Ed@SfBKz@Kn@Id@Kh@Kf@Qp@K\\K^Ur@[|@Wl@Sb@k@fA_@p@Yb@QXW`@W\\STORQRYXSRWTSRUPg@^]TYNMFs@ZSHi@R_@J_@N_@HUD[HUBWDg@FqALmAJoANUBSBQBKBIB[Ha@Lc@Ne@ROH]P_@Rc@X_@Z]\\SPKHQRORQTUZWZU`@W`@Wn@Uf@O\\Od@Yv@K^Oh@IZGXMr@Mz@Gb@Gb@Gh@C`@C`@Et@C^A`@?\\A\\?V?N?X@T?^@\\@^B^B`@Bb@D\\B\\D\\D\\F^D^Nr@Nx@Pt@Pt@f@nBf@pBhAlEfAdFPz@TpAPdANbAT|AFh@VlBv@vIHdADl@Dx@RxEJvCJjED|A@T@\\@ZF|Af@~OHrCHpDp@fTFrB^vLLbEJtDN~EFtBFtBBv@Bv@@J@T@ZB`@'},'start_location':{'lat':45.3275531,'lng':-74.9858885},'travel_mode':'DRIVING'},{'distance':{'text':'0.3km','value':323},'duration':{'text':'1min','value':21},'end_location':{'lat':45.4195722,'lng':-75.65561389999999},'html_instructions':'Takeexit\u003cb\u003e117\u003c/b\u003etoward\u003cb\u003ePromenadeRiversideDrive\u003c/b\u003e/\u003cb\u003ePromenadeVanierParkway\u003c/b\u003e','maneuver':'ramp-right','polyline':{'points':'{|etGpuvlMCnAAF@H?RB`@BfADvA@p@?T?P?R?ZCVAXCVCRETG\\EVWbAI\\CHEREVCLAL'},'start_location':{'lat':45.4191805,'lng':-75.6516077},'travel_mode':'DRIVING'},{'distance':{'text':'3.0km','value':2999},'duration':{'text':'5mins','value':323},'end_location':{'lat':45.4383521,'lng':-75.67768509999999},'html_instructions':'Keep\u003cb\u003eright\u003c/b\u003e,followsignsfor\u003cb\u003ePromenadeVanier\u003c/b\u003e/\u003cb\u003eVanierParkway\u003c/b\u003eandmergeonto\u003cb\u003eVanierPkwyN\u003c/b\u003e/\u003cb\u003eOttawaRegionalRd19\u003c/b\u003e','maneuver':'keep-right','polyline':{'points':'i_ftGpnwlMIh@AD?FAHARANAJANANCLCHAHEJADCDEHEFEFIHIFGDEBCBCBABIPSJOFQJOLC@WRYZY^c@p@GJIPOVQVYt@u@tBi@bBeAlDGNGLELGJINEFc@l@WZa@^YVQNOJOHOHQHSHSFODK@ODI@IBYB{@LiANO@cBZ}ATWDSBWD]BW@UBS@a@D]Fk@Fo@Hi@LAAgCj@aDv@y@Pu@Pg@H[Fc@HC?yAVo@JQBu@Py@P{AXc@Le@L_@L_@Ni@T[NWL_@RMN}@h@g@d@WREDs@v@Y^QTQRU\\[d@MNOT]h@OVINm@fAk@fAGNMVQb@ELa@`A[bAO^IRQj@Oj@Qx@YlACLUdAQ`AO`AQrAK|@MrAM~AW~DOpBMjBG~@Gx@IfAE^Ed@Ir@?@It@E`@GZGXEPENELIP'},'start_location':{'lat':45.4195722,'lng':-75.65561389999999},'travel_mode':'DRIVING'},{'distance':{'text':'0.5km','value':462},'duration':{'text':'1min','value':73},'end_location':{'lat':45.4396873,'lng':-75.6832422},'html_instructions':'Continuestraightonto\u003cb\u003eCrichtonSt\u003c/b\u003e','maneuver':'straight','polyline':{'points':'utitGpx{lMILEJKTOZELELCLAJAJ?L?XUnA[hCS`BcBfME`@[xB'},'start_location':{'lat':45.4383521,'lng':-75.67768509999999},'travel_mode':'DRIVING'},{'distance':{'text':'0.1km','value':114},'duration':{'text':'1min','value':26},'end_location':{'lat':45.4406353,'lng':-75.68267689999999},'html_instructions':'Turn\u003cb\u003eright\u003c/b\u003eonto\u003cb\u003eDufferinRd\u003c/b\u003e','maneuver':'turn-right','polyline':{'points':'a}itGf{|lM}A}@_Bq@'},'start_location':{'lat':45.4396873,'lng':-75.6832422},'travel_mode':'DRIVING'},{'distance':{'text':'0.9km','value':887},'duration':{'text':'2mins','value':134},'end_location':{'lat':45.4438859,'lng':-75.6930624},'html_instructions':'Turn\u003cb\u003eleft\u003c/b\u003eonto\u003cb\u003eMacKaySt\u003c/b\u003e','maneuver':'turn-left','polyline':{'points':'_cjtGvw|lMk@hCm@lC}AdHg@|Bm@pCc@lBK`@}@pEU`AK`@Kf@m@xCe@~B}@~DmAdG'},'start_location':{'lat':45.4406353,'lng':-75.68267689999999},'travel_mode':'DRIVING'},{'distance':{'text':'0.9km','value':871},'duration':{'text':'2mins','value':128},'end_location':{'lat':45.4367889,'lng':-75.69772739999999},'html_instructions':'Turn\u003cb\u003eleft\u003c/b\u003eonto\u003cb\u003eSussexDr\u003c/b\u003e/\u003cb\u003eOttawaRegionalRd93\u003c/b\u003e\u003cdivstyle=\'font-size:0.9em\'\u003eDestinationwillbeontheright\u003c/div\u003e','maneuver':'turn-left','polyline':{'points':'iwjtGrx~lMf@XRJdAj@bAh@|@d@bAl@h@ZFBHDJD\\PNHbAn@nBlARJpDrBHDt@f@zA|@JFFN@BBBd@ZRLFDbB`AzBdAbAh@v@^?@'},'start_location':{'lat':45.4438859,'lng':-75.6930624},'travel_mode':'DRIVING'}],'traffic_speed_entry':[],'via_waypoint':[]}],'overview_polyline':{'points':'wujtGry~lMnWzNpKkEjK`N{T`}AaZzl@_i@uR}fAk@k{BcKofBtC{a@q}@{QyqCiY{eI_BgfHwQunEwiBo|G{v@wyCqDgiAuEubBug@{eBiuA{cFwt@muAsrCjO}iB`Aq_@ok@ys@ygEBcrErVoyG}PmvDvHeY_D|RuVmA}pAhOiNw`Bm}@eO}uAip@qv@jLmx@wC{U}]k\\gEkz@km@_X}eD]urBeWwv@igA{Ui`A{B{rAiAmSan@sLeV}cAqTuzAiuByNsJ_b@uK`Bsz@aItJyZeI_@kb@{o@gS}_BqEgeAmeAiM}k@el@{e@mQko@gc@yV{u@cHuxA{Cun@dl@mnAdD{sAhEqy@tLkhAtSsq@eKmr@wf@ii@qKyu@_w@{jA{gA_O}Oi^pZc]Zi_@nm@ciAjt@gw@rM_KrQ_^if@eiAqb@wLcOkaCqCov@tE_QlGcVqDg[mk@qUgj@{f@}Yed@}t@qc@smAwYgu@kF{c@oc@rEaPrHCoJvY__@zCcg@vH_VuTkOj^gkAlf@cWjvAmsAln@c{@tZejBbh@ynAuA_b@nL{y@nd@cKfoAeW|RwAt\\rQfy@vVbq@zHjj@hLkRfv@fI``AmF`|AlOzgA}Db`AlGbjAhCvm@nGl`@fPjBhYt|@zC`I_CeViIm^qTyLwSkq@aDiuAkAe`AqMe`CdH{j@cRoaApq@cy@|Ocm@lVsOhQiQvIpVb_A|z@rjAljAjzA~Bxw@`b@nlAoEd}Ab]fs@~h@d}@_AlfBze@xrBxGrmIh}AwFx`DjObXt{A~VhnDz\\rpA}u@tiCpKxa@{b@~bAKdy@yfBxkAgzAlrAvr@~WvJjAk^mJyc@pN{sBtxAgtIbRehBtToyQrS}kDaPwdE{_AkzEt^ywF|IuxEp~C~n@raBr}AjXrw@jkAhi@zw@iKbqErbBzxDp_BhQvH}Cxi@sz@zxFts@t^rJ`j@pXjhAr{@~pAziCdcEx|@taEzaBjnFtyAtjHjUj`Dn`@plGrMzbCp[p|BtRxbAxi@_@v^{OvEvU~c@aRjhAih@zuFavCvcAke@`m@x{Cr@~@~HyDjl@yg@dXveBvsBrgKbJxcEwQj|BhLd{B{e@ngBmm@xaB`Mn~CzPljCyJ|pBdFhgCmQl_Ae|@fwAiWxp@iCdkAuc@lwC}BjzF{z@|tIa`@||F{}@hbCmjAttOsaAvtB_n@bi@sy@fN{r@b^oQ~c@}Rzm@y_@lLoKj`@bPtfAvDf|Cwh@de@mk@nMeU~b@{Hvn@ySpt@s@|k@ba@tU'},'summary':'Autoroute50EandQC-317N','warnings':[],'waypoint_order':[2,1,0]}],'status':'OK'}"
                    , Encoding.UTF8, "application/json")
            };

            mockedHttpClient.Setup(x => x.GetAsync(It.IsAny <string>())).ReturnsAsync(mockedHttpResponse);

            var result = await service.OptimizeRoute(_optimiseRouteCriteria);

            Assert.Equal(356460, result.Distance);
            Assert.Equal(18810, result.Duration);
            //check the order of the requests
            Assert.Equal(0, result.RequestIds[0].CompareTo(_requestId3));
            Assert.Equal(0, result.RequestIds[1].CompareTo(_requestId2));
            Assert.Equal(0, result.RequestIds[2].CompareTo(_requestId1));
        }
Example #2
0
        public async Task ReturnFailedOptimizeRouteResult_WhenNon200Returned()
        {
            var mappingSettings = new MappingSettings {
                GoogleMapsApiKey = "some key"
            };
            var mockedHttpClient = new Mock <IHttpClient>();

            mockedHttpClient.Setup(x => x.GetAsync(It.IsAny <string>())).Returns(Task.FromResult(new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest)));
            var service = new GoogleOptimizeRouteService(Options.Create(mappingSettings), Mock.Of <ILogger <GoogleOptimizeRouteService> >(), mockedHttpClient.Object);

            var result = await service.OptimizeRoute(_optimiseRouteCriteria);

            result.Status.IsSuccess.ShouldBe(false);
            result.Status.StatusMessage.ShouldBe(OptimizeRouteStatusMessages.GeneralOptimizeFailure);
        }
Example #3
0
        public async Task GeneratesCorrectApiCall()
        {
            const string expectedApiCall = "https://maps.googleapis.com/maps/api/directions/json?origin=24%20Sussex%20Drive%20Ottawa%20ON&destination=200%20Sussex%20Drive%20Ottawa%20ON&waypoints=optimize:true|45.4,-75|46,-75|46.1,-75&key=somekey";
            var          mappingSettings = new MappingSettings {
                GoogleMapsApiKey = "somekey"
            };
            var mockedHttpClient = new Mock <IHttpClient>();
            var service          = new GoogleOptimizeRouteService(
                Options.Create(mappingSettings),
                Mock.Of <ILogger <GoogleOptimizeRouteService> >(),
                mockedHttpClient.Object);

            await service.OptimizeRoute(_optimiseRouteCriteria);

            mockedHttpClient.Verify(x => x.GetAsync(It.Is <string>(y => y == expectedApiCall)), Times.AtLeastOnce());
        }
Example #4
0
        public async Task LogsException_WhenAnExceptionIsThrown()
        {
            var mappingSettings = new MappingSettings {
                GoogleMapsApiKey = "some key"
            };
            var mockedLogger     = new Mock <ILogger <GoogleOptimizeRouteService> >();
            var mockedHttpClient = new Mock <IHttpClient>();

            mockedHttpClient.Setup(x => x.GetAsync(It.IsAny <string>())).Throws(new TaskCanceledException());
            var service = new GoogleOptimizeRouteService(Options.Create(mappingSettings), mockedLogger.Object, mockedHttpClient.Object);

            await service.OptimizeRoute(_optimiseRouteCriteria);

            mockedLogger.Verify(x => x.Log(It.Is <LogLevel>(y => y == LogLevel.Error),
                                           It.IsAny <EventId>(), It.IsAny <object>(),
                                           It.IsAny <Exception>(),
                                           It.IsAny <Func <object, Exception, string> >()), Times.AtLeastOnce);
        }