編碼折線演算法格式

折線編碼是一種有損壓縮演算法, 做為單一字串的參考。點座標使用含正負號的值編碼。 如果只有幾個靜態要點,不妨使用 折線編碼公用程式

編碼程序會將二進位值轉換為一系列 採用熟悉的 Base64 編碼配置的 ASCII 字元:確保正確顯示 都會將編碼值加總為 63 (ASCII 字元「?」) 才轉換為 ASCII。演算法也會檢查 字元碼,方法是檢查每個點的最小有效位元 位元組群組;如果這個位元設為 1,表示該點尚未形成完整, 其他資料必須遵循

此外,為了節省空間,控點只會包括 (第一點除外)。所有點都經過編碼 視為帶正負號整數,因為經緯度均為帶正負號值。 折線中的編碼格式必須代表兩個座標 將經緯度調整為合理的精確度。達到上限 經度 +/- 180 度,精確到小數點後 5 位數 (180.00000 到 -180.00000),這就需要有 32 位元的 二進位整數值。

請注意,系統會將反斜線解讀為逸出字元 字串常值。此公用程式的任何輸出內容都應轉換反斜線 字元和反斜線。

有關編碼這類含正負號值的步驟說明如下。

  1. 採用初始已簽署值:
    -179.9832104
  2. 將十進位值乘以 1e5,然後四捨五入:
    -17998321
  3. 將十進位值轉換為二進位值。請注意,負數值必須為負值 是以 計算的 反對二元數,方法是反轉二進位值,並將 1 加到結果中:
    00000001 00010010 10100001 11110001
    11111110 11101101 01011110 00001110
    11111110 11101101 01011110 00001111
    
  4. 將二進位值向左移動 1 位元:
    11111101 11011010 10111100 00011110
  5. 如果原始十進位值為負數,請反轉這個編碼:
    00000010 00100101 01000011 11100001
  6. 將二進位值分成 5 位元區塊 (從右手開始):
    00001 00010 01010 10000 11111 00001
  7. 將 5 位元區塊反向排序:
    00001 11111 10000 01010 00010 00001
  8. 如果其他區塊位於下方,請加上每個值 0x20:
    100001 111111 110000 101010 100010 000001
  9. 將每個值轉換為小數:
    33 63 48 42 34 1
  10. 為每個值加上 63:
    96 126 111 105 97 64
  11. 將每個值轉換成對應的 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`@