Base32編碼

一、二進制串進行Base編碼步驟

  1. 首先將二進制串劃分每5位一組,不足5位補0。

  2. 然後將各組的5位二進制串轉成十進制(5bits對應着10進制的數值爲0-31)。

  3. 用0-9、b-z(去掉a、i、l、o)這32個字母進行Base32編碼,即對照下標將其轉換爲字符串。

    base32編碼.png

二、舉例如何對位置編碼得到字符串

舉例說明,我們如何對北海公園的位置(緯度39.928167,精度116.389550)編碼

第一步:經緯度分別編碼

地球緯度區間是[-90,90], 北海公園的緯度是39.928167,可以通過下面算法對緯度39.928167進行逼近編碼:

1)區間[-90,90]進行二分爲[-90,0),[0,90],稱爲左右區間,可以確定39.928167屬於右區間[0,90],給標記爲1;
2)接着將區間[0,90]進行二分爲 [0,45),[45,90],可以確定39.928167屬於左區間 [0,45),給標記爲0;
3)遞歸上述過程39.928167總是屬於某個區間[a,b]。隨着每次迭代區間[a,b]總在縮小,並越來越逼近39.928167;
4)如果給定的緯度x(39.928167)屬於左區間,則記錄0,如果屬於右區間則記錄1,這樣隨着算法的進行會產生一個序列1011100,序列的長度跟給定的區間劃分次數有關。

根據緯度算編碼

bit min mid max
1 -90.000 0.000 90.000
0 0.000 45.000 90.000
1 0.000 22.500 45.000
1 22.500 33.750 45.000
1 33.7500 39.375 45.000
0 39.375 42.188 45.000
0 39.375 40.7815 42.188
0 39.375 40.07825 40.7815
1 39.375 39.726625 40.07825
1 39.726625 39.9024375 40.07825

同理,地球經度區間是[-180,180],可以對經度116.389550進行編碼。
根據經度算編碼

bit min mid max
1 -180 0.000 180
1 0.000 90 180
0 90 135 180
1 90 112.5 135
0 112.5 123.75 135
0 112.5 118.125 123.75
1 112.5 115.3125 118.125
0 115.3125 116.71875 118.125
1 115.3125 116.015625 116.71875
1 116.015625 116.3671875 116.71875

第二步:奇偶合並和編碼:
過上述計算,緯度產生的編碼爲10111 00011,經度產生的編碼爲11010 01011。偶數位放緯度,奇數位放經度,把2串編碼組合生成新串:11100 11101 00100 01111

最後使用用0-9b-z(去掉a, i, l, o)這32個字母進行base32編碼,首先將11100 11101 00100 01111轉成十進制,對應着28、29、4、15,十進制對應的編碼就是wx4g。同理,將編碼轉換成經緯度的解碼算法與之相反,具體不再贅述。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章