折線編碼是一種有損壓縮演算法, 做為單一字串的參考。點座標使用含正負號的值編碼。 如果只有幾個靜態要點,不妨使用 折線編碼公用程式。
編碼程序會將二進位值轉換為一系列 採用熟悉的 Base64 編碼配置的 ASCII 字元:確保正確顯示 都會將編碼值加總為 63 (ASCII 字元「?」) 才轉換為 ASCII。演算法也會檢查 字元碼,方法是檢查每個點的最小有效位元 位元組群組;如果這個位元設為 1,表示該點尚未形成完整, 其他資料必須遵循
此外,為了節省空間,控點只會包括 (第一點除外)。所有點都經過編碼 視為帶正負號整數,因為經緯度均為帶正負號值。 折線中的編碼格式必須代表兩個座標 將經緯度調整為合理的精確度。達到上限 經度 +/- 180 度,精確到小數點後 5 位數 (180.00000 到 -180.00000),這就需要有 32 位元的 二進位整數值。
請注意,系統會將反斜線解讀為逸出字元 字串常值。此公用程式的任何輸出內容都應轉換反斜線 字元和反斜線。
有關編碼這類含正負號值的步驟說明如下。
- 採用初始已簽署值:
-179.9832104
- 將十進位值乘以 1e5,然後四捨五入:
-17998321
- 將十進位值轉換為二進位值。請注意,負數值必須為負值
是以 計算的
反對二元數,方法是反轉二進位值,並將 1 加到結果中:
00000001 00010010 10100001 11110001 11111110 11101101 01011110 00001110 11111110 11101101 01011110 00001111
- 將二進位值向左移動 1 位元:
11111101 11011010 10111100 00011110
- 如果原始十進位值為負數,請反轉這個編碼:
00000010 00100101 01000011 11100001
- 將二進位值分成 5 位元區塊 (從右手開始):
00001 00010 01010 10000 11111 00001
- 將 5 位元區塊反向排序:
00001 11111 10000 01010 00010 00001
- 如果其他區塊位於下方,請加上每個值 0x20:
100001 111111 110000 101010 100010 000001
- 將每個值轉換為小數:
33 63 48 42 34 1
- 為每個值加上 63:
96 126 111 105 97 64
- 將每個值轉換成對應的 ASCII 字元:
`~oia@
下表是編碼點的範例,顯示 編碼為一系列與前一個點之間的位移。
範例
點:(38.5, -120.2), (40.7, -120.95), (43.252, -126.453)
緯度 | 經度 | 緯度乘以 E5 | 經度乘以 E5 | 緯度差異 | 經度差異 | 編碼緯度 | 編碼經度 | 編碼點 |
38.5 | -120.2 | 3850000 | -12020000 | +3850000 | -12020000 | _p~iF |
~ps|U |
_p~iF~ps|U |
40.7 | -120.95 | 4070000 | -12095000 | +220000 | -75000 | _ulL |
nnqC |
_ulLnnqC |
43.252 | -126.453 | 4325200 | -12645300 | +255200 | -550300 | _mqN |
vxq`@ |
_mqNvxq`@ |
編碼折線:_p~iF~ps|U_ulLnnqC_mqNvxq`@