如何从PHP中的Google Maps Direction API解码折线

She*_*lal 2 php json directions google-maps-direction-api

我从以下URL获得了json响应:

http://maps.googleapis.com/maps/api/directions/json?origin=Chicago,IL&destination=Los%20Angeles,CA&sensor=false

JSON路径routes[x].legs[y].steps[z].polyline.points:

"azq〜FHC {uOAlB jB表示^ P P乙@ V□的|??????【J @为fA XA @ XA H +乙˚F@ TA @的xD H + BNA @ |?????甲@ rB中@ ˚F@ @@ d v□的AXB d @ AZEzA BIjB @Cx @ EzAAlC F F T B˚F@ DhHBhD 5 R升5 R |???????????????CCpDAj @ E | DGnDKzCCb @ OtBa @ rFGfAAb @?@?FAp @?ADbJD|F@bF@@@fERhd@BrEFdDBtBAvBAx@@l@?n@@^@bANnQ?rABnM?jC?hH@fA?@BF?vC?hB?@BpM?@?j @@ p @@ | KB~Q @ pFBbHBvF @ z @?f @@ jB?nA @ z @ DzD @ VJ ~CLfC\| E?B?@ HnANtAVpDRpCLbB ^ dFTxC @ LZvDF ^ HrALlCH EB|H?DBpEB~V?^BhDJR?@@ \?~A?nABrL?@?jD @ vD @ vA?h @?BLx [?x @?B?\?F @ pA?h @ D~H?@ Bz @ Dr @ RbCLfA\rBPv @@@ T~ @ t @ bCPf @ z @ xBd @ rAf @ dB\zAN~ @ PjAT~BFrADxAH X?z@?@HfW?x@?F?@@dD@^F|Y@v@D|JBzH?rB@tAApABxB?bA@dBBxABlAJ~CJrBDfANhBNjCLlCLpBHlBFnB@C?| A?v @ AlBCdA?r @EjEC | BItEMdGEtAIfEI | BKzDOzGEjCCl @?@ MnDW HSrFSlFAd@?@qA|[Ct@Cj@At@AbA?hBAdBClBQjFQnECr@EAYjFIzAWxDQpCYpEAFItACt @ S~C] | GSlEMnCMtCGdAKlBQxDg @ bLAT?BKrCAn @ Ad @?x @?p @?J?| @@ lA @ z @ BbABn @ Bt @@ @HnAPxB@LB^LAT BPAP~ @ Z~ALn @?@@ Fd @ | BjAfGd @ dDd @ | D\bFDf @ D~ @@ f @ B | @@ xCJ P?dBBEDtE @ bADlAR EJlABh@Dp@F@ @xEJdBHlCF~C@nA?@?@DfG?ADhLBbD @ x @?F @ ~C?dCNbTDrIBxDLbO @~AV Y?@DfHEvDGlC]fHGhD?lHPlP?@?B?R?@BfBNbRBpENfQDrGBvCDrEBtEBzABfABx@B~@^FHx @ H | @ @bDPxAZpCTbDNDBlC @ j @@ j @ BhAHhLBvC?p @ BlB?jAAfAAx @ C @MzDM|B_@tDq@pF]fB]zAo@fCc@~Am@jBo@dBoCxG?@?@Sd@g@vAY~@St@W|@_@bBUhA_@zBWhBKAOpAKfAEp @ Gz @ Cb @ GpACZAVAh @ Ad @ AX?f @ At @ CpB"

我想解码Polyline点字符串以使用PHP来转换上述URL返回的长值.

我在Java和Objective C中找到了一些结果,但我需要在PHP中使用它.

Mik*_*tes 10

Python实现

这不是在PHP中,但是如果您要从Google地图解码折线字符串,则此线程接近搜索结果的顶部.如果其他人需要它(就像我做的那样),这里有一个用于解码折线字符串的Python实现.这是从Mapbox JavaScript版本移植而来的; 更多信息在我的repo页面上找到.

def decode_polyline(polyline_str):
    index, lat, lng = 0, 0, 0
    coordinates = []
    changes = {'latitude': 0, 'longitude': 0}

    # Coordinates have variable length when encoded, so just keep
    # track of whether we've hit the end of the string. In each
    # while loop iteration, a single coordinate is decoded.
    while index < len(polyline_str):
        # Gather lat/lon changes, store them in a dictionary to apply them later
        for unit in ['latitude', 'longitude']: 
            shift, result = 0, 0

            while True:
                byte = ord(polyline_str[index]) - 63
                index+=1
                result |= (byte & 0x1f) << shift
                shift += 5
                if not byte >= 0x20:
                    break

            if (result & 1):
                changes[unit] = ~(result >> 1)
            else:
                changes[unit] = (result >> 1)

        lat += changes['latitude']
        lng += changes['longitude']

        coordinates.append((lat / 100000.0, lng / 100000.0))

    return coordinates
Run Code Online (Sandbox Code Playgroud)


j0k*_*j0k 6

您可以在Github上查看此回购:Google Maps Polyline编码工具

一个简单的PHP类,用于将折线转换为Google Maps的编码字符串.