google导航接口

curl -s "https://maps.googleapis.com/maps/api/directions/json?origin=43.651070,-79.347015&destination=45.501690,-73.567253&mode=bicycling&key=YourKey"

#wget -qO- "https://maps.googleapis.com/maps/api/directions/json?origin=43.651070,-79.347015&destination=45.501690,-73.567253&mode=bicycling&key=YourKey"

origin
origin=纬度,经度
destination
destination=纬度,经度

mode
driving:驾车
walking:步行
bicycling:骑行
transit:公共交通

{
   "geocoded_waypoints" : 
   [
      {
         "geocoder_status" : "OK",
         "place_id" : "ChIJFe-LBhLL1IkRuVeTL_UvHtU",
         "types" : 
         [
            "street_address"
         ]
      },
      {
         "geocoder_status" : "OK",
         "place_id" : "ChIJDQhsvi44K4gR7ueA_1qaYPk",
         "types" : 
         [
            "street_address"
         ]
      }
   ],
   "routes" : 
   [
      {
         "bounds" : 
         {
            "northeast" : 
            {
               "lat" : 43.6555158,
               "lng" : -79.3469623
            },
            "southwest" : 
            {
               "lat" : 43.6146554,
               "lng" : -79.56953109999999
            }
         },
         "copyrights" : "Map data ©2024 Google",
         "legs" : 
         [
            {
               "distance" : 
               {
                  "text" : "23.8 km",
                  "value" : 23807
               },
               "duration" : 
               {
                  "text" : "24 mins",
                  "value" : 1468
               },
               "end_address" : "75 Applewood Ln, Etobicoke, ON M9C 0C1, Canada",
               "end_location" : 
               {
                  "lat" : 43.6510645,
                  "lng" : -79.56727619999999
               },
               "start_address" : "337 Gardiner Expy, Toronto, ON M4M, Canada",
               "start_location" : 
               {
                  "lat" : 43.6510919,
                  "lng" : -79.3469623
               },
               "steps" : 
               [
                  {
                     "distance" : 
                     {
                        "text" : "2.1 km",
                        "value" : 2056
                     },
                     "duration" : 
                     {
                        "text" : "6 mins",
                        "value" : 331
                     },
                     "end_location" : 
                     {
                        "lat" : 43.6457503,
                        "lng" : -79.37006649999999
                     },
                     "html_instructions" : "Head \u003cb\u003enorthwest\u003c/b\u003e on \u003cb\u003eLake Shore Blvd E\u003c/b\u003e toward \u003cb\u003eLake Shore Blvd E\u003c/b\u003e",
                     "polyline" : 
                     {
                        "points" : "irliGnmhcNMJC@FRPj@Nf@@BNf@@@Rt@b@|ADR@BHVZz@@BHV@D^bAZx@f@xAPf@Rr@Xz@Vt@Jb@H\\DRHXh@nCBJBLFVNh@HR@BNb@f@zAHXDPBT@J@J@L?H?JAHAVANAPCLCLO\\Wh@QXSZKJY\\M\\O`@ITETGVCNAF?P@V?RBP@J^fBFXF\\BFHNNn@Ln@v@dDDN\\~AZlA?BLd@b@hBHZHZf@bCd@pBXzAb@`CRjBVbBH\\n@fGDTT|A\\dCHp@^jCR~A\\nCPtAD^"
                     },
                     "start_location" : 
                     {
                        "lat" : 43.6510919,
                        "lng" : -79.3469623
                     },
                     "travel_mode" : "DRIVING"
                  },
                  {
                     "distance" : 
                     {
                        "text" : "14.5 km",
                        "value" : 14543
                     },
                     "duration" : 
                     {
                        "text" : "12 mins",
                        "value" : 743
                     },
                     "end_location" : 
                     {
                        "lat" : 43.61581169999999,
                        "lng" : -79.5373113
                     },
                     "html_instructions" : "Turn \u003cb\u003eright\u003c/b\u003e to merge onto \u003cb\u003eFrederick G. Gardiner Expy\u003c/b\u003e/\u003cwbr/\u003e\u003cb\u003eGardiner Expy W\u003c/b\u003e",
                     "maneuver" : "ramp-right",
                     "polyline" : 
                     {
                        "points" : "}pkiG|}lcNM\\?BAB?@?@?J@XR|ATdBZhCHn@R|AFf@P`BFn@@?Hn@F`@Lh@?@Jd@Rv@Rn@@Bd@pA@?d@nABF@DBBPJZz@Zz@HPHRjApC\\x@Zz@JTf@lAr@`BDPFNXr@JXHZd@bAL\\d@fARh@Rf@`@dA^~@j@jAN`@\\x@JZv@vC~@xEDXRtAV~ADTD\\Hd@Fh@Ff@DXJn@Hn@Hx@Hx@L`A@NDXBXD^LtA@FFn@Fn@B`@P`BJjAD\\BZFn@H~@Db@N|AN|AHv@Fn@JnAJdAJdAFr@@FBT`@lED^B^@LJdAB^Db@B^B`@Bl@Br@@Z@`@?X?f@?b@?f@Al@An@CzAC|AAVCbACxAAV?VA`@A\\?T?F?R?b@?`A@`@?XBv@@n@Bh@HlB@V@VBj@FhAD~@Dn@Bf@HfBD`AD~@FfBBx@Bd@@t@Bv@@`A@v@?v@@d@?t@?zA?z@?x@?t@@\\?`@@^@\\@Z@V@T?NBT@Z@L@LD`@B^BTFd@BRD\\Fb@N~@Nv@VxANv@Hf@RfAZ`BRfAZfB@BNv@`@xBBPRdAP~@DXLr@Hb@Hb@Hd@RbARhABLBNH\\BNF^H`@DXb@|BF\\RbAdBtJZhBJl@d@bC@FDXDRRfA?@Hb@P`ADNN~@Pz@VzAn@lDd@bCBLLt@NhA@@BXDZBVB^D`@@ZBX@P@h@@b@@f@@Z?h@?\\A`@AXAb@Cp@ATAPC\\I|@E^ANCNAJGd@Mp@Kp@CJGVKf@K^Qn@CHQl@M\\Sl@Qj@Sl@M\\EN_@hAOd@i@~AaAzCu@zB_@jAIRK\\ITGRELITMb@CFEJQh@ENIVABuAfEELu@|Bm@jBUr@Qh@CHCFITCLELKXMd@Ux@Of@Kd@IZIXMj@K`@Kh@Or@Q|@GZERQ`AMv@A?StAQlAGZ?BGd@G\\K~@AHIh@Eb@E`@OxAIt@Ed@IdAIbAEh@C\\C\\G`AGfAEfAGlACr@C~@AZ?LCr@ARAb@?VALAh@?TA`@?J?L?TArAAX?P?`@?Z?T?L@l@?f@?@@X?T?H@r@@N?R@P?H@T@T@X@R@RD~@@V@LDx@?H@PBT@L@VFv@DZ?F@JBTHz@D\\Fn@Fj@Hr@Db@BJ@LJv@Fb@BLBRDVFb@@HHd@Hh@RbABR@FBHNt@Ln@Jb@BPRz@Rv@Jb@BHPr@h@rBBJb@vA|AxEDJbAtCPh@Ph@FPJZJZFRFPDJHT@BTj@JTDJ@BDFl@tA@?Rb@LXXf@Nb@hAvBJTLVNVLVLVp@pABFZl@JVLVJVLVJVJVJXJVJVJXXp@HTLXJVLVJVDJFLLTJTLTNVLTNVLTNR\\j@\\h@NVl@|@l@|@z@rA^h@^h@NRNRX`@DF^f@NR^f@d@p@HJNRNRNT\\d@LPNRPTPVLRPTJRNTNVLTZj@JVLVTl@LXJZJXHXHXHZFXDNBJFZFZFZFXF\\Lv@DZFZJt@Lv@RtA@B@JV`Bb@rCRrAF\\Lv@T~APhAF\\ZpBFf@Jp@FZN`APhARtATtADVRrAhApHPlAHh@L|@DV@FN|@D\\t@|Eb@xC`@jCRrAFVBTTvA^fCRrARnAPpAJt@Jt@Jv@Lv@\\fCFf@BNDZJt@DZJv@Jv@BVDZJv@Jv@Jt@TlBJv@Jt@?BTdBFj@X|BHt@ZjCdAfJn@tFdCjTdAdJlAjKHz@PvAp@|FNrAdBjOfBlOFn@ZnCP|AJt@^bD^`Dz@vHJ~@L~@l@jFf@jEFb@Hv@v@~Gx@fHNnAVxB"
                     },
                     "start_location" : 
                     {
                        "lat" : 43.6457503,
                        "lng" : -79.37006649999999
                     },
                     "travel_mode" : "DRIVING"
                  },
                  {
                     "distance" : 
                     {
                        "text" : "1.5 km",
                        "value" : 1489
                     },
                     "duration" : 
                     {
                        "text" : "1 min",
                        "value" : 65
                     },
                     "end_location" : 
                     {
                        "lat" : 43.6187202,
                        "lng" : -79.5524764
                     },
                     "html_instructions" : "Take exit \u003cb\u003e139\u003c/b\u003e for \u003cb\u003eON-427\u003c/b\u003e toward \u003cb\u003eAirport\u003c/b\u003e/\u003cwbr/\u003e\u003cb\u003eON-401\u003c/b\u003e",
                     "maneuver" : "ramp-right",
                     "polyline" : 
                     {
                        "points" : "yueiGdsmdNKh@?@JfAFr@L|ADl@NrBDd@Db@HhANhC@RXvEp@bKLzBLtBFhAH~ADz@FzAFdC@P?D?R?V?T?T?TARAJ?JAVCTE\\E`@EREVMd@GTGPITGNIRKPGNGHEHGJMNW\\MNKHEBKJIHSL[Tg@Xu@`@{@f@]Rg@Xq@^g@Vk@Xo@X[NOHMFOF]LOFKN"
                     },
                     "start_location" : 
                     {
                        "lat" : 43.61581169999999,
                        "lng" : -79.5373113
                     },
                     "travel_mode" : "DRIVING"
                  },
                  {
                     "distance" : 
                     {
                        "text" : "1.0 km",
                        "value" : 1030
                     },
                     "duration" : 
                     {
                        "text" : "1 min",
                        "value" : 39
                     },
                     "end_location" : 
                     {
                        "lat" : 43.627547,
                        "lng" : -79.5563578
                     },
                     "html_instructions" : "Continue onto \u003cb\u003eON-427 N\u003c/b\u003e",
                     "polyline" : 
                     {
                        "points" : "_hfiG~qpdNeBl@WH]Lg@Pm@R_@Lg@PoAb@_AZSHSFi@Ri@Pc@NWJsC~@s@Vs@V_AZSHk@Pg@PUHUHSFQF}@ZUHSFUHUHe@NWHSHk@PsAb@i@N{@Xq@TODw@Tg@P"
                     },
                     "start_location" : 
                     {
                        "lat" : 43.6187202,
                        "lng" : -79.5524764
                     },
                     "travel_mode" : "DRIVING"
                  },
                  {
                     "distance" : 
                     {
                        "text" : "1.7 km",
                        "value" : 1720
                     },
                     "duration" : 
                     {
                        "text" : "1 min",
                        "value" : 63
                     },
                     "end_location" : 
                     {
                        "lat" : 43.6424748,
                        "lng" : -79.56157499999999
                     },
                     "html_instructions" : "Take the \u003cb\u003eBurnhamthorpe Rd\u003c/b\u003e/\u003cwbr/\u003e\u003cb\u003eRathburn Rd\u003c/b\u003e exit toward \u003cb\u003eDundas St\u003c/b\u003e/\u003cwbr/\u003e\u003cb\u003eValhalla Rd\u003c/b\u003e",
                     "maneuver" : "ramp-right",
                     "polyline" : 
                     {
                        "points" : "e_hiGfjqdNWIoBh@MDQDOB}@V_@FODMDQDMBODOBODODKBUFi@LUDSDUFUDUDQDA?YFUBM@A?C?[DM@I?[BI?M@E?Y@_@@O@U@O@G?G?GAC?IFA?A@C@A?E?E@M@M@s@HWBA@YD[HUDIB_@Jo@N_@Je@Lw@Tk@NSHG@SH_@LKBYJ[J_@NE@o@Tc@PQFaA`@SFOFMDGBUHKDe@Ns@Tq@TGBEBEDGHcBf@MDwBl@a@Jc@JyBl@_Cp@kAZ[JC?SFSFYJa@JyBp@iA\\MB"
                     },
                     "start_location" : 
                     {
                        "lat" : 43.627547,
                        "lng" : -79.5563578
                     },
                     "travel_mode" : "DRIVING"
                  },
                  {
                     "distance" : 
                     {
                        "text" : "1.0 km",
                        "value" : 990
                     },
                     "duration" : 
                     {
                        "text" : "1 min",
                        "value" : 39
                     },
                     "end_location" : 
                     {
                        "lat" : 43.6510058,
                        "lng" : -79.56507239999999
                     },
                     "html_instructions" : "Take the \u003cb\u003eRathburn Road\u003c/b\u003e ramp",
                     "polyline" : 
                     {
                        "points" : "m|jiGxjrdNKJODc@NeAZe@NoBn@}@Xm@PKD_@LkBl@{Ah@o@P_AXcBj@WDQFQFE@UHSF[FuDjAuAb@wBr@c@BODODo@PODcAZs@Ra@LE@k@N"
                     },
                     "start_location" : 
                     {
                        "lat" : 43.6424748,
                        "lng" : -79.56157499999999
                     },
                     "travel_mode" : "DRIVING"
                  },
                  {
                     "distance" : 
                     {
                        "text" : "0.7 km",
                        "value" : 734
                     },
                     "duration" : 
                     {
                        "text" : "1 min",
                        "value" : 42
                     },
                     "end_location" : 
                     {
                        "lat" : 43.6544871,
                        "lng" : -79.56674699999999
                     },
                     "html_instructions" : "Take the \u003cb\u003eRathburn Rd W\u003c/b\u003e ramp",
                     "polyline" : 
                     {
                        "points" : "yqliGt`sdNmDxAKD_@Ps@ZKDQHSHWLQHWLq@Zi@VmDzAoAd@MDKBKBE@E@G@M@E?C?E?E?CAGAA?GCCACACCEECCCCAAAAAECCCE?AAECICK?EAC?A?EAC?E?E?E?E?I@I@E?E@E@E@G@C@C@E@CBEBCDEBEBABC@?BCDADCFADAD?B?B?D@@?B?DBH@@@BBHDDFFFBFDFDN@@HV@FFV@H@@NX"
                     },
                     "start_location" : 
                     {
                        "lat" : 43.6510058,
                        "lng" : -79.56507239999999
                     },
                     "travel_mode" : "DRIVING"
                  },
                  {
                     "distance" : 
                     {
                        "text" : "0.1 km",
                        "value" : 115
                     },
                     "duration" : 
                     {
                        "text" : "1 min",
                        "value" : 8
                     },
                     "end_location" : 
                     {
                        "lat" : 43.6541775,
                        "lng" : -79.56810999999999
                     },
                     "html_instructions" : "Merge onto \u003cb\u003eRathburn Rd\u003c/b\u003e",
                     "maneuver" : "merge",
                     "polyline" : 
                     {
                        "points" : "qgmiGdksdNXfBBX@BDXVnB"
                     },
                     "start_location" : 
                     {
                        "lat" : 43.6544871,
                        "lng" : -79.56674699999999
                     },
                     "travel_mode" : "DRIVING"
                  },
                  {
                     "distance" : 
                     {
                        "text" : "0.8 km",
                        "value" : 754
                     },
                     "duration" : 
                     {
                        "text" : "1 min",
                        "value" : 46
                     },
                     "end_location" : 
                     {
                        "lat" : 43.6507224,
                        "lng" : -79.5661789
                     },
                     "html_instructions" : "Take the \u003cb\u003eON-427 S\u003c/b\u003e ramp",
                     "maneuver" : "ramp-right",
                     "polyline" : 
                     {
                        "points" : "semiGtssdN?f@?F@BDl@Dd@?L?HC\\AHAHAFGJGJKLEFGDKFODK?G?IAGCGCGEGGEGEECGCGCIAGAEAGAK?K?K?C?E@G@I@I@GBKBG@ADKHIHKDEDEHIPKhBiAh@QVKTKFC^c@x@]j@U`@QDApAg@|Ak@pBu@dBm@"
                     },
                     "start_location" : 
                     {
                        "lat" : 43.6541775,
                        "lng" : -79.56810999999999
                     },
                     "travel_mode" : "DRIVING"
                  },
                  {
                     "distance" : 
                     {
                        "text" : "0.2 km",
                        "value" : 192
                     },
                     "duration" : 
                     {
                        "text" : "1 min",
                        "value" : 16
                     },
                     "end_location" : 
                     {
                        "lat" : 43.64975030000001,
                        "lng" : -79.56728489999999
                     },
                     "html_instructions" : "Take the \u003cb\u003eHoliday Drive\u003c/b\u003e exit",
                     "maneuver" : "ramp-right",
                     "polyline" : 
                     {
                        "points" : "_pliGrgsdNTDH?NE^GBAB?BAHAJ?L?RBB@@?DBDBHFBB@BBBBFDL@D@F?D?@@H?HAHA`@CbA?V"
                     },
                     "start_location" : 
                     {
                        "lat" : 43.6507224,
                        "lng" : -79.5661789
                     },
                     "travel_mode" : "DRIVING"
                  },
                  {
                     "distance" : 
                     {
                        "text" : "0.2 km",
                        "value" : 184
                     },
                     "duration" : 
                     {
                        "text" : "1 min",
                        "value" : 76
                     },
                     "end_location" : 
                     {
                        "lat" : 43.6510645,
                        "lng" : -79.56727619999999
                     },
                     "html_instructions" : "Turn \u003cb\u003eright\u003c/b\u003e onto \u003cb\u003eApplewood Ln\u003c/b\u003e",
                     "maneuver" : "turn-right",
                     "polyline" : 
                     {
                        "points" : "}iliGnnsdN?LOBKBGB{@ZG_@I_@CQCKCEEEE?G?A?C@QFIBOFQFSHWFCB"
                     },
                     "start_location" : 
                     {
                        "lat" : 43.64975030000001,
                        "lng" : -79.56728489999999
                     },
                     "travel_mode" : "DRIVING"
                  }
               ],
               "traffic_speed_entry" : [],
               "via_waypoint" : []
            }
         ],
         "overview_polyline" : 
         {
            "points" : "irliGnmhcNQLX~@b@tA~@jDp@nBdB|EvAlEd@nBx@`Ej@dBp@tBHf@Dd@A^IfASj@i@bA_@f@Y\\M\\Yv@Ml@EV@h@Bd@`@rBNv@LVzAtGfD|N~@lEb@`CRjB`@`Ct@|G|A`LhAdJOf@?LTvBnA|J`@xD`@zBr@nCnAdDDLTNjA|CpC|GhBpEtAlDzAvD|BrFh@tAv@vC~@xEXnB\\tB^tCd@rDx@|HbAxK`Dp]XhDL~C@fCG`FSbK?tADtDP~ERlEX`GTfGHfF@nF@hEDzBRlDRnBl@xDrCvOxBzLjH~`@hG~\\b@zCRtBHpBDpCE|BKvBU|Bc@tCc@jBu@dCgDdKkGpRoFnP_@jA_AlDm@bCu@vDuApIcAvIc@dFUfDYpGI|CIjEC`FBtDFhCVvFVrDt@nHn@rEbAxFp@`Dt@xCl@~B`CpHlBtF`AtCrBrEf@`AxAzCv@|A~A~Cr@~AjBzEzAfDz@zAxA~BfGbJ|HvK|@vAbApBz@|Bd@hBXrAd@jCvAlJfG|`@vItk@jCxQxA|KzAtLrEr`@bWnzBrFze@f@hEKj@`@xE`@jFt@~LtA~T^|J@bAAtAGdAWjBg@bBe@dAc@n@w@z@eAx@wDvBmDjBiBz@}@\\KNeBl@u@V}CdAwDpAkMlEwFlBsEzAkFbBgAZg@PWIoBh@_@J}Bh@yBh@}Dz@_ALo@FmCJe@BO?KAKFMBuANoAToBd@iD~@oAb@mE|AcEzAsBr@MNqBl@wHrBkFxAcBf@cEnAMBKJs@TkBj@gF`BwGvBcDdAi@LaAZ[FuDjAmEvAs@H_AViDbAq@PyD~AqB|@uAn@{Ar@}F`Ck@Na@DSAUGQOIMIQI_@Am@Jm@HSPQNIXGN@TFZXP`@T`APZ\\`CF\\VnB?f@@JJrA?VEf@CPOVQTSL[DG?QEOIW]K_@C_@@]Hg@T_@^a@zBuA`A]\\O^c@x@]lAg@vAi@nEaBdBm@TDXEb@I\\Cf@DXRN\\BTA~@CzA?LOBSF{@ZG_@Mq@GQKEI?o@TaA\\"
         },
         "summary" : "Frederick G. Gardiner Expy/Gardiner Expy W",
         "warnings" : [],
         "waypoint_order" : []
      }
   ],
   "status" : "OK"
}

解密:

    public static List<LatLng> decode(final String encodePath) {
        final List<LatLng> path = new ArrayList<LatLng>();
        if (StringUtils.isEmpty(encodePath)) {
            return path;
        }
        int len = encodePath.length();
        int index = 0;
        int lat = 0;
        int lng = 0;
        while (index < len) {
            int result = 1;
            int shift = 0;
            int b;
            do {
                b = encodePath.charAt(index++) - 63 - 1;
                result += b << shift;
                shift += 5;
            } while (b >= 0x1f);
            lat += (result & 1) != 0 ? ~(result >> 1) : (result >> 1);

            result = 1;
            shift = 0;
            do {
                b = encodePath.charAt(index++) - 63 - 1;
                result += b << shift;
                shift += 5;

            } while (b >= 0x1f);

            lng += (result & 1) != 0 ? ~(result >> 1) : (result >> 1);
            path.add(new LatLng(lat * 1e-5, lng * 1e-5));


        }
        return path;

    }

加密:

    public static String encode(final List<LatLng> path) {
        long lastLat = 0;
        long lastLng = 0;
        final StringBuffer result = new StringBuffer();
        for (final LatLng point : path) {
            long lat = Math.round(point.getLat() * 1e5);
            long lng = Math.round(point.getLng() * 1e5);

            long dLat = lat - lastLat;
            long dLng = lng - lastLng;

            encode(dLat, result);
            encode(dLng, result);

            lastLat = lat;
            lastLng = lng;

        }
        return result.toString();
    }

    public static String encode(final LatLng point) {
        long lastLat = 0;
        long lastLng = 0;
        final StringBuffer result = new StringBuffer();

        long lat = Math.round(point.getLat() * 1e5);
        long lng = Math.round(point.getLng() * 1e5);

        long dLat = lat - lastLat;
        long dLng = lng - lastLng;

        encode(dLat, result);
        encode(dLng, result);

        lastLat = lat;
        lastLng = lng;


        return result.toString();
    }


    private static void encode(long v, StringBuffer result) {
        v = v < 0 ? ~(v << 1) : v << 1;
        while (v >= 0x20) {
            result.append(Character.toChars((int) ((0x20 | (v & 0x1f)) + 63)));
            v >>= 5;
        }
        result.append(Character.toChars((int) (v + 63)));

    }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值