エンコード ポリライン アルゴリズム形式

ポリライン エンコードは、非可逆圧縮アルゴリズムの一つで、一連の 1 つの文字列として表すことができます。ポイント座標は符号付き値を使用してエンコードされます。 静的ポイントが数点しかない場合は、インタラクティブな ポリライン エンコード ユーティリティを使用します。

エンコード プロセスでは、バイナリ値が一連の文字コードに変換され、 一般的な base64 エンコード スキームを使用した ASCII 文字: 適切に表示されるようにするため エンコードされた値は合計 63 文字(ASCII 文字「?」)で ASCII に変換する必要がありますアルゴリズムは追加の 各文字コードの最下位ビットをチェックして、 バイトグループこのビットが 1 に設定されている場合は、小数点がまだ十分に形成されておらず、 追加データが必要になります。

また、スペースを節約するために、各ポイントには、 (最初のポイントは除きます)。すべてのポイントがエンコードされています 緯度や経度は符号付きの値なので、Base64 では符号付き整数として扱われます。 ポリライン内のエンコード形式は 2 つの座標を表す必要があります。 緯度と経度を妥当な精度で表現します。最大値あり 経度(+/- 180 度、小数点以下 5 桁の精度) (180.00000 ~-180.00000)ため、符号付き 32 ビットの 2 進整数値。

バックスラッシュはエスケープ文字として解釈されることに注意してください。 使用できます。このユーティリティの出力では、バックスラッシュを 文字列リテラル内で二重バックスラッシュに変換できます。

符号付きの値をエンコードする手順は、以下のように定められています。

  1. 最初の符号付き値を取得します。
    -179.9832104
  2. 10 進数に 1e5 を掛け、その結果を丸めます。
    -17998321
  3. 10 進数を 2 進数に変換します。負の値は必ずしも一致せず その を使用して計算される 2 の補数です。バイナリ値を反転して、結果に 1 を足します。
    00000001 00010010 10100001 11110001
    11111110 11101101 01011110 00001110
    11111110 11101101 01011110 00001111
    
  4. バイナリ値を 1 ビット左にシフトします。
    11111101 11011010 10111100 00011110
  5. 元の 10 進値が負の場合は、次のエンコードを逆にします。
    00000010 00100101 01000011 11100001
  6. バイナリ値を(右側から順に)5 ビットのチャンクに分割します。
    00001 00010 01010 10000 11111 00001
  7. 5 ビットのチャンクを逆の順序に並べます。
    00001 11111 10000 01010 00010 00001
  8. 後続のビット ブロックがあるブロックには 0x20 を OR 演算します。
    100001 111111 110000 101010 100010 000001
  9. 各値を 10 進数に変換します。
    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`@