[Android][Kotlin]Google Map decode polyline 預估路徑/畫線 解碼教學
近日,有個需求是要在兩個經緯度間畫出預估路徑,做法是在google map輸入兩點經緯度/地址給google map,取得其官方回覆的google map的路徑json格式,並透過json內的資料去實現畫線的動作,而在實測後其中返回的資料如下,但因為json字串過於龐大,所以我自主地縮短了一大部分,如下:
但如果想看完整json檔的夥伴們,可以點 這裡 觀看
(有點進去看的人,沒錯!就是那麽長,似乎是距離愈遠資料愈大!?)
然而我們的需求是需要畫出整段行車路徑,所以預計使用剛剛取得的json資料,解析後使用,其中有幾個tips如下:
- 取得路徑相關資訊的資料位於json內的routes的array
- routes裡面包含預估的走法,像平常用google map導航,他會跟你說 前方500m向左轉/向右轉…等等
- 而這次我們的重點是要畫出兩點之間的行徑路線,所以可以直接取得json格式內routes到overview_polyline內的points,裡面是一串google經過encode壓縮的編碼
(如果有興趣知道編碼演算法的可以看 google官方演算法 )
這裡主要把encoded的編碼依照google官方演算法的步驟反向執行,其中包含,把每個值轉為等效的Ascii,將ascii 的 “ ? ”加入每個值(其實就是上面看到的 63 , ?的ascii就是 63),每個值與0x20做邏輯閘運算,位址reverse,位址左移,轉換為2進位,原本的經緯度乘1e5…等等
真是厚工(台語)啊XDDD
看到這裡,會有人問,怎麼那麼麻煩?
原因在google官方文件有提到,大部分的原因是為了在傳輸過程降低大量資料造成的空間消耗,因此google還真是設想周到!
那為了解決這個問題,只好去找decode的方法,並來解overview_polyline裡面的points欄位,並預期解碼後,可以得到整個行徑路線的經緯度。