1

By making Google Maps API call, I received a response JSON which contained this polyline1:

ezdvBcps}Lt@W@F@BVKl@UK]Wc@}@kAOKBEzA{BdA}Ab@s@LBf@RjARZBv@?rAAfBIX?f@FLBf@^b@hATbAF~@BvB?hALjBHpCLjAVdAd@dAxCbGlA~BbBvCpAbD`AnCVpB\\hBf@nB|@tAb@f@RVXLbDj@jCl@nAf@`DbBdC`B`@b@HNN`@lA~DnAvBvB`G\\fA^p@j@z@~E`FbBpBxDfFXh@|@pD`@bB^fANd@\\`Bl@rBb@fATj@v@bBjBwCd@w@NB^B\\@\\K\\Q|AWZGXOPIRBb@K\\Kl@_@VOZWVI^Eh@Ov@KxCJ\\@\\K^@RMh@QhAMXKXY`@Q^SLK`@]fBc@n@M\\OlB_@n@KNMRUZQZGh@Ht@Lx@F`@BTANDRNTPNDDHLXN`@LRTJx@?RBJFFLV\\Zs@TQ`@MVIhAYp@YPc@VgALk@Hk@d@eA\\cAHq@Eo@J}@@q@DItAgAv@i@|@e@v@k@bAaAdDuB|@c@?I?]?{@Ms@COFWJODYEcABOTU^e@H_@Km@Ci@BU?e@Ca@Ie@e@oBKk@Eu@M{@CoAC}@Km@Iy@IaA?{@Ci@Ms@UgA]y@Mm@GQICe@QKMGi@Gi@GSI[Ym@[{@@_AK]SMo@i@OCg@EOEMMYSi@IUO]Ko@KSIWUWMU_@I]Kw@WoACY@a@CWQWe@[QIOYMYW]SMQUQu@OWWSUWU[SsAEg@Ic@Mc@?a@Ai@Em@AUOa@M_@e@g@MSGYOY_@YIQSR[Pa@mBQaAI[@QDyACq@Iu@o@k@e@Y]IcAAmBC]Ee@IgAUWAw@Ae@GWSaAeAYk@Si@a@k@YAc@O{@]a@MnAqA~@mCVaAHk@YmCIQSQOS

Rendering polyline1 directly

I tried to visualize this polyline using online tool, which gave me following output:

Image 1:

enter image description here

When I stored this polyline in postgres as GEOMETRY(LINESTRING) using st_asText(ST_LineFromEncodedPolyline(...) function (as explained in this answer), QGIS rendered it exactly same as above.

Polyline1 to lat-long array to polyline2 conversion and then rendering polyline2

I tried to decode the polyline into lat long array in Python using polyline package (github link).

>>> import polyline
>>> l = polyline.decode('ezdvBcps}Lt@W@F@BVKl@UK]Wc@}@kAOKBEzA{BdA}Ab@s@LBf@RjARZBv@?rAAfBIX?f@FLBf@^b@hATbAF~@BvB?hALjBHpCLjAVdAd@dAxCbGlA~BbBvCpAbD`AnCVpB\\hBf@nB|@tAb@f@RVXLbDj@jCl@nAf@`DbBdC`B`@b@HNN`@lA~DnAvBvB`G\\fA^p@j@z@~E`FbBpBxDfFXh@|@pD`@bB^fANd@\\`Bl@rBb@fATj@v@bBjBwCd@w@NB^B\\@\\K\\Q|AWZGXOPIRBb@K\\Kl@_@VOZWVI^Eh@Ov@KxCJ\\@\\K^@RMh@QhAMXKXY`@Q^SLK`@]fBc@n@M\\OlB_@n@KNMRUZQZGh@Ht@Lx@F`@BTANDRNTPNDDHLXN`@LRTJx@?RBJFFLV\\Zs@TQ`@MVIhAYp@YPc@VgALk@Hk@d@eA\\cAHq@Eo@J}@@q@DItAgAv@i@|@e@v@k@bAaAdDuB|@c@?I?]?{@Ms@COFWJODYEcABOTU^e@H_@Km@Ci@BU?e@Ca@Ie@e@oBKk@Eu@M{@CoAC}@Km@Iy@IaA?{@Ci@Ms@UgA]y@Mm@GQICe@QKMGi@Gi@GSI[Ym@[{@@_AK]SMo@i@OCg@EOEMMYSi@IUO]Ko@KSIWUWMU_@I]Kw@WoACY@a@CWQWe@[QIOYMYW]SMQUQu@OWWSUWU[SsAEg@Ic@Mc@?a@Ai@Em@AUOa@M_@e@g@MSGYOY_@YIQSR[Pa@mBQaAI[@QDyACq@Iu@o@k@e@Y]IcAAmBC]Ee@IgAUWAw@Ae@GWSaAeAYk@Si@a@k@YAc@O{@]a@MnAqA~@mCVaAHk@YmCIQSQOS')
>>> l[:5]
[(19.52691, 73.17778), (19.52664, 73.1779), (19.52663, 73.17786), (19.52662, 73.17784), (19.5265, 73.1779)]
>>> len(l)
293

I encoded this lat long back using using this online tool to obtain polyline:

ezdvBcps}Lt@UBHdAa@K]Wc@}@kAOKhEsGNDf@PhARZBlCA`CIr@Jh@^`@hAVbAD~@B`ELjBJpCJlAXbAd@dAvCbGlA`CbBvCpA`D`AnCVrB\fBf@nB~@vAt@|@XLdDj@hCl@nAf@`DbBdC`B`@b@Xr@lA|DnAvBvB`G\fA^p@j@|@~E~EbBrBxDdFXh@~AtGn@lB^`Bj@rBx@rBv@bBpCoElAH^KZQxB_@j@WR@b@I\MdAo@ZWVI^Eh@Mv@MvDL^I\?RMj@QfAKXMXY`Ae@n@i@vCq@\O|Ck@b@c@ZQZG~AVzAJVALDj@b@LBb@dALRTLx@?R@JF^j@Zs@TQbCq@p@WPc@d@sBJk@b@gA\cAHo@Cq@H}@@q@FGrAgAv@k@|@e@v@k@bAaAdDuB|@c@?cBQcAHWHOFYGcADOr@{@H_@Km@Cg@BW?e@Ca@{@aECu@O{@GmCKm@S{B?{@Ci@a@yB_@{@U_Ao@SIOQqAQq@Ym@[{@@_AK]cAu@w@IOGg@a@g@IWO]Ko@KSIWUUMW_@m@eDCY@_@AYSWw@e@]s@W]SMQUQu@OWWSk@s@SqAEi@WgA?iAIeA[_Ae@i@OSGYMYa@YIQSR[P}@iEFkBAs@Ku@m@k@e@Y_@IqDEcAMgAWoACe@GWQaAgAYk@Si@_@k@[AaC{@pAqA|@mCVaAHk@YmCIQSQOS

Now when I tried to visualize this polyline, I got this:

Image 2

enter image description here

This seems exactly the grey path that I get when I search for direction on maps.google.com (grey route in the image below) (search link):

enter image description here

Also when I stored above lat long array itself in postgress as GEOMETRY(POINT) (as explained in this answer), QGIS rendered array of points having same shape as above (image2).

Why is polyline1 so different from what I get in maps.google.com and why first converting it to lat-long array and re-encoding it gives polyline2 which is the same as that shown in maps.google.com?

Vince
  • 20,017
  • 15
  • 45
  • 64
Mahesha999
  • 163
  • 1
  • 4

1 Answers1

4

Replace all of the double backslashes (\\) in the original with single backslashes (\) then try the online decoder again:

ezdvBcps}Lt@W@F@BVKl@UK]Wc@}@kAOKBEzA{BdA}Ab@s@LBf@RjARZBv@?rAAfBIX?f@FLBf@^b@hATbAF~@BvB?hALjBHpCLjAVdAd@dAxCbGlA~BbBvCpAbD`AnCVpB\hBf@nB|@tAb@f@RVXLbDj@jCl@nAf@`DbBdC`B`@b@HNN`@lA~DnAvBvB`G\fA^p@j@z@~E`FbBpBxDfFXh@|@pD`@bB^fANd@\`Bl@rBb@fATj@v@bBjBwCd@w@NB^B\@\K\Q|AWZGXOPIRBb@K\Kl@_@VOZWVI^Eh@Ov@KxCJ\@\K^@RMh@QhAMXKXY`@Q^SLK`@]fBc@n@M\OlB_@n@KNMRUZQZGh@Ht@Lx@F`@BTANDRNTPNDDHLXN`@LRTJx@?RBJFFLV\Zs@TQ`@MVIhAYp@YPc@VgALk@Hk@d@eA\cAHq@Eo@J}@@q@DItAgAv@i@|@e@v@k@bAaAdDuB|@c@?I?]?{@Ms@COFWJODYEcABOTU^e@H_@Km@Ci@BU?e@Ca@Ie@e@oBKk@Eu@M{@CoAC}@Km@Iy@IaA?{@Ci@Ms@UgA]y@Mm@GQICe@QKMGi@Gi@GSI[Ym@[{@@_AK]SMo@i@OCg@EOEMMYSi@IUO]Ko@KSIWUWMU_@I]Kw@WoACY@a@CWQWe@[QIOYMYW]SMQUQu@OWWSUWU[SsAEg@Ic@Mc@?a@Ai@Em@AUOa@M_@e@g@MSGYOY_@YIQSR[Pa@mBQaAI[@QDyACq@Iu@o@k@e@Y]IcAAmBC]Ee@IgAUWAw@Ae@GWSaAeAYk@Si@a@k@YAc@O{@]a@MnAqA~@mCVaAHk@YmCIQSQOS

A backslash is commonly used as an "escape character", meaning you put it in front of another character that you want to be interpreted literally. So if you want to have a backslash interpreted literally, you prefix it with another backslash. That's what Google is doing in the JSON response.

It works when run through the Python module because Python interprets it in the same way, and converts the double backslashes to single before decoding the polyline. The online tool, however, is not doing this.

mikewatt
  • 5,083
  • 9
  • 21