[Android][Kotlin]Google Map decode polyline 預估路徑/畫線 解碼教學

Eleg.Aces.KC
Dec 7, 2020
google map tutorial

近日,有個需求是要在兩個經緯度間畫出預估路徑,做法是在google map輸入兩點經緯度/地址給google map,取得其官方回覆的google map的路徑json格式,並透過json內的資料去實現畫線的動作,而在實測後其中返回的資料如下,但因為json字串過於龐大,所以我自主地縮短了一大部分,如下:

但如果想看完整json檔的夥伴們,可以點 這裡 觀看

(有點進去看的人,沒錯!就是那麽長,似乎是距離愈遠資料愈大!?)

然而我們的需求是需要畫出整段行車路徑,所以預計使用剛剛取得的json資料,解析後使用,其中有幾個tips如下:

  1. 取得路徑相關資訊的資料位於json內的routes的array
  2. routes裡面包含預估的走法,像平常用google map導航,他會跟你說 前方500m向左轉/向右轉…等等
  3. 而這次我們的重點是要畫出兩點之間的行徑路線,所以可以直接取得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欄位,並預期解碼後,可以得到整個行徑路線的經緯度。

--

--

Eleg.Aces.KC
Eleg.Aces.KC

Written by Eleg.Aces.KC

Welcome ! Here is Elegant Access ,in here ,I will show you some android develop skill or some tutorial ,please follow me that you can get latest story.

No responses yet