Foro

Home Forums Programación Javascript google maps y calculo de distancia entre dos puntos geográficos

This topic contains 14 replies, has 6 voices, and was last updated by  andresflorez12 3 años, 3 meses .

Viendo 15 respuestas - de la 1 a 15 (de 15 en total)
  • google maps y calculo de distancia entre dos puntos geográficos

    Intervenciones
  • aeb_asturias 
    Participant

    Hola a todos/as,

    Tengo unas dudas con el uso de la API de google maps que me gustaría comentar. El tema está en que tengo un JSON con puntos de localización de bares por ejemplo. Entonces yo hasta el momento le muestro al usuario un listado con los bares existentes en ese JSON. Mi idea ahora es que le aparecieran dichos bares ordenados de mas cercano a su ubicación actual a mas lejano. Para ello he visto varias ténicas:

    1) Utilizar una función llamada computeDistanceBetween() proporcionada por la API de googe maps y que calcula la distancia de dos puntos. Ejemplo:

     Code: arbitrary (select
    1.
    2.
    3.

    var x1=new google.maps.LatLng(50.995093,-16.417091);
    var x2=new google.maps.LatLng(50.997698,-16.41788);
    var distancia = google.maps.geometry.spherical.computeDistanceBetween(x1, x2);

    Eso me calcula la distancia que hay del punto X1 y X2.

    El problema que tiene este método es que parece que calcula la ruta como la distancia que hay entre los dos puntos “en línea recta”. Porque probé con un ejemplo cogiendo dos puntos y me devolvía que la distancia era 1900km y cuando hice esta misma prueba lléndome a google maps me salía que la distancia era 2300Km.

    2) Otra solución que vi es hacer lo siguiente:

     Code: arbitrary (select
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.
    13.
    14.
    15.

    var directionsService = new google.maps.DirectionsService();
          var start=new google.maps.LatLng(50.995093,-16.417091);
          var end=new google.maps.LatLng(50.997698,-16.41788);
        
          var request = {
            origin:start,
            destination:end,
            travelMode: google.maps.TravelMode.DRIVING
          };
        
          directionsService.route(request, function(result, status) {
            if (status == google.maps.DirectionsStatus.OK) {
              alert("todo bien");
            }
          });

    Esta solucíón si que me devuelve los 2300km que me salía cuando lo probaba desde la web de google map y me sale incluso el trazado paso a paso de como llegar hasta allá , etc.

    El problema de esta solución es que cuando ejecuto el anterior código varias veces seguidas (una por cada localización de bar que tengo registrado en el JSON), me empieza a devolver un error “over limit query” que supongo que será una limitación que me pone google para que no haga tantas peticiones seguidas o algo asi.

    Además la llamada al método directionsService.route() parace ser asíncrona y mi idea era ir guardando la distancia en un vector según la voy obteniendo al ejecutar el método anterior por lo que ya no me gusta tanto….

    No se entonces cual es la mejor manera de proceder en todo esto. Lo único que quiero es hacer la típica app que te muestra un listado de bares por ejemplo y ordenados de mas cercano a la ubicación del usuario a mas lejano. Tan “simple” como eso jeje.

    Espero que alguien me pueda orientar sobre como proceder….

    Saludos.


    Aeon
    Aeon 
    Participant

    creo que esta info https://developers.google.com/maps/documentation/distancematrix/?hl=es es mas o menos como lo que pretendes checa el ejemplo 2 de esta pag https://developers.google.com/maps/documentation/distancematrix/?hl=es


    aeb_asturias 
    Participant

    Muchas gracias Aeon por responder. Es otra manera y muy buena de calcular la distancia entre dos puntos usando la api de Google Maps. El “miedo” que me da es la restricción que aparece:

    * 100 elementos por consulta,
    * 100 elementos cada 10 segundos,
    * 2.500 elementos en un período de 24 horas.

    En la aplicación se hace uso de 4 JSON que tienen puntos de localización y que a día de hoy entre los 4 archivos habrá unas 150 entradas. La idea es que la ordenación de los puntos por distancia respecto a la ubicación actual del usuario se haga sólo al entrar a la App (aunque también tenía la idea de que dentro de la aplicación se pudiera refrescar los datos ya que alguno de los json se actualiza a diario) asi que no se si podría resultar mas o menos fácil llegar a ese límite de 2500 elementos en 24h si el usuario entra a la app varias veces el mismo dia…… :roll:


    Aeon
    Aeon 
    Participant

    pero son consultas por ip no creo que alguien use 2.500 elementos en un período de 24 horas.


    shadow564 
    Participant

    aeb_asturias tengo el mismo problema que tu con las distancias, llegue a este foro buscando una solución y encontré tu código, pero no logro hacerlo funcionar, aparte de este códiog hay que poner algo más en la pagina? alguna librería de google o algo?

    var directionsService = new google.maps.DirectionsService();
    var start=new google.maps.LatLng(50.995093,-16.417091);
    var end=new google.maps.LatLng(50.997698,-16.41788);

    var request = {
    origin:start,
    destination:end,
    travelMode: google.maps.TravelMode.DRIVING
    };

    directionsService.route(request, function(result, status) {
    if (status == google.maps.DirectionsStatus.OK) {
    alert(“todo bien”);
    }
    });

    Saludos!


    Aeon
    Aeon 
    Participant

    esta pagina quizá te sirva http://www.funcion13.com/2012/08/16/calculando-distancias-y-areas-con-google-maps-v3/


    JAPQ 
    Participant

    YO TENGO UN PROBLEMA PARECIDO …..
    google tiene una funcion, que si tu le das 2 puntos PUNTO A = logitud y latitud ……………… PUNTO B = logitud y latitud,,,,,,,,,,,,,,, con esos 2 datos, el te dice aque distancia estan, en metros,,,,,,, los que yo necesito es cambiar el PUNTO A. por mi posicion actual ….. GRACIAS .


    Aeon
    Aeon 
    Participant

    pues ese no es un problema, que si ves la documentación de geolocalizacion http://plugins.cordova.io/#/package/org.apache.cordova.geolocation, te da tu ubicación


    Webserveis
    Webserveis 
    Participant

    Normalmente las aplicaciones que te muestran el listado de puntos cercanos, no tienen en cuenta su trazado, es decir con la función obtener punto A a punto B pero en linea recta.

    función independiente para calcular distancia entre dos puntos

    http://codepen.io/anon/pen/gcvDC


    Happy code!


    JAPQ 
    Participant

    yo necesito es solo la distancia en metros entre mi ubicacion actual. y un punto fijo, expresado en longitud y latitud ,

    el problema es que “mi ubicacion” varia constantemente,, y necesito q haga el calculo, teniendo en cuenta la variacion

    alguien me podria pasar un ejemplo completo con lo que necesito ??? spy algo nuevo en esto… GRACIAS A QUIEN ME PUEDA COLABORAR ,,

    • This reply was modified 4 años, 11 meses by  JAPQ.
    • This reply was modified 4 años, 11 meses by  JAPQ.

    • This reply was modified 4 años, 11 meses by  JAPQ.
    • This reply was modified 4 años, 11 meses by  JAPQ.
    JAPQ 
    Participant

    CON ESTA FUNCION ME MUESTRA EL MAPA DE MI UBICACION

    <html>
    <head>
    <title>Local</title>
    <script src=”http://j.maxmind.com/app/geoip.js”></script>
    <script src=”http://maps.google.com/maps/api/js?sensor=false”></script>
    <script type=”text/javascript” >

    if (navigator && navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(geoOK, geoKO);
    } else {
    geoMaxmind();
    }

    function geoOK(position) {
    showMap(position.coords.latitude, position.coords.longitude);
    }

    function geoMaxmind() {
    showMap(geoip_latitude(), geoip_longitude());
    }

    function geoKO(err) {
    if (err.code == 1) {
    error(‘El usuario ha denegado el permiso para obtener informacion de ubicacion.’);
    } else if (err.code == 2) {
    error(‘Tu ubicacion no se puede determinar.’);
    } else if (err.code == 3) {
    error(‘TimeOut.’)
    } else {
    error(‘No sabemos que pasó pero ocurrio un error.’);
    }
    }

    function showMap(lat, longi) {

    var myLatlng = new google.maps.LatLng(lat,longi);

    var myOptions = {
    zoom: 17,
    center: myLatlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    }
    var map = new google.maps.Map(document.getElementById(“mapa”), myOptions);

    var marker = new google.maps.Marker({
    position: myLatlng,
    title:”Hola Mundo”
    });

    marker.setMap(map);

    }

    function error(msg) {
    alert(msg);
    }
    </script>
    <style type=”text/css”>
    <!–
    .style1 {
    color: #FFCC00;
    font-weight: bold;
    }
    –>
    </style>
    </head>
    <body>

    </body>
    </html>

    SE QUE CON LA Q ESCRIBO A CONTINUACION ME MOSTRARIA LA DISTANCIA ENTRE MI UBICACION Y UN PUNTO ESPECIFICO…….. PERO NO SE COMO ESCRIBIR EL HTML COMPLETO PARA QUE LO MUESTRE DENTRO DE <body> “DISTANCIA EN METROS”</body>

    var sevilla = new google.maps.LatLng(37.377222, -5.986944);
    var myLatlng = new google.maps.LatLng(lat,longi);

    var distancia = google.maps.geometry.spherical.computeDistanceBetween(sevilla, myLatlng);

    alguien me podria escribir el html completo por favor ? no es necesario mostrar el mapa……. solo q escriba dentro de <BODY> ” <span style=”color: green;”>EXISTEN “X” METROS DE DISTANCIA</span>”

    como tendria q ser el html5 completo para q me muestre esta expresion ?????

    GRACIAS A QUIEN ME PUEDA COLABORAR ,,

    • This reply was modified 4 años, 11 meses by  JAPQ.

    • This reply was modified 4 años, 11 meses by  JAPQ.
    andresflorez12 
    Participant

    envia un json asi {
    “geocoded_waypoints” : [
    {
    "geocoder_status" : "OK",
    "place_id" : "ChIJpTvG15DL1IkRd8S0KlBVNTI",
    "types" : [ "locality", "political" ]
    },
    {
    “geocoder_status” : “OK”,
    “place_id” : “ChIJDbdkHFQayUwR7-8fITgxTmU”,
    “types” : [ "locality", "political" ]
    }
    ],
    “routes” : [
    {
    "bounds" : {
    "northeast" : {
    "lat" : 45.5017123,
    "lng" : -73.56518009999999
    },
    "southwest" : {
    "lat" : 43.6533103,
    "lng" : -79.3827675
    }
    },
    "copyrights" : "Datos del mapa ©2016 Google",
    "legs" : [
    {
    "distance" : {
    "text" : "541 km",
    "value" : 540965
    },
    "duration" : {
    "text" : "5 h 17 min",
    "value" : 18998
    },
    "end_address" : "Montreal, Quebec, Canadá",
    "end_location" : {
    "lat" : 45.5017123,
    "lng" : -73.5672184
    },
    "start_address" : "Toronto, Ontario, Canadá",
    "start_location" : {
    "lat" : 43.6533103,
    "lng" : -79.3827675
    },
    "steps" : [
    {
    "distance" : {
    "text" : "0.3 km",
    "value" : 280
    },
    "duration" : {
    "text" : "1 min",
    "value" : 66
    },
    "end_location" : {
    "lat" : 43.6557259,
    "lng" : -79.38373319999999
    },
    "html_instructions" : "Dirígete al \u003cb\u003enorte\u003c/b\u003e por \u003cb\u003eBay St\u003c/b\u003e hacia \u003cb\u003eHagerman St\u003c/b\u003e.",
    "polyline" : {
    "points" : "e`miGhmocNgBf@cBb@KBcErAk@P[H"
    },
    "start_location" : {
    "lat" : 43.6533103,
    "lng" : -79.3827675
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.5 km",
    "value" : 456
    },
    "duration" : {
    "text" : "3 min",
    "value" : 191
    },
    "end_location" : {
    "lat" : 43.6562448,
    "lng" : -79.37828979999999
    },
    "html_instructions" : "Gira a la \u003cb\u003ederecha\u003c/b\u003e con dirección a \u003cb\u003eDundas St W\u003c/b\u003e",
    "maneuver" : "turn-right",
    "polyline" : {
    "points" : "iomiGhsocNCWi@gEGc@?CAASaB[}BGk@E_@CKCSM}@?E?CAI?I@M?EVgBBQ\\{B?QSqB"
    },
    "start_location" : {
    "lat" : 43.6557259,
    "lng" : -79.38373319999999
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "2.0 km",
    "value" : 2036
    },
    "duration" : {
    "text" : "6 min",
    "value" : 376
    },
    "end_location" : {
    "lat" : 43.6618361,
    "lng" : -79.3545312
    },
    "html_instructions" : "Continúa recto hacia \u003cb\u003eDundas St E\u003c/b\u003e",
    "maneuver" : "straight",
    "polyline" : {
    "points" : "ormiGhqncNq@iF[wBe@qDm@{Eo@{ECGEIEIGEII]QOMQMKMOQKQIOIQISESIWEUESCYAWA]?]D}@?GAKAMe@_Da@oCi@}DYsB[yB]aCCUYuB_@wC]qCa@wCa@wCYwBAKYmBe@aDWiBKy@WgBeAoH[{Bs@eFAKUmDWmD"
    },
    "start_location" : {
    "lat" : 43.6562448,
    "lng" : -79.37828979999999
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.2 km",
    "value" : 209
    },
    "duration" : {
    "text" : "1 min",
    "value" : 21
    },
    "end_location" : {
    "lat" : 43.6635765,
    "lng" : -79.3554817
    },
    "html_instructions" : "Gira a la \u003cb\u003eizquierda\u003c/b\u003e para acceder a la rampa \u003cb\u003eDon Valley Parkway\u003c/b\u003e",
    "polyline" : {
    "points" : "ouniGx|icNUJy@^oBz@u@Zc@Nk@PEBCBKN"
    },
    "start_location" : {
    "lat" : 43.6618361,
    "lng" : -79.3545312
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "12.9 km",
    "value" : 12906
    },
    "duration" : {
    "text" : "10 min",
    "value" : 588
    },
    "end_location" : {
    "lat" : 43.76282690000001,
    "lng" : -79.33669359999999
    },
    "html_instructions" : "Incorpórate a \u003cb\u003eDon Valley Pkwy N\u003c/b\u003e",
    "maneuver" : "merge",
    "polyline" : {
    "points" : "koiGvbjcNiBXyCl@wAXw@RmEv@ODgB^uBb@MB}Bb@qBb@_AVWJSHm@T{@b@gAt@q@f@w@p@uChCgB|Au@p@a@\\o@d@o@d@y@j@e@X]Pm@Z]N}@\\qA@}@\\k@Ns@RiCb@aBXyARkCXcDToBHmBJqAHiAHo@BcABYAg@COAWEQEYGSEu@Wo@U{@Yy@[q@WgCcAk@Sk@Qm@S}@Uc@G]EcAIo@Cs@Cu@?s@?q@?s@AyAIu@Gi@I_@Gy@Og@Mc@I_@Ke@OYK_@Qq@Wo@[gAi@c@YeAw@}@q@a@]]Yc@c@g@i@a@e@o@w@{EwFo@y@{AmBiB{BkGaIW]Y_@MQs@kA[k@Wm@Wo@Sq@Ss@Oq@Mq@Ku@Ku@Iw@Ew@CcAA}@@aBDcAFyAFaALgBf@{HJyAJaCBqA@o@?q@Ac@Am@G_AEe@Gk@OgAMy@UcAOk@k@eBSc@Ym@MWS]c@u@[g@[e@{CeEcAaBWg@Wm@e@mAGQe@uAWu@]iAaAkDe@eBSi@Wo@Wm@[o@_@m@W_@SUw@_AOQ[YSO[UQKUMQG]QOEk@Q[IsA[a@GwAU}AQ}@Ms@M_AK}@Mg@IMCMAy@Qk@Qe@QQGe@SWOYOYUQO[W]_@]]Y]W]c@m@{@uAyCqEMSyBeDk@y@Ya@SWW]a@i@a@a@YUq@k@oAs@[Oq@USG]KYG]GSCi@Co@As@@e@BYDw@J{@Rk@R]Le@Ta@RSLKHUNKHURWTa@^YXcDdDa@@e@@m@h@aBdA{BrA{@b@oDdBwAj@kBh@oBd@q@N{@L}BRiCRyAJC@c@@i@Bg@@qABu@AuCFkDFcEFyADiBHqAJoBP_D\\wBRaDX}Fx@uCb@yFv@}Dd@kAJs@Dk@@u@Bw@?}A@{B@{AAwBAeB?qBB]?]B{DRmCTuIjAmATkC^uARoALy@HmAHcCHyBH{AB{AFiADoAH[B{E^[DC?q@HoC`@_C^sAXyAZeB^yA^e@LK@{Ad@kAZkBd@u@NQBkAP}@N{@LuHlA{AVs@J_HfAcANcAL"
    },
    "start_location" : {
    "lat" : 43.6635765,
    "lng" : -79.3554817
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "1.1 km",
    "value" : 1070
    },
    "duration" : {
    "text" : "1 min",
    "value" : 49
    },
    "end_location" : {
    "lat" : 43.768037,
    "lng" : -79.32926310000001
    },
    "html_instructions" : "Toma la salida \u003cb\u003eON-401 E\u003c/b\u003e",
    "maneuver" : "ramp-right",
    "polyline" : {
    "points" : "ulbjGhmfcNqA?gA@qA@iA@u@?yBIcDIuACUCOAOESGWMOKQQKQIOIOEOGUEQEUCYAWAQ?WCuDC{CESAEAIAo@EaAIwAKoCY_HGmBAOAGAESc@"
    },
    "start_location" : {
    "lat" : 43.76282690000001,
    "lng" : -79.33669359999999
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "23.0 km",
    "value" : 22985
    },
    "duration" : {
    "text" : "12 min",
    "value" : 730
    },
    "end_location" : {
    "lat" : 43.83811679999999,
    "lng" : -79.07197540000001
    },
    "html_instructions" : "Incorpórate a \u003cb\u003eOntario 401 Express\u003c/b\u003e",
    "maneuver" : "merge",
    "polyline" : {
    "points" : "gmcjGz~dcNGqFG_FAaAA{BC_HAkEAyB?qBAkC?oCAmCAsDAaF?{DAaDA}CCaCE{AEkBIiBGiAIqAIaAImAKkAOqAMiAQuAOmAUgBYkBSsA]gC[yB[mBUeBWaBm@{DCMSsAScB]eC_@mCg@gD[uBc@_DWcBYmBo@sEaAyGSoAs@_Fc@sCYeBo@qE]aC[aCuFs_@{@gGSsASuAwBeOiA{HM{@M{@eAmH_CmPM_AAAOsAwBoPm@yEo@kF_AeI{@aIWaC}@uHcI}s@oBgQg@mEiAkJkCcUy@uGeAwHq@uE{@yFiBaL_AkFy@oEi@wC]_B[_BmAcGoAyF}@_E{@yD_@}Ak@uB_@yAY}@s@_Ck@cBa@gAo@eB{@yBw@gBaAuBw@aBm@oA]q@oB_Ew@}A_@y@_@{@c@eA{@yBeA{Cu@cCw@qCU_As@{CYyAScAIg@Mq@a@iCOgAUgBWiCS}BI}@UsCYuDK{AQ{Bg@oGe@iGWgDUsCYyDmBkVWgDgAqNo@eI{@eL_@}EQeCqAqPiA{N_JqjAYiD[oEGsAImBEaDAmA?qA@cABwAB_ABy@FeAFiALmBH}@LkARsAVaBRyAf@kC|@{DxByItD}Nx@eDv@}Cv@aDz@sDTiAPcARmAPoALqAJiAHiAJoCB}@BcB?sBC_A?i@KuCOwBSmBMmAWaBKg@[eBYmAQo@s@eC[y@e@oAQ_@u@_Bc@{@gAqBqA{BqCuEmDyFiAiBgAgBwA_C_BkCqAwBeBuCwBsDa@w@Sc@Yi@Yi@a@s@Yi@Ye@KQo@gA}@eBy@_BeA{BaA}BuHiPuB}DI_@{DiHoCaFgC{EqK}S{BaEoE_IcMqT_BsCOWgHgMyBeD}@wAeDmFkB{Ca@m@uAyBoAqBaAcBw@uA]q@iA}B{@mBk@yAu@qBoCqHkDqJgB_F]_A[_AoAqDkDuJ}HiTqEgMkDuJSk@IUWo@{HoTeSuj@yCoIaCyGgA{CwAuDUk@_@cA_@eAAC?AAA?C@A?G"
    },
    "start_location" : {
    "lat" : 43.768037,
    "lng" : -79.32926310000001
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "428 km",
    "value" : 427641
    },
    "duration" : {
    "text" : "3 h 50 min",
    "value" : 13770
    },
    "end_location" : {
    "lat" : 45.2083667,
    "lng" : -74.3482841
    },
    "html_instructions" : "Incorpórate a \u003cb\u003eON-401 E\u003c/b\u003e",
    "maneuver" : "merge",
    "polyline" : {
    "points" : "gcqjGzvraNmAgDm@}AY{@M]k@}Aa@iAe@uAc@mAm@gBe@qAe@qAe@sAc@kAWu@Wu@i@wAAEe@qAc@oAqGmQ_Osa@a@kAQk@Wy@U}@Sq@Oq@UoAMk@Mu@WqBa@qDMeAq@{F{Ds\\G_@qCsUi@aEUsBWsBU_Cm@oFq@wF[uCWwBIq@[kCy@_H}@gHOkAm@mEyAoKUaBi@yCwBeN_@cCs@kEg@{CQkAkBgLyAiJw@_FcA{GuBkOEWCYESCSCSCS_@uC_@uC}AoLAQiAeKe@sDwAkKuB{NuAcK}AwJyHqf@aBsKe@cDY{AY_B}@wEqDyQeCsMmCgPeBcNqAeLkBwS_BuSqAsOe@wEm@kFe@aE[qDQeCW{DM_DG}DCwDBuELsFrAw^BoAHeDFkDJqFNoHFwCBiBF_CHqDBcAL}ENuHFeDJaD@o@@oADwAD}ADmAFwB@y@LcFVwKFsD@WJqFP}IDyB@wA?iA?}AA_BA}AEcBEuAGoBKsBKwAK}AM}AQaBUwBWoB[}B]aCWkB[sBQgAGe@]aC_@iC]eCgAwH{Eu\\c@}C}B_P}Lk{@_BcLeCeQmByMqBoMCQe@mCy@sEUkAs@sDcA}EuEwTUgAo@aDEUwA}GgBiIi@qCWgAS_AUuAQcA[}BIc@M_AuDwWc@}CAEIm@aAsG}B_PWqBCMMw@OgAgA_IKm@qAgJEYyBcPsDcWc@gDIk@AGMu@kAmIwGce@g@kDYsBKs@OiAYqBMaACMMgAMo@U}Ba@sE[oEOyCUuFMmHCyC?{BFwI?GB_CDoBHyBHmBJcBJaBHiAL_BNiBRwBVqBR_BVmBJs@L}@f@}Cl@eDd@yBJi@Ja@Z{Ah@wBr@qCnBsGAoC\\cAZy@\\{@Xq@l@{ATg@z@mBv@}ALY@u@p@qApA{BjAmBBmCbAcBfCcEbBsCh@_Av@sAvAyCB_E@kAVs@\\iAh@iB~@uDf@}BVyAb@cC@sCJ_A^yDT_DPwDB}@D{ABwA@qA?{@?iAA_AA}@CwACmAE}@Cm@GuAIkAMuBiLegBw@qLwAuTYiEW{D_BwVK_Bk@{Iy@_Mu@oLwAqTc@oGO{BgE}o@wDel@w@{Lq@qKYeEUaDUoDQkCWyDa@eG[eF[yEO_CSuDSaDAGGmAqCyb@IkAI_AS{BMeAMmAIm@_@gCSsA[kB[{Aa@qBaA}D]oAe@aBUs@a@qAe@sAu@qBaAcCeCoGoKwXwCsHc@kAeBsEi@qAkB{EeAsCcByEk@gBm@mBQm@{AeF_AcD_B}FYiAoAiFa@cBg@yBQy@EQ{@kE[cBQ}@i@_Ds@gEo@sDQcAc@yCOiAk@sEa@kDIq@Gs@Ec@a@{DO{AQ{B_@mEUoCQ{BMkBKgBSqDOeDMeD{@uYc@gNi@mQAq@}Ami@u@qUe@sPoAab@CwBKqDEqBEwBIeDKo@AEIuBMsEOcFSsGe@cO]yHE}@E{@]eGa@kGWuD{@uJYoCWcCe@eEYaCkBiOqAiKmCqTg@}DIq@mBiOi@cEYcCwAyLiBcOkCaTeBuNkBkOy@qGKy@yAgLYaCQqAaBeNiB{NKy@kB{O_CqRiC{SqCeUQyAs@}FqAoKcAiIwAoL{@_HcBgNo@iFqAeKmAcKaAyHwBgQ_A}HcBgNq@qFcAgIi@oEs@sFcAkIsBwPeAsIaB{M_Ee\\w@sGy@uGY_Cg@mDq@cFmAwIc@eDoEc\\mBiNmA}IiAoIgA_Iu@oFm@qEwByOsAsJS}AwAmKsF}@E[E[mEw[iD{VaFq^cByL_@kCgAoIQmAsDiXoAeJgE_[oA_JeAuHaAkHsAuJ}@yG{@_Gw@iGeFa@oBmNgCeR}AgLyLa}@SyAkCuRKq@cF{^eA_IqAkJcDkVeBeMoCaSuKcx@_CkQkAiHIg@WqBi@uD_AeHi@{DkB_NgCgRqDgXo@kEc@gD]gCi@{D_A{GqBaO}Ly}@_@iCyG{f@kAwIgQaqA_@wCe@mDa@_DM{@MkAYmCSuBU{BQ{BQyBIsAIeACc@?ICYM}BSqEYwG}Aq]_A}S_@yHWkFQwDCk@Ag@KqCScHO}FKsEEwAGyAK}CU_Fa@gJOkDWaGW_FUcEQkCQmCk@gIG{@Ew@C]G{AIiBWmFCm@AKGgAQgEE}@E}@SeF[iHc@kKi@cMc@qK_@{IO}CK{BIwAGeAMyAM}AIo@Gu@a@eDWgB]uB_A{FaAeGkAiHaBoK[yB]yB]qBiBcL}L_v@uEwY}@uFcDkSiIch@eAaHiAiHQqASqAcBoKuAeJgBeLyAsJ_@gCKy@K}@Iu@KcAEm@GaAEs@CeAE_B?g@?m@?{@@}@@{@@]@]Bu@FeAFy@HcAH}@Jy@L{@T{AFYJi@ZsAb@yBhAcFdAsEjBmIr@uCbBuHfA}E@qB\\kBVyAZwBR_BNqAJaAP_BDo@Da@LaBHuADy@Ds@D{@DiADeABaAB}A@uA@gB?cA?mACsBC}ACcACmACk@MsCGmAKyAMyASiBgEsd@uB}TQmBOcBUiC[wC]}CU{Aa@sCSwAMq@_@yBo@wD_@qBSaAkB_Js@wCo@uCg@uBKc@Kc@kAaFSaAk@_C_AaEI_@[mAi@eC]sAOw@Qw@y@sD{BsJuAiFcAeDaA{CeBcFo@eBs@}Au@qAc@s@IM}AsCwAgC}AqCy@}A_@s@OYc@}@]{@k@wAi@}Ae@eBYiAUeAMs@QaAOiAOgAKeAIeAG_AEw@Ci@CaAC{@CyA?aCEkMGaP?yBCcF?eAC{AGgCGyAQ}BKaAMcAOmAg@gDYmBk@gDOo@Ke@c@cB[eA_@eAQk@o@}AkBgEgAcCsA_Dw@cBw@iBe@eAeAcC{AeDe@gAcA{Bq@{As@aBcAeC}@kCs@{By@qCq@mCe@qBaAqEc@oB_AgEm@sCcAqEq@aDoAuFS}@u@yD_B_I_AeFUsAk@iDKs@M{@U_BQwAYcCOuAOaBOoBQ_CQwCMwCKsBIqDCoAAg@A{BA{D?cABeDDuCH_DP}FJyCf@uNPcFLkDj@eOf@{Lh@oMTiFb@_LLcDVaGT}FH{AHoBJcBNuBNyANsAXyB\\sBXwA^aBTaATw@f@eBt@wBh@wA\\aAhEqLJYb@kA@kAj@_Bf@qAVs@Rq@@oARu@\\qANo@XsAPy@N{@Ly@ZqBPyAH{@JiAJqAJoADs@DaADuAB{@?a@BuA?}@?y@A{AAy@C_AEqAE_AIwAG{@KsAMwAG{@I{@Gy@MwAI{@KuAMwAWoDMyAMwAMwAOsB[qDsCw]o@aIcA}Lc@eFa@kF_AoLu@cJo@_IcA{LWaDWuC_@oDUcBy@yGaCgReAqIc@gD}@cHsAyK}@cHeBoNG_@WqBQuAo@eFaB}MIo@e@qDiAiJ[kCeAgIk@uE_@uCc@kDSaB[cCc@oDg@yDo@_Fw@uGs@wFq@mF_@{Co@}Eu@mGm@sEGg@g@}D}@gHg@aEc@_EQqBYuDO_CYuEGcAUuDM_COyBE}@KqAKkBOoCAQQkCg@yIm@wJGgAASs@{KUgEaAgPWeEYeFGaAc@eHK_BAOEg@c@oHg@eIk@oJaAsPu@aMcAwPGiAk@qJI}Ao@aKE{@_@{GWgEIqAGqAKcB]yFE_AYoEc@qHYyEa@uGk@kJc@cHYaFGy@s@_MIeA_@{EKoAs@kGOqAUwBQ{AOsAe@cEe@uE]aDg@mESmBSeBYkCSkBUkB]cD_@iDu@aHq@iGa@qDa@yD[sCYcCSmBW}BUuBg@oEc@gE]eDQ{Au@wG[{C]uCo@uFi@{EkEs@sL{fAY}BWuB[oBm@}C{@aEEOa@_BOq@yBoJw@_DkB{G}@yCcAgDo@yBs@_Co@uBs@{B}@yCgAoDwEwOmHiVw@mCs@{BcAgDMc@w@iCq@yBk@kB]iAOk@k@iB_@mAc@wAg@eB_@mAwAwEiAwD}@yCs@}BUy@w@iC_A}CaA_Dw@iCe@_Bi@eBe@}A[eA]gAa@sA_@sA[cAg@qBQs@k@eC_@cBWyAYaBO_A]uBQgAWwAa@gCc@mC[gBy@gFy@cFs@gE{@iFk@kD}@}Ew@eD_@qAgAgDe@gAgA_Cq@oAu@oAIMU]iBaCaAeAs@u@y@y@c@c@{D{DuIwIuC}CsAkB{CiFcAmCwAsEg@_CeAqFoKik@oGa]mEaVmC{No@_EYaCg@eFe@wFIiAEmAIcDUyRMuIGqEEaDOmEGiAOeBYkCc@qCc@yBa@_Bc@}Ag@aBo@{A]{@g@aAy@}AiAiBkA_BoCmDwCuDuE}FwCuD_EeFq@{@eDeEaDcEc@m@u@_AeC_Da@g@cBwBsCmDwAgBqCkDkAaB_@m@q@qAmA}C]iAk@uBSu@SgAe@uCWmBO}AOyBQoDM}DWoGMaDk@cOUoFSoFM{C[{I_@oHSsCYiDs@aGqA}IM_AaAmGOaAqCiRsAkJuJeo@iB}K{@_Fw@{DkA}EaEuNw@qCmCgJeRcp@sE}OyA_Fa@wAe@aB]iAsAsEWy@q@iBi@yA}@uBqAqCqAcCoAuBaFaIeHcLeEaH_DcFkB}CaA{A_CcEwAgCoBcEgAqCq@iBi@aBwAsEuBuIg@wCo@{D_AuGkBsMmBwM}BwN_BsIqEyTcJ{c@YyAyDaRmAgG]yAc@cBe@cBc@yAa@qA[_AsByFcCqGg@_BkF_OkCyHoUgq@qBgG{@eDw@mEIa@Gg@Kq@E_@Gs@Iy@IkAE_AEs@I{CEcFAy@SqVEmEOoV?e@?m@?EAg@SgZq@}}@MeDIcBOqBOyAIk@o@iDq@oDg@cBkA_DsLsWsCsGsFwLWg@EI[o@uE_KmB}Do@cBkEeMqAkDAEQg@?AyAgEaDiJ{AoEcDqJc@mA}@aCm@aB]aAe@yAmGyQiA{CaCaHo@iBu@{BmDcK_C{GSm@uBgGyBqGqAqDmAcD_AcCmAcD{A{DuAmDoCgHmBeFiB{E_BiEqCmH{FgOqCiHm@}AeCyGyB{F{CeI{FgO_BcEuAqD}Ly[eIcTsDqJsAqDeFwMwByF_BgEk@{AiCyGqFsNy@yB{@_Cg@uAYaAg@aBU{@g@iBm@eCS_Ao@}CUoA]uBe@mCc@kC{@_Fs@gE_AyFwAuI]qBk@iDk@gDQeAw@sEWuA]sBg@wCg@_Da@aC[kBWaBe@mCm@oDc@aCc@kCYcBg@sCUyA]sB[mBUsA]sBe@iCu@qEc@mCy@yEk@gDk@kDk@eDe@mCuBgMc@iCe@qCq@cE}@gFeAqGs@eEk@eD{B}M{@iFgAoGm@qDoD_Tc@oCyAqIs@gEa@kC{@mFi@iDIk@EYmAmIyA}JoCcReDaUkA_I}AwKqA{IkA}HaBaLu@gF{@aGeAcH{CgSw@eFc@yC}AcKi@oDwAgJw@kFc@uCwAoJu@aF[mBuAmI}AmJgAyGeBeKy@eFgCwOWuA[oBc@mC]qB_A{FG]My@aA}F]sB_A}FUuAk@iDq@gEKg@QeAWsAMu@Ow@Oy@Mu@WuAe@kC]qBOw@Ow@]qB}@aF}CoQc@eCoAqHoAwHi@eDE]Kk@mCkPoAqHiAaHeCiOoCoPmAoHi@{C]sBa@iBEWg@{BaCcK_AsDi@oBg@_BuAoE_BcF]gAa@sAe@{AOg@}A{EeCeIUw@Yy@eF_PyD}LmCsIiBaGUu@W{@o@aCc@aBi@yBU_A_AgEYyAc@_Ca@wBy@uEYcBa@qCk@{D{@yF]}BeAyGoBsMcCkPyAuJq@yEmCsQaBqKqAwIc@wCkAwHgBsL{@yFiDmUcCmP_CsOaAuGqAyImBoM_BsKcA}G]wBq@{EiBuLaBwK{G}c@}AoKEQy@eGu@aFaAsGaA{G_AqGU_BMkAIq@MyAKiAM_BOcCGsAImBEwAAkAMaF?eGBcBF_CH}B@i@Bk@ZgFToCp@{Fb@_Dn@uDX{Av@sDrBgJxBgKhDyOZ{An@yDh@wD^aDP}AXaDRaDRaEHcEBeC@cCCaDAcAA_AEaBMgDK{BIgB]kEqBuXwAwRkAgPq@eJ_@cF]sE}Bk[IaA{K}{Ag@yHWeDWeD{AeSaCc\\k@aIk@cI_BgTkBcWuCia@q@gJ}@kL{H{fAGy@K_BM}AO{BcQacCqA}PCWkDgh@{AcSyLudBuFmv@aAeMyAcROkCyAqTsHkfA_MgfBqGmz@qAoQiAmPcBmUEg@cBwUoCk_@uCob@gEen@cPa{BmF{s@iAsNw@aKS{CYsDSqCWkDM_BQsCYmDYwDWiDk@kIYsD[kEO{A]qCIw@My@My@SsA]mBQ{@YuAa@kB[qAo@eCaA{De@mBGU{@gDe@kBo@eCg@mBe@kBe@kB[qASw@e@kBoCuKo@cC[qAUw@c@iBcA_Eo@eC[qA_BmGaC}IwAoF{@aDeA}Dq@cC[qAi@mBy@_DQu@]qAuAqFeA_Ey@aD_@{AqDoNI_@EOy@eDmAaF]uAQu@WqA_@qBSuAYsBOwAIy@G{@Gy@Eo@G_AGuAEgACyACyA?{A@yA@yAD{AFwADy@F}@PwBJwAH{@LyAHw@H_AFy@LwAHy@F{@NwAF{@LwAF{@B_@Fw@H{AFy@FyAD{@@_@Bw@FuDDiEA[AeEEsBE{AIcCMgCQuCOmBO{AQ_BOwAS}AW_B[qBq@mDiAsFe@{BgAoFoBoJ_AuEeA{E{DiRuHg_@Y{ASeAO}@YoB]eCQaBMkA]uDOuBO_CIoBI{BGwDCkCEmFWi[OeOKaOGgGK_NAgBE{DEwDEcCCsAG}BEwAGcAMiCQgDQgDOsCk@kKi@wK]uGcAwRk@wKMyBMkCc@gI]aH]qG]iHg@uJCe@Cc@OuCQ_EQcEMsEMoFMiHKsHQwJOiKSqLOiLMeJOsKIeHM_KOuKI}GQqKK{IMuIOqJIuEQ{KKgIIwFSeOKcIIeFI{FIgFIkFK_FMkHSmNYySOiK_@{WQcMKcGEmDMmIMmHYkOOaIOmICqBGsD?KEsC?KE{DIeFU{NIoGQuL?KGuEGqDGuFQqUImJEwEEsEImGEyBm@}b@?EGiDKoHEuCIsEWcMIoE[eNImEKuEOmHEsCGuBQoI]}Qa@sQSoJOqFYeLMgGE_B[}NWcM_@ySm@{ZKuFEeBCcB_@kR?YWkMCiAm@u^E{BKqCKuC[gHYmH_@cJ[kHe@aLWmGSoEQoE]iIQqEYoHMoDCwA?}@EoEAsEAsCCuEAwBA{A?wBAuC?uDAoE?oGAuFAkGCsECqFCoGAsDCqFCmHEkHEiICoHEeK?WCoHCyEC{CI_DMkEQkFUcGOaFQuE[gJUeGOoEIiCm@gQm@oQsAy_@{@cWM_HGgLG{U?}SCoc@Qoz@A}FEqOAwGC}GAcFAcFAaFAmFA}F?sAAkAGqBIsBQuBKkAMkAYoBIe@SgA}@qDWcAy@gCw@cCe@iBYiA_@mBYqBOkAW{CMsBGsBCkAAoA@mA@kA@{@Dw@JqBDg@NiBFi@^uCZaBVqA^{A|@_DRi@Ne@N_@p@{AlIiQrE}J^u@Ta@pBmEP_@jAcDZcARq@lAqFnAoFtBcJLg@bE{Qp@sCZuAf@uB~Iga@T_Ah@eCt@yCf@yBd@wBR_ALy@XgB@qCR}AT{BPuBV_DJeBDc@HmA?GNqBRwDVmELwBH{AHuA^kH@iHXuFPqCPyBXqC\\uC|@cGpA{HtC{OjC}NDWzAuIjBkKv@eEz@uE^qB\\sB~@mFd@oCTqARiAh@wC^yBRyALw@D]D_@F_@Hw@H{@J{@Hy@F_AH}@F}@HwADy@D}@D{@B_AB}@D}@b@oN\\gMZqK^mLBgABgAT{IHuC@yBA{BEkBIqBQ}BEe@IaAUeBOaAGc@SeAYoA]yAOi@Qm@]cAi@yAa@aAk@wAw@gBsCwGuF}Mw@gB}@yBkAsC}AsDEMsByEeD{HgBeEM[Um@Wo@Us@Us@Oe@g@qBIa@Ou@Ie@_@_CmCuQiAwHGc@_@_CCQ]aC_@kCYqBYmBo@kEi@mD[sBg@kDo@gEg@kD{@iF_@kC_@}Bw@uFUwAUuAe@cDs@{EQkAkA_Ii@qDc@wCe@}C_@gCg@kDQmAc@sCa@qCIe@Im@U{ASqAQiAKy@a@kC]{BmAqI[qB{@uFy@{FoAmISuAUyAMy@My@Ow@Ow@Ou@Ou@Os@Qu@Qs@Qq@Su@Ss@Sq@Uu@Wu@_@mAeA{C}@aCYu@c@mAe@oAWs@Ys@Ws@i@wA]_Ae@kAWs@Wq@Wq@Wq@Wq@c@kA_@aA]}@c@kAc@iAYs@uAqDo@cBo@aB}@_Co@cBEKi@wAy@}B}@}Bc@iAWo@Yo@Yo@[m@[k@]k@]g@o@_A_@e@_@e@a@c@a@c@c@a@c@a@c@]e@_@e@]c@YmAs@mAu@oBgAaAm@mAu@y@g@{@g@y@m@w@m@a@_@e@c@]]UW[]W[]e@a@g@_@k@k@}@m@cAi@gAYk@[s@O_@Sg@Oa@So@w@qBc@kAe@oAsAsD{BkGiB_FgEiL{AsEeAsCIWM_@{CmI}@cC_CkGqAsDyFwOEMgIwTaBuEcCuGmA}CeAqCeAsC_@iAa@mA]kA]oA[oAc@iBc@qBe@cCi@gDa@sCUiBQ_BQiBo@sG{Fwm@eA}KuAsOcBoQiBiRaCyVwAsNc@gEc@sEYeDQsBMqBOwBMsBKwBMqCs@oQ}@uU[kIU{FYcISoGKwCMiDGiBe@iN_@_Kg@gNs@gT[wI]gJg@qLMuCGgB[kG[wHk@{NkAqZk@mNIuBEwBKoEQqMGqDGsDGkEGmFEuDGoCEwBEwAG{AEuAGyAWkFk@wLUkEi@{JQoDg@{Ki@wKa@cIYiFQoDUiEYiFMqCMuBOqDIuBUmFSkEOqDYiGYiGWkFSqDa@aIg@_J_@eHc@_J_AkRk@yKa@eIOoDMqD[aKOkFIuDi@mSk@{SCs@Cs@SeHOoEEwAE{@IuASsCMwAIw@SiBQ}ASsAa@oCc@iCG[_@mBk@eCYqAm@gCm@eCiAwEcBeHw@aDiAuEeBgHiCsKwB{IeBgHeBgHk@gCWuAk@oE_@kCQsAOwA]kDUoCk@aHwAgQmBuUgBwTkAsNg@gGo@eIw@{J_@oE]iEQsBYoDUsCUqCa@gFu@}IiAkNEo@SaCQwBKwAkBeUM}Ae@wFUwC[oDYmDOsBGs@IeAKuAI_AEy@IuAE_AGsAC_ACu@Ac@CsAAe@AwA?y@?{@?{@?mABgB@c@@u@B}@DqAF}ABy@D{@F}@Bg@@OF{@J{APuBPeBHy@Hm@BSL}@F]LaAHe@DWJe@n@gD\\mBToALw@L{@Ly@PyAPqBB_@BYDy@HwB@w@BaA@wB@{A@sCHuODkHDaJFaLDcE?oD?_A?}@CyAAy@C{@Cy@Ey@E_AKuAIcAEe@KeAGc@Io@Ec@QkAUsAUuA_@qBaAgFkJgh@eN_v@eBmJu@aEg@kC_@iBg@kCa@mBs@cDYqAi@gCgA{Eu@_D]sAkAuESs@e@iBq@cCe@cBk@oBs@eC}AgF}AgFUu@sB{GuAqEsAqE}AeFqAqE_BmFeGgSiBcGg@aBy@kC{BwHiBeG}AgFsB}G_CyHs@_Ca@uAsHuV[gAgD}K}BwH_A{Cq@{BiAwDiBaGuAsE}AgFgAuDu@aCgImXeDaLiTat@qAqEg@iBi@qBi@_Cc@mBa@kBYsAYqAWsAg@kC]mBO}@i@gDYsBQqAYsB[mCi@_FU{B[kDc@}FMeCOwCKcBIiBKeDG_CEwAGsDCwBCsC?wC?oD@wBBsD@y@DyBFqCFsDTeKr@w]T}Jj@eYDwBDuB?wA?}@?iAAiBAyACsAK{CGwAKwBQeCSeCSwBAKSeBYwBi@{D_@qCg@oD_AyGg@mDs@_Fe@mDy@}Fy@wF]aCe@cDgF{^E]EUE]CUKs@y@cGq@{Eg@mD}@qGsB_OcAeH?Gm@qDg@cDs@gF_@kCc@qC_@oBa@mB_@sAe@cBa@sA_@gA[y@Yw@Yo@Yo@m@mAe@}@iEqH{BuDcCcEcCuEgAiBiAkBiAkBwAaCyAcC{@uAgAkByAeCwAaCuAaCiB{Cy@uAgAiBy@wA{@wAy@wAwAeC[m@e@cAc@{@_@{@c@cAc@iAc@iAa@iA_@kAa@oASs@]mAUy@YmA[qAa@oBi@kC[kBg@kCm@eDKm@Km@Mo@WwA]kB]kBWsAWuAa@iBUaA[gAMc@Og@Us@a@iAq@}Ae@eA[q@g@aA]k@_@m@wBiD{A_C{@oAm@_Am@}@}@uA{@qA{@sA{A_CkBsCiBqC}@sAi@aA{A}BiAgB}AaCyA{Bm@_A}@sAkAiB}@uA{@sAm@_A{@qA}@uAm@}@y@oAq@eA_AoAq@{@s@{@eAgAq@q@u@q@y@o@u@k@q@k@w@i@g@_@w@k@w@o@u@m@c@a@s@o@u@u@u@w@q@s@_@e@cAmAo@y@o@}@m@}@m@}@[i@QW[i@i@aA]o@[m@[m@Yo@Yk@Yo@q@}Aq@eBo@_B_A}Bq@aBgAqCc@iAcBeE_BaEiAuCkAsCUm@o@{AcAcC_AuBw@}AMU[m@i@aAMUMU]i@]k@kAeBw@eAyBqCiDyDwCgDeCsCqAyAuA_BsA}A_AgAc@e@u@u@a@a@QOw@o@w@m@iAs@{@c@UMc@SsAg@k@SQG}@UgB_@}D}@yHgBcH_BOEkDw@eFkAyFqA{D_A{D}@mA[uEgAuLwCsA[y@Si@Mk@O}@WSESGe@Oi@SgBq@e@S}@a@_Ae@e@Uq@_@o@a@[QgAu@eAw@}AkA_EyCmG}EgDgCmCqBoCuBmDmCqCsBgDgC}EqDwCyB{AkAyAiAkA{@{AiAkA}@YUkCoBoFcEoB{AwAgAWS{AkAKI_Au@kCqBaAu@cCmBeCkB_DcCyI{GaAs@_BmAiBuAi@a@aCiBmByAsAeAo@i@MKmBcBsCeCqCeCQQu@o@kBcBiBaBaDuCsCgC{BqByAqAu@q@iAcAa@_@w@q@yAsAkAiAaA_AkCoCuA{AgCsCuBcCaGwGoGiHqGiHkCyCq@u@uA{AeBqBaAgAeAkAiAsAo@q@_AeAwRsTcDyD]]eAkAqAyA{AcBiF_GSUkFeGgCoCkFgFoCsCw@w@wAuAyBkBuAuAwCyCoEsEy@y@gBiBs@u@mAoA_A}@u@w@a@c@kAmAqBqBwAwAo@q@UWOOgAgAyB{BsBuBW[YYUYQUW[MSIM]i@_@q@Yk@Yo@a@gAWu@Su@IYSw@G]GWG[OaAa@cD]sC_@qCo@eFiA}IaA}H]qCYuBqDyYs@sFi@kEUgBKs@uAeLWsBEa@I{@IeAEk@Ew@KgCEiACsCAyA@uBB{ADuANqCNwBPuBZoDp@eHrAsN~@}JHcAF{@F{@FcAFeBBcB?eA?q@CsACaAI{AIgAG_AKaASwAO_AMu@YuAQu@]oAe@{AsAaEqJmYwLk^{@eCs@oBaAiCg@mAs@_ByA_Dy@}A{@wAy@sA]i@q@aAo@}@o@{@q@s@c@c@c@a@y@o@y@i@w@a@]O[Kk@Qe@MaAQaAKy@Em@Ay@@q@BuCHaELcELqUx@sCJqIVsELmBBsA?yACaAE{@GuAKuAQmAQgASsAYiBa@sAa@qAa@uAi@mAg@{@_@iCsAmAs@s@c@k@a@aAq@m@e@y@q@s@m@u@s@iAeAcBkBeAmAoAaB_AuAe@u@e@u@sBqDqC_Fy@{A_D{FmHwM}N{W}K_SuF}JyDaHcB}CyAeC{@uAm@{@_AsAq@{@a@g@qA{AwA{AeAeAoBeBw@o@wAgA}@k@mBiAyBmAg@UoAk@{@_@iLkEyIgDiNkFyBy@s@Yq@YyB}@k@Ya@SmAs@YSYQ}@q@iA}@u@q@gAgAuBcCq@y@oEyFs@aAo@}@k@_Am@gAu@yAaAuBe@gAg@sA}AcEy@}BgAwCcGaPiBaFaAeCcJwVsD{JuC}H}@cCgB{E{@sBoAmCsAiCiAqBq@gAoAmBEEAAQSa@c@e@k@oAsBcBgCkAiBk@w@[c@kKePIMe@q@S[e@u@Wc@{BmDaDqEQYQWkAeBeA_B{@qAQYq@gAcD_F_B_CyBaDe@o@_AsAoAmBWa@Yc@u@kAuB_DoAqB_@k@a@i@oBaDiDqFuB_DOQaBaC_G}Iu@oAwHiLw@gAEGi@s@mBwCcA}AoAuBgBiCaBeCsAmBs@iAyAcC}BeEgAuBgAuBuAmCsFuKoAaCmBwDeIyOsEaJqIkPsCuF_@u@}CaGcDmGyAwCs@sAgAqBuAoCmBsDaAiBsAgCuAkCuAoCwAoCsAkCgB_DWa@q@gAyAuB_@g@}@iAeAqAi@m@i@i@s@u@wAsAkB_B}AsAiAaAmBaBwDcDkBaBs@o@{A{AsAyAcC{C}A{BqAqBgBqCm@cAwA{BgCcEaA{AqBcDoAoBwAaC{AaCkAiB{AcCq@eA[i@MS{BoD{EuHMSm@aAQU]k@{@sAm@aAk@}@mAmBu@mAq@eAeIsMoD}EcN{PwGkIsAcBmDmEmA{As@}@mA}AcAoA_AmAq@}@Y]mBeCoAaBu@aAw@eAiAuAqAcB}@gAo@w@kMcPiCaD_c@si@kL}NmBaCqCkDuCqDsAaBeEkFkEqFaBsBy@eAy_@af@iCaDsCqDgHaJaFiGeAsA_LqN{CyDcBwBcBwB_AkAgFsG_AkAgLyNgEmFeJgLuAgBoA}AoA}AaAoAaAkAsDwEgJmLq@{@oJuLgCcDgAuAqA}Aa@k@o@w@q@y@q@{@m@w@sAcBq@{@q@y@_@g@q@y@o@{@s@}@[c@SW[c@OU_@i@[g@i@}@Q[k@aA[m@i@cA]q@Yk@Ym@g@kAWo@e@mAWq@Um@Yw@Us@Sm@Ww@]mAUw@I]YgA]wAYmAWqAYyA]kBa@mC]uBYoB[sBc@oC[mBSwAMu@U{AYkBUyA[kBU{AKu@UyASqAUyA[mBSuA[qBc@oC[sBa@mC[oB[sB[sBWsAUoAQy@YqA[uASw@YkAi@iB_@oAQg@Mc@c@oAc@kA[y@Yu@Se@Yo@c@eA[o@]q@[m@[m@[m@i@_Ak@aAaBoCgKaQo@eAoEuHaJiOiGiKgB{CmDaGwBoDcCeEyAeCwBoDk@cAk@aAgByCsBgDqBgDoEqHU_@EGYg@{AeCgKoQqDgGeFsIsZch@sMuTuBoD}CkFqJaP]o@gTm^QYQYm@eA[q@cBwCiD}FEGmCqEiAiBuA}Bs@oAwDoGeCgEiDuFgAaBmBoCmB{BwA}AiBiBqC_Cu@m@s@g@_Ao@}@k@aAi@y@c@[OkEwBaCkAkCoAs@[aBy@wBeA{E_CiCoAuBeAoAm@aCkAsCsAkB{@_Ae@sAq@}@e@_Ag@}@i@{@m@cBmAoAcAe@a@g@c@{@w@y@u@g@g@w@{@w@}@mA{Aw@eAo@}@g@y@k@_AeA}AaAqBkAuBw@yAaByCwAkCeCuEsByDiBgDqBsDqAaC{AqCiC}EoBqDaIyNcKkR{Pq[sOoYwMoVkDsGuEuI{Yyi@kDqGaG{KoCcF{GgM}LeUm@kAIOk@cAaB_DiAsBcAmB_@m@gBmDsD_HoBqDuByDaAiBm@gAqAcCm@iAc@y@iAyBgBeDmCcFcB}CsAeCq@oAq@qAmAyBg@_AsAaCcCsEwDeHq@oAq@mAo@oAqBuDsBwDqA_CoA_C_DaGqBsDaB}CU_@kAaCsB}DqAcCqBuDqCkFwFeKsFeK_DaGmCcF{EcJ_CmEaD_GaDaGaJwPcCuEgCwEiDoGQYgCyEcAmBs@sAoVqd@uB}Dq@qAq@oAq@qAgCwEuAgCs@qAcIgO}BiE{FmK_@q@_@q@_@s@s@sA_@s@i@cACEeE{HaFiJSc@oF_KgAwBw@_Bu@}AM[mBmE]{@o@wAy@sBq@_B}@wBQa@m@wA}@wBo@}Ac@gAw@mB_@{@gAkCaAaCaA_CeBgEiAqCmAuCwh@ipAc@gA?Aw@kBcSif@_A}}BgDeIaC_G_CyFeBeEwAoDoA}DiA}DcZajAUy@oQwq@mKea@gRcm@aOyc@uFkQsJcZcG{RgHuTySgq@qHgVsJm[oG_Ts@}BqGkSsR_n@oNqd@gEkN{Ku\\qBgGwG_S_EsLy@gC}AqEwCwIsA_EsAaEwCwIeFkOoF}OgEkMwBgHqGgTkKc^qGuTgA{DoFoQ_A}C}F_SqByGeCoIcCmIcH{UkI_YmDwLuHsVoLga@mEuOwAcFsBcHuDeMaCiI_Ke]eB{Fu@qCcAaDoH}Vc@sAo@eBYq@Wg@]q@_@q@]q@w@oASYY_@q@{@k@q@y@y@eAaASQMK[UWQc@[YQ]Qc@Wa@QaAc@_@O]MsA][I}A[}Ew@}@iGaAQc@Ia@Ia@IYGiA]e@O[MqAk@{@c@c@Y{@k@_@WWS_A{@c@c@]]c@e@[e@u@aAi@w@Ye@S]_@q@i@kAc@aAYu@[_AWy@Y{@sAmEmBmGuMyc@eCkImPuj@IWa^ulAsDcM_DmKuBcHoAcEsDeMs@eCy@gCu@iCm@qBs@cCi@iBi@gBy@sCk@iBs@aCyA_Fe@_Bu@iCoFuQmBsGoBwGqAmEaCcI_C_IuA{EaA_DuBiHeAiDuAwEeBuFmA}DcAeDqAiE_C{HcAoDs@gCaBuF}@}CgA{Dy@{C}AoFq@}BK_@Ss@{CcK_BqFM_@]qAgAoDm@wBcAgDoAeEe@_Bo@sBmAgEwAaFy@uCmAiEiAuDgAuDiAaEqAoEcAiDkBqGkAyD{@yCgAqDiAyD]iA]iAu@eC{ByHiHiViBiGuA}EqByG_BmFgBcGkBkGeFeQiC{I{BuH{CcKiCuI{AcF{AaFgB{Fq@}BcByFsBwGmBwGoDwLaGcSeFaQyAaFeH_V_EeNs@cC{GgUgAqDcCkIyAaFqCoJiBqGaBoGqGuWwA}F{@aDwEiRU{@Mk@mCuK{DuOiCeK{AeGoBkIkLod@mDgOyEmRyFsToKsb@?AaC{Jw@_Dq@kCmCsK_DiM{FcVm@oCMs@Mo@WwAw@aFa@sCg@oD}AwKgFs^qBgNm@gEy@eGaAgHoAeJ{AmKgAuHOqAS_BOaBOqAQmBMkBKcBIoBGsBEqB?mA@oA@uBDgCFwBFaBBe@HoAFcAHcALqAP{ANqA^sCRqANy@Hg@VmA^aBVeAj@qBz@wCnIqYzEaPpJc\\|B{H^sAbEcN|A{FBEFYrG_UzCiL|@}Ct@oCAaEt@_Dr@iDp@gDn@gDj@iDv@gFl@iEh@mE^oDXsCZqD\\kERwCLqBFqAHwANaEJuCJsENoGRiJ^mOPcINyFN}GTuJZ}MVuKb@sQPiIHsDBcB@aA?mAAwCCwBOkJMgKG_DAsACuAKeGOmJMmHKmGMuHKiGAqAKyFKcGEcCKoHMkIKqHG{CCoAImFEaBGyAU_FAUG}@g@kFa@sDWqBKo@SsAOy@WuAOw@WsAe@qBm@eCYeAw@kCeAkDu@gC_BgFyAaFyA{E{BqHqAiEmAaEsAmEeB{FoAgEs@cCmFgQ}BuHiAyDi@oB[qAa@oBWuAMy@Kq@U}AOwAOyAKwAG{@G}@GyAE{ACwACaB?EGmFEiEYk\\U}SAw@EgFM_NCcEEyEUsRg@gh@C_DQwNOgNCeBGqBI{AMiBWwC]eD_AeJkAsL_AcJq@qGImAMmAu@yHmAiL?AgAaLo@wG_@yD]{COiAOcAk@wCi@{Bs@kCk@gB}AgFuFuQkGwSsCkJoMqb@s@}BoCiJkBwFqLm@qAeEeQal@_HeUcFwPq@yB[cAiB}FcAgD_@sAgAoDq@yBc@{AQg@qGiTmAeE{@sCo@wB[}@oAcEm@mBs@sBYq@c@kAk@uAeAuBu@gB_F{LkAwCqA}CyAuDoJ{UkCqG_C_GoB_FqHaR_C{FsCgHuCiH}B{F}ByFoB}E_C}FoB_FwAoDiAsC}BwFa@gAw@wB}@{B{BwFkAsCiAsCwAmD}@{BuAmD}CcIsAoDy@_CyJiXyJkXKYqAmD{AgEuB}F_BmE{AiE_BkEeAuCeAuCo@eBcAuC}@cCa@iAy@}BgAyCeAuC{@_Cy@{By@_C{@_CeKeYWs@eB_FiBcFqD}J_CuGiBaFaCwGgAwCoAmDiBeFwIgV_BqEaC{GqAqDcFgNIW_AiCISoCqHiGyPgHwRm@aBo@eBo@cBc@kAe@gAYq@g@gAYm@{@cBcAiB}@wAk@aA]g@_@i@[e@a@i@q@}@_@c@q@{@s@{@eD{DsLoNcBoBaAkAaAkAaAmAs@{@o@{@o@{@o@_Ag@w@c@u@e@u@w@wAaAkBu@}Aw@kBcAkCYw@s@qBc@wAu@cCIUsQsl@iAsDq@}Bc@sAs@cCW{@}@{Cq@_C{@uCmBsG_BsF_@qAw@mC_CgIgDiL_A_DsAwEiAwD_BwFo@wBiAyDu@cCs@eCk@mBs@cCe@}Ac@yAq@aCk@mBu@eC]oAm@wBm@qB_@kAW_A}@}C_@qAk@iB]oA{@uC_AcDs@cCgBgGsCwJqAoE}BaIsAuEqAoEkLw`@wAaFsBeHqAsE}AoFsAsE{AoFiBiGqAuEsAuEgBiGwEiPgC}IoDeMgBiGs@eC_BcG}@gDcBoGaG{TwBeIuBaImFgS_DmLwBeIq@eCg@iBWw@Uo@Qc@Sc@Ym@Sa@Uc@Wa@U]U[Y_@]c@c@e@e@c@a@]USYQ[Ue@Y{Ay@gB_A}C_BkCuAqAq@KESMeB}@aB}@oAq@e@[e@]c@]e@a@q@w@QUQU]e@MSIKa@u@]o@Q_@Ug@Qa@Si@gAsC}@_Cy@wBoFqNkCaH}DiKcCsGaBiEsAmDM[cCqGy@wBeBoEkBaF_BeEsCmH_CgGqBmFeCsG_BcEACiAwCc@kAWq@eCsGqCkHcCsGiAsCiCoGWk@[q@e@cA"
    },
    "start_location" : {
    "lat" : 43.83811679999999,
    "lng" : -79.07197540000001
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "67.3 km",
    "value" : 67287
    },
    "duration" : {
    "text" : "45 min",
    "value" : 2673
    },
    "end_location" : {
    "lat" : 45.4623177,
    "lng" : -73.6095157
    },
    "html_instructions" : "Continúa por \u003cb\u003eAutoroute du Souvenir\u003c/b\u003e/\u003cb\u003eAutoroute 20\u003c/b\u003e\u003cdiv style=\"font-size:0.9em\"\u003eEntrando en Québec\u003c/div\u003e",
    "polyline" : {
    "points" : "iw|rGvcxdMqC_GqAoCe@aA{AeDACsAqCmDoHwGmNcHcOcEsIu@aB_AqBaBkDwBsEsBkEUe@iB{DoAgCk@mAs@sAw@_BqAkC_AgB{@kBO_@O_@Wo@a@oAM_@I[IWK_@EQU{@WoAWwAa@{BUsA_@}BcGu^k@gDyAoIaGg]aBoJY}Ak@yCa@sB_@cBc@gB_@sA_@qAg@eBk@cBOg@Sg@e@mAy@qBo@}Aq@_Be@kA{@qB]y@mAwCg@kAmAyCaP_@}@sBs@eBo@}Aq@_B{@uByAmDyDeJ]}@aBgEyCaIaFsMkCeHkCcHiDcJw@qBkCcHwB{FoCcHeBwEuCyHcCoGaCqG}AaEe@mAiCcHmCiHeDoIcA_CmAsCeK}SaC}E}B{EqCuFwBoEKWaAwBUe@uAaDcAgC}@aCk@}AeA}Cu@{Bs@}BYw@sN{c@c^yhAc@sA}@qCqA_EcAcDyB}Gu@_Ci@aBc@kAw@oBSe@Uk@y@gBcBeDi@aAs@mA_@o@e@w@e@s@a@k@]e@a@i@aAmAa@i@cC_De@m@MOiIwJ_d@sj@kAwA_O_RQUsNiQ[a@}BsCup@uy@sDqEuC}DY[W]sCmDkBcCc@m@kBkCiC{Dk@{@uAuBcA}AoEaHyBeDiBuCs@eAw@mAgBqCiDoFy@oAu@qAk@cAk@cA}@iB{@kBcAeCg@qAsEwMgJqXuIeW_B{E}AuEqGiRoDsKw@kC]eAm@oBqAeEgB{FiAsDcL{^{Sqq@}E_PyLi@Mc@{A}EuMwb@iAmDm@sBaAyCiB_GiGiS}DiMaDiKgB}FwBcHeBwFyBeHMa@a@oA}Qam@iEgNu@eCuAqEoDiL_BkFUs@GQoQ{k@_AwCoBoGqPwi@sG}S}C}Ja@iA_BaFmA{DaAsCKYsDqLuAsEkDcLoEyN_BgFy@iCs@mBu@mB_AaCcA_CqAoC{AwCu@wAi@aAaA_BgDiFgBmCw@iAsB{CwH}KaDwE}BiDqAoBOSoAkBmAmB[e@k@}@oAsBS]gAgBiCgEmAsB{AeCkDyFuBoDqBeDWc@EEMUc@s@w@qAaG{JmEkHaBmCsAuBs@cAa@m@{@aAMMg@g@q@o@aAy@_DgC}AoAkCwB][IIYYuAuA}BgDu@oAcAsB_A{Bm@_BcBmEmFyNm@{A{B{F_@aA_A{BeDqIu@qBkAyCa@iAcAmCk@}A}AwDgAeCWo@a@}@i@mAi@kAWm@e@gA[y@o@yAeAiCcAiCgAqCa@}AQ}@QoAG}@G}AEmC[kSGgEMiHE_BCaDa@iUAm@Am@EgDIkEQuEIgBIqAMeBQkCc@_Fi@yFmAoMUqBKy@OyAIi@Ku@SuAGWWgB]qBg@mCc@sBYkAo@qCwAsF{BcJyHwZgAoEi@uBi@sBG[uAsF[mAW{@W_AWq@IUq@}Ag@gAk@eAMWw@qAEGg@u@Yc@[_@g@k@]e@}AsAu@o@}E_E}AoAgA{@y@m@eAy@_BmAeBwAqAiAwBqB}AsAkAaAIKi@c@ECQOgLoJGECCMK[YCAKKe@]g@e@w@u@[_@c@g@QWQWq@cAk@eAg@eAQa@g@kAa@gA[}@W}@Og@U_AS{@QaAUsASqA_AiHa@sCQiACSIk@OaAQsASsAUuAQaASaAS{@cAsDc@oA_@kAa@kAa@oA_@mA_@qAe@eBw@yCiAuEuAsFiAmEq@oCq@kCk@{Bi@yBa@eBU{@yAmGw@aDq@mCaA{DuDyNm@{BwAsFiAiEYaACKYgAcAiDiAiEwAqFiC_KYeAYeAkF{S{@oDmA_Fo@iCoBsH}AgGuAmF{@gDgAkEi@{Bs@gD_@iBe@}Ba@aCg@sC[mBm@aEWoB[cCUkB]yC[}CWyCSoBUeCSsBEg@O{AGg@[yC]sD_@kEg@yFmAiNYeD_AyKYaDc@}ESiC]mE]wE]cE[qDaAiLs@iIo@cHeA}L_AsKa@iEi@kGc@eFMuAg@wFEg@IwAMuA_@cDq@sFy@cGu@oEaAkF_AmF}AuIo@iDsEqWG_@Ie@ACIa@kAwGoDqSiBcKOy@uEyVqA_HiAoGa@{Bi@wCiCoNm@}DmAeI_CyOaAcHm@_FYaCgAaKsC}Va@gD_AgIaAuG_@sBKm@g@aCq@wCWcAe@cBq@}B_A{CcBsFwAqE_DaKiAoDs@_CYiAgAeEEO[}Am@{C[mBYgBg@kD_@}CU}B_@aFWcE[yFKaCGsAOgEEoAMqFCoAAaBAgDAmA@uGHaN?]DgF@uA?OF}IL}SRoa@h@sbAFqNBsB@iD?uBDiDH{CJ{CRyCDo@BWDg@t@wHd@_EdA}Jf@{EN}APwAFw@HaABs@Bq@By@?_@?{@?u@Ak@C{@Co@IeAEs@Gi@?GAEGa@Im@Ks@e@uCQeAe@wCa@cCMq@UyAMw@QsAKcAOcBEs@Es@Ae@A]?U?s@@mA@qC@wCBkDFgE@iH@_BD{FDiG@uC@{@@yAHcQ@}@?C@_ADeLDqI@kFB_CBaFHyODaJTe]H{NDyFBgHBoEBkE?kAF}KBkD?Q@Y?A?i@?C@a@@kB?}CHsEJoET_JFmBFaDFgCDeCHcLDiCDsFBmEDyHFoKF_I@mAB_F@gC@gADy@DgAHgALuAHs@Ly@Jy@TqAH_@VkARq@V}@z@sCd@{AbBoFj@gBH]l@qBb@cB\\{AlAyFvEcU\\iBHg@TyANeAXsBRgBHeAHoAFiC@q@h@qQBoA?g@?W?kAAy@Cs@Cm@Ca@AIUsBO_AOy@[uASs@Oc@EMIQOc@CGGOCESg@aAcCkCsGOk@kAqCuAiDaA}BqAyCeBuD}DwIyAcD{@gBc@aAgAcCs@_B}AyDi@wAg@wAi@yAm@cB_@uAc@mAcC{G_BsEsAyDuB_GyAiEo@cBmD_KmAkDqAmDu@oBQ]Q]gAiCuAuCaAsBiB_EyByEyB{EaFwKaE{IuBuEaHuN"
    },
    "start_location" : {
    "lat" : 45.2083667,
    "lng" : -74.3482841
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.2 km",
    "value" : 226
    },
    "duration" : {
    "text" : "1 min",
    "value" : 10
    },
    "end_location" : {
    "lat" : 45.4635675,
    "lng" : -73.60723279999999
    },
    "html_instructions" : "Mantente a la \u003cb\u003eizquierda\u003c/b\u003e para continuar por \u003cb\u003eAutoroute 720 E\u003c/b\u003e.",
    "maneuver" : "keep-left",
    "polyline" : {
    "points" : "ojntGnzg`MaAsByBeF}@oB"
    },
    "start_location" : {
    "lat" : 45.4623177,
    "lng" : -73.6095157
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "4.1 km",
    "value" : 4059
    },
    "duration" : {
    "text" : "3 min",
    "value" : 178
    },
    "end_location" : {
    "lat" : 45.4910209,
    "lng" : -73.5747258
    },
    "html_instructions" : "Mantente a la \u003cb\u003ederecha\u003c/b\u003e para permanecer en \u003cb\u003eAutoroute 720 E\u003c/b\u003e.\u003cdiv style=\"font-size:0.9em\"\u003ePartes de esta ruta podrían estar cerradas en ciertos horarios o días.\u003c/div\u003e",
    "maneuver" : "keep-right",
    "polyline" : {
    "points" : "irntGdlg`MsD_ImBcEgA}BKSsAuCeCwFYi@]o@cAcBs@gAOUcAsAo@w@m@u@i@i@KKu@u@m@g@yAqAo@e@a@UUOyE}Bk@S?AsAg@o@Ua@MeA[_@Mw@WME_@OEAUIQG}Ag@}CaAs@WuBs@y@Wy@Ye@OWI]MWKk@W?Ag@Uu@c@q@g@w@o@o@k@o@s@q@w@m@{@a@q@}@}AUa@aA{Ac@u@]k@yDoHiBgDwO}YGMIMcAoBe@}@o@mAsByD_B}COYIOGKS]aBwCq@mAq@iAaA_Bm@aAoAkBmBuC_@g@]e@sAiBiGqI"
    },
    "start_location" : {
    "lat" : 45.4635675,
    "lng" : -73.60723279999999
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.8 km",
    "value" : 844
    },
    "duration" : {
    "text" : "1 min",
    "value" : 70
    },
    "end_location" : {
    "lat" : 45.4958323,
    "lng" : -73.56690469999999
    },
    "html_instructions" : "Toma la salida \u003cb\u003e4\u003c/b\u003e hacia \u003cb\u003eRue de la Montagne N\u003c/b\u003e/\u003cb\u003eRue Saint-Jacques\u003c/b\u003e",
    "maneuver" : "ramp-right",
    "polyline" : {
    "points" : "{}stGaaMA[A??AMY_AwAiEgGa@s@}@aBs@yAWo@_@sA[qAGUs@sBUu@YeAcBcHK]IMUUSOIEMIUE[@QAO?KCGACAECGEIEEEKO"
    },
    "start_location" : {
    "lat" : 45.4910209,
    "lng" : -73.5747258
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "66 m",
    "value" : 66
    },
    "duration" : {
    "text" : "1 min",
    "value" : 14
    },
    "end_location" : {
    "lat" : 45.4961802,
    "lng" : -73.5675859
    },
    "html_instructions" : "Gira a la \u003cb\u003eizquierda\u003c/b\u003e con dirección a \u003cb\u003eRue Jean d'Estrées\u003c/b\u003e",
    "maneuver" : "turn-left",
    "polyline" : {
    "points" : "}{ttGbp_Ms@BQf@"
    },
    "start_location" : {
    "lat" : 45.4958323,
    "lng" : -73.56690469999999
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.3 km",
    "value" : 295
    },
    "duration" : {
    "text" : "1 min",
    "value" : 86
    },
    "end_location" : {
    "lat" : 45.49822349999999,
    "lng" : -73.56518009999999
    },
    "html_instructions" : "Gira a la \u003cb\u003ederecha\u003c/b\u003e con dirección a \u003cb\u003eRue Saint-Antoine O\u003c/b\u003e",
    "maneuver" : "turn-right",
    "polyline" : {
    "points" : "c~ttGlt_`M_AoAaAoAKKYQgB_CgAwA_AkA"
    },
    "start_location" : {
    "lat" : 45.4961802,
    "lng" : -73.5675859
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.4 km",
    "value" : 359
    },
    "duration" : {
    "text" : "2 min",
    "value" : 100
    },
    "end_location" : {
    "lat" : 45.500069,
    "lng" : -73.56896190000001
    },
    "html_instructions" : "Gira a la \u003cb\u003eizquierda\u003c/b\u003e con dirección a \u003cb\u003eRue Mansfield\u003c/b\u003e",
    "maneuver" : "turn-left",
    "polyline" : {
    "points" : "{jutGje_MIPM^_B~DUj@GRmB~E}AEO^"
    },
    "start_location" : {
    "lat" : 45.49822349999999,
    "lng" : -73.56518009999999
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.2 km",
    "value" : 231
    },
    "duration" : {
    "text" : "1 min",
    "value" : 62
    },
    "end_location" : {
    "lat" : 45.5018118,
    "lng" : -73.56734449999999
    },
    "html_instructions" : "Gira a la \u003cb\u003ederecha\u003c/b\u003e con dirección a \u003cb\u003eBoulevard René-Lévesque O\u003c/b\u003e",
    "maneuver" : "turn-right",
    "polyline" : {
    "points" : "mvutG~|_`MuBoBiAaA{CqC"
    },
    "start_location" : {
    "lat" : 45.500069,
    "lng" : -73.56896190000001
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "15 m",
    "value" : 15
    },
    "duration" : {
    "text" : "1 min",
    "value" : 14
    },
    "end_location" : {
    "lat" : 45.5017123,
    "lng" : -73.5672184
    },
    "html_instructions" : "Gira a la \u003cb\u003ederecha\u003c/b\u003e con dirección a \u003cb\u003eBoulevard Robert-Bourassa\u003c/b\u003e",
    "maneuver" : "turn-right",
    "polyline" : {
    "points" : "iavtGzr_`MRW"
    },
    "start_location" : {
    "lat" : 45.5018118,
    "lng" : -73.56734449999999
    },
    "travel_mode" : "DRIVING"
    }
    ],
    "traffic_speed_entry" : [],
    "via_waypoint" : []
    }
    ],
    "overview_polyline" : {
    "points" : "emiGhmocNqO_@kAaJ_Bq_@sL_o@wLq|@_IaR_L|Cyc@Me[vSug@nEsVwH}W{BuZuWoVgc@rAkk@u\\o}@ee@aPig@ib@w|@n_@kjBvJ{BdSkp@fGwLmEwCclBsP{jB}r@ggFuh@{|D}W{z@iTko@oM}{AiYg_ExOmaAfJqs@kKmh@g~A{vCioBqhEqAomC{a@stAgXi}B}z@}~Fog@szDbAqsBCkhC}yBu|NkCixBno@ycBxQc}@kOkvCmm@ckJi_AexCm[maDga@__IsiAuiJmbEyzZagBwvMkSypEkT_~C_cAk_H|Y{fB_P{qC}l@q_C{S_i@yA}dAwj@mkB{^}jCbVi|DzUqoAkjA_Lku@g_Ly\\e_Dud@ilDwh@ufBeh@}hBgT{jAkm@wv@q{@k_G_z@ifAeU{w@kRuaCieAsrEiw@uvAku@{vDez@_kCgCyqAoB}gBwXkw@om@q}AweBizEwaBkhF}oByM}hBqsKc|@_iDowAyrJ_B_v@lY}eBgEajByh@skH{Dkzc@k]_vCeu@yuCyF_uAgBe_Bsa@mxBaDmfCiTasFmMqcJw]sgRsVaeScNggBxdA_tDdw@gxGh@kvAo[wz@qj@_iCi|@orEyd@oAaj@yn@knAsvDmn@msJmm@kvOal@o~Cmf@{cGjJazDyp@qaEivA{yEkoAaF^yE}f@swDoPmt@wn@ofAuc@gtAmu@mvAiu@{{@km@qrAgd@}j@ie@_RuoBwr@svBiBcmB_kB}sBmzBqc@kz@sTihBjGkpA}@gc@eo@kgBeVuPuoAC_g@uPol@_|@_dA}BgeAgd@s^}a@_w@isBidAi~AytAyvBihB_fDmvAojB_zIkaL{t@sdAuWirAgZonAohDuzFyaAkbBon@_k@spAi|@}aHgoMi{EqiJwDi}H{uDuiM_|EqsOivAm_E}|@gQcTiQczBonHesAcrE}~Eo|PsrBizJyAcq@TqbAzw@atCzLsrAbBehGkFmoAa\\}jAc]qqAiCmoBaMajDeSowAsdCyeIyFmqMsrAigDwi@ir@ch@s~Auz@cvC}vBcvHeSgl@e_@oTqAcxBkfBsaEwt@u}CizDevJwfA}bDsqA_bBinCgvD{{HwqVwyA_Ckc@sg@aj@cpAaX_q@}DgdBkj@yzCqaAmAsYq{@giB_}Hi`@sqEcfA}zGqj@q~CpJoxGwF}|@zBu}EbDmgDz^c}B}^onAcqAyaDal@umAg[eUsm@g]wgAmmBc^ck@iLyLqJrVgI{I"
    },
    "summary" : "ON-401 E",
    "warnings" : [],
    "waypoint_order" : []
    }
    ],
    "status" : "OK"
    }


    andresflorez12 
    Participant

    tambien puedes probar este código https://maps.googleapis.com/maps/api/directions/json?origin=7.136394,%20-73.130499&destination=7.122829,%20-73.111162&mode=driving&units=metric&key=
    Si quieres hacerlo por medio de transportes, y te devuelve esto


    andresflorez12 
    Participant

    {
    “geocoded_waypoints” : [
    {
    "geocoder_status" : "OK",
    "place_id" : "EjhDbC4gOWEgIzE1LTMxIGEgMTUtMTI5LCBCdWNhcmFtYW5nYSwgU2FudGFuZGVyLCBDb2xvbWJpYQ",
    "types" : [ "street_address" ]
    },
    {
    “geocoder_status” : “OK”,
    “place_id” : “EjZDbC4gMzggIzM0LTUgYSAzNC00OSwgQnVjYXJhbWFuZ2EsIFNhbnRhbmRlciwgQ29sb21iaWE”,
    “types” : [ "street_address" ]
    }
    ],
    “routes” : [
    {
    "bounds" : {
    "northeast" : {
    "lat" : 7.136381399999999,
    "lng" : -73.1105407
    },
    "southwest" : {
    "lat" : 7.1227882,
    "lng" : -73.1304902
    }
    },
    "copyrights" : "Datos del mapa ©2016 Google",
    "legs" : [
    {
    "distance" : {
    "text" : "3.5 km",
    "value" : 3527
    },
    "duration" : {
    "text" : "13 min",
    "value" : 765
    },
    "end_address" : "Cl. 38 #34-5 a 34-49, Bucaramanga, Santander, Colombia",
    "end_location" : {
    "lat" : 7.1227882,
    "lng" : -73.1111552
    },
    "start_address" : "Cl. 9a #15-31 a 15-129, Bucaramanga, Santander, Colombia",
    "start_location" : {
    "lat" : 7.1363498,
    "lng" : -73.1304902
    },
    "steps" : [
    {
    "distance" : {
    "text" : "18 m",
    "value" : 18
    },
    "duration" : {
    "text" : "1 min",
    "value" : 4
    },
    "end_location" : {
    "lat" : 7.136381399999999,
    "lng" : -73.1303288
    },
    "html_instructions" : "Dirígete al \u003cb\u003eeste\u003c/b\u003e por \u003cb\u003eCl. 9a\u003c/b\u003e hacia \u003cb\u003eCra. 16\u003c/b\u003e.",
    "polyline" : {
    "points" : "eypj@phj}LE_@"
    },
    "start_location" : {
    "lat" : 7.1363498,
    "lng" : -73.1304902
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.2 km",
    "value" : 203
    },
    "duration" : {
    "text" : "1 min",
    "value" : 82
    },
    "end_location" : {
    "lat" : 7.134596600000001,
    "lng" : -73.1299563
    },
    "html_instructions" : "Gira a la \u003cb\u003ederecha\u003c/b\u003e en la 1ª intersección hacia \u003cb\u003eCra. 16\u003c/b\u003e.",
    "maneuver" : "turn-right",
    "polyline" : {
    "points" : "kypj@pgj}Lh@Gh@Gf@If@Id@Gd@If@Eh@EPCNC"
    },
    "start_location" : {
    "lat" : 7.136381399999999,
    "lng" : -73.1303288
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.1 km",
    "value" : 124
    },
    "duration" : {
    "text" : "1 min",
    "value" : 23
    },
    "end_location" : {
    "lat" : 7.1338954,
    "lng" : -73.12912439999999
    },
    "html_instructions" : "Gira a la \u003cb\u003eizquierda\u003c/b\u003e para continuar por \u003cb\u003eCra. 16\u003c/b\u003e",
    "maneuver" : "turn-left",
    "polyline" : {
    "points" : "gnpj@fej}LLCNClB_D"
    },
    "start_location" : {
    "lat" : 7.134596600000001,
    "lng" : -73.1299563
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.1 km",
    "value" : 133
    },
    "duration" : {
    "text" : "1 min",
    "value" : 16
    },
    "end_location" : {
    "lat" : 7.133237100000001,
    "lng" : -73.12812289999999
    },
    "html_instructions" : "Continúa por \u003cb\u003eCra. 13\u003c/b\u003e",
    "polyline" : {
    "points" : "{ipj@~_j}LFIDIz@yAx@yA"
    },
    "start_location" : {
    "lat" : 7.1338954,
    "lng" : -73.12912439999999
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.1 km",
    "value" : 136
    },
    "duration" : {
    "text" : "1 min",
    "value" : 21
    },
    "end_location" : {
    "lat" : 7.1325406,
    "lng" : -73.127105
    },
    "html_instructions" : "Continúa por \u003cb\u003eCra. 18\u003c/b\u003e",
    "polyline" : {
    "points" : "wepj@vyi}LHKDK|@wA|@{A"
    },
    "start_location" : {
    "lat" : 7.133237100000001,
    "lng" : -73.12812289999999
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.1 km",
    "value" : 132
    },
    "duration" : {
    "text" : "1 min",
    "value" : 22
    },
    "end_location" : {
    "lat" : 7.1318962,
    "lng" : -73.1261052
    },
    "html_instructions" : "Continúa por \u003cb\u003eCra. 19\u003c/b\u003e",
    "polyline" : {
    "points" : "kapj@jsi}LDGFKx@yAv@wA"
    },
    "start_location" : {
    "lat" : 7.1325406,
    "lng" : -73.127105
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "85 m",
    "value" : 85
    },
    "duration" : {
    "text" : "1 min",
    "value" : 13
    },
    "end_location" : {
    "lat" : 7.1314698,
    "lng" : -73.1254701
    },
    "html_instructions" : "Continúa por \u003cb\u003eCra. 20\u003c/b\u003e",
    "polyline" : {
    "points" : "k}oj@dmi}LFMFK`@q@b@s@"
    },
    "start_location" : {
    "lat" : 7.1318962,
    "lng" : -73.1261052
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.2 km",
    "value" : 242
    },
    "duration" : {
    "text" : "1 min",
    "value" : 46
    },
    "end_location" : {
    "lat" : 7.1305302,
    "lng" : -73.1240873
    },
    "html_instructions" : "En la rotonda, toma la \u003cb\u003etercera\u003c/b\u003e salida en dirección a \u003cb\u003eCra. 21\u003c/b\u003e",
    "maneuver" : "roundabout-right",
    "polyline" : {
    "points" : "uzoj@dii}LFBFBF@F@H@F?F?HAFAHAFAFCFEFCDEFG@C@C@A@A?A@A@A?ABGBGBI@G?I?G?IAGAG?AAICGCIEGEGEEEG@o@@o@"
    },
    "start_location" : {
    "lat" : 7.1314698,
    "lng" : -73.1254701
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.1 km",
    "value" : 135
    },
    "duration" : {
    "text" : "1 min",
    "value" : 24
    },
    "end_location" : {
    "lat" : 7.129851599999999,
    "lng" : -73.1230726
    },
    "html_instructions" : "Continúa por \u003cb\u003eCra. 22\u003c/b\u003e",
    "polyline" : {
    "points" : "ytoj@p`i}LFMFKz@wAz@yA"
    },
    "start_location" : {
    "lat" : 7.1305302,
    "lng" : -73.1240873
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.1 km",
    "value" : 135
    },
    "duration" : {
    "text" : "1 min",
    "value" : 18
    },
    "end_location" : {
    "lat" : 7.1291679,
    "lng" : -73.12206619999999
    },
    "html_instructions" : "Continúa por \u003cb\u003eCra. 23\u003c/b\u003e",
    "polyline" : {
    "points" : "qpoj@dzh}LN[t@kA`A_B"
    },
    "start_location" : {
    "lat" : 7.129851599999999,
    "lng" : -73.1230726
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.6 km",
    "value" : 562
    },
    "duration" : {
    "text" : "2 min",
    "value" : 103
    },
    "end_location" : {
    "lat" : 7.130157199999999,
    "lng" : -73.11715289999999
    },
    "html_instructions" : "Gira a la \u003cb\u003eizquierda\u003c/b\u003e con dirección a \u003cb\u003eCl. 20\u003c/b\u003e",
    "maneuver" : "turn-left",
    "polyline" : {
    "points" : "iloj@|sh}LN[SKKiAKgAOuAOsAO_AAISeAAIAIMgAMiAQmAOkAOqAQqA"
    },
    "start_location" : {
    "lat" : 7.1291679,
    "lng" : -73.12206619999999
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.2 km",
    "value" : 180
    },
    "duration" : {
    "text" : "1 min",
    "value" : 42
    },
    "end_location" : {
    "lat" : 7.12857,
    "lng" : -73.116856
    },
    "html_instructions" : "Gira a la \u003cb\u003ederecha\u003c/b\u003e con dirección a \u003cb\u003eCra. 30\u003c/b\u003e",
    "maneuver" : "turn-right",
    "polyline" : {
    "points" : "oroj@dug}LtAOtAQhAKd@G`@C"
    },
    "start_location" : {
    "lat" : 7.130157199999999,
    "lng" : -73.11715289999999
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.3 km",
    "value" : 324
    },
    "duration" : {
    "text" : "1 min",
    "value" : 43
    },
    "end_location" : {
    "lat" : 7.1299163,
    "lng" : -73.114481
    },
    "html_instructions" : "Gira a la \u003cb\u003eizquierda\u003c/b\u003e en la 2ª intersección hacia \u003cb\u003eCarretera 66\u003c/b\u003e.",
    "maneuver" : "turn-left",
    "polyline" : {
    "points" : "qhoj@jsg}LJALAQw@IYIYISIOEKg@y@k@y@iAeBiAaB"
    },
    "start_location" : {
    "lat" : 7.12857,
    "lng" : -73.116856
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.7 km",
    "value" : 699
    },
    "duration" : {
    "text" : "3 min",
    "value" : 198
    },
    "end_location" : {
    "lat" : 7.1240599,
    "lng" : -73.11240819999999
    },
    "html_instructions" : "Gira a la \u003cb\u003ederecha\u003c/b\u003e con dirección a \u003cb\u003eCra. 33\u003c/b\u003e",
    "maneuver" : "turn-right",
    "polyline" : {
    "points" : "_qoj@ndg}LzBgAvBcAb@Kv@a@HEt@[|BaA^If@IhAOpBUdBSLAbAKdAMAIAK"
    },
    "start_location" : {
    "lat" : 7.1299163,
    "lng" : -73.114481
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.2 km",
    "value" : 189
    },
    "duration" : {
    "text" : "1 min",
    "value" : 54
    },
    "end_location" : {
    "lat" : 7.1243111,
    "lng" : -73.1108098
    },
    "html_instructions" : "Gira a la \u003cb\u003eizquierda\u003c/b\u003e con dirección a \u003cb\u003eCl. 36\u003c/b\u003e",
    "maneuver" : "turn-left",
    "polyline" : {
    "points" : "klnj@pwf}LPCESG_@Ia@Qy@IaACSKuA"
    },
    "start_location" : {
    "lat" : 7.1240599,
    "lng" : -73.11240819999999
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "0.2 km",
    "value" : 161
    },
    "duration" : {
    "text" : "1 min",
    "value" : 30
    },
    "end_location" : {
    "lat" : 7.122889,
    "lng" : -73.1105407
    },
    "html_instructions" : "Gira a la \u003cb\u003ederecha\u003c/b\u003e en la 2ª intersección hacia \u003cb\u003eCra. 35\u003c/b\u003e.",
    "maneuver" : "turn-right",
    "polyline" : {
    "points" : "}mnj@pmf}LdAKdAMfAMfAM"
    },
    "start_location" : {
    "lat" : 7.1243111,
    "lng" : -73.1108098
    },
    "travel_mode" : "DRIVING"
    },
    {
    "distance" : {
    "text" : "69 m",
    "value" : 69
    },
    "duration" : {
    "text" : "1 min",
    "value" : 26
    },
    "end_location" : {
    "lat" : 7.1227882,
    "lng" : -73.1111552
    },
    "html_instructions" : "Gira a la \u003cb\u003ederecha\u003c/b\u003e en la 2ª intersección hacia \u003cb\u003eCl. 38\u003c/b\u003e.\u003cdiv style=\"font-size:0.9em\"\u003eEl destino está a la derecha.\u003c/div\u003e",
    "maneuver" : "turn-right",
    "polyline" : {
    "points" : "aenj@zkf}LLtADd@"
    },
    "start_location" : {
    "lat" : 7.122889,
    "lng" : -73.1105407
    },
    "travel_mode" : "DRIVING"
    }
    ],
    “traffic_speed_entry” : [],
    “via_waypoint” : []
    }
    ],
    “overview_polyline” : {
    “points” : “eypj@phj}LE_@h@GpAQlAQlAOxAQNClB_DLSdCkEhCgECkEdAeBNF@Db@E^OPUJSHc@Ca@I]W]pGsKpA{BSKKiA[}C_@sCYcB}@kHa@cDjDa@|CYLAQw@Ss@Sc@m@eAuB_DiAaBzBgAvBcAb@K`Ag@rD}AfASnH{@lGo@PCESQaAQy@IaAOiBzGu@RzB"
    },
    "summary" : "Cra. 33",
    "warnings" : [],
    “waypoint_order” : []
    }
    ],
    “status” : “OK”
    }


Viendo 15 respuestas - de la 1 a 15 (de 15 en total)

You must be logged in to reply to this topic.

📆 Adobe Spectrum CSS, una librería Open Source de componentes web y app. 👉 https://t.co/HNHFyP83CU #PhoneGap #Adobehttps://t.co/jhqMGA60jt08:55 AM Feb 10th