ポリライン エンコードは、非可逆圧縮アルゴリズムの一つで、一連の 1 つの文字列として表すことができます。ポイント座標は符号付き値を使用してエンコードされます。 静的ポイントが数点しかない場合は、インタラクティブな ポリライン エンコード ユーティリティを使用します。
エンコード プロセスでは、バイナリ値が一連の文字コードに変換され、 一般的な base64 エンコード スキームを使用した ASCII 文字: 適切に表示されるようにするため エンコードされた値は合計 63 文字(ASCII 文字「?」)で ASCII に変換する必要がありますアルゴリズムは追加の 各文字コードの最下位ビットをチェックして、 バイトグループこのビットが 1 に設定されている場合は、小数点がまだ十分に形成されておらず、 追加データが必要になります。
また、スペースを節約するために、各ポイントには、 (最初のポイントは除きます)。すべてのポイントがエンコードされています 緯度や経度は符号付きの値なので、Base64 では符号付き整数として扱われます。 ポリライン内のエンコード形式は 2 つの座標を表す必要があります。 緯度と経度を妥当な精度で表現します。最大値あり 経度(+/- 180 度、小数点以下 5 桁の精度) (180.00000 ~-180.00000)ため、符号付き 32 ビットの 2 進整数値。
バックスラッシュはエスケープ文字として解釈されることに注意してください。 使用できます。このユーティリティの出力では、バックスラッシュを 文字列リテラル内で二重バックスラッシュに変換できます。
符号付きの値をエンコードする手順は、以下のように定められています。
- 最初の符号付き値を取得します。
-179.9832104
- 10 進数に 1e5 を掛け、その結果を丸めます。
-17998321
- 10 進数を 2 進数に変換します。負の値は必ずしも一致せず
その を使用して計算される
2 の補数です。バイナリ値を反転して、結果に 1 を足します。
00000001 00010010 10100001 11110001 11111110 11101101 01011110 00001110 11111110 11101101 01011110 00001111
- バイナリ値を 1 ビット左にシフトします。
11111101 11011010 10111100 00011110
- 元の 10 進値が負の場合は、次のエンコードを逆にします。
00000010 00100101 01000011 11100001
- バイナリ値を(右側から順に)5 ビットのチャンクに分割します。
00001 00010 01010 10000 11111 00001
- 5 ビットのチャンクを逆の順序に並べます。
00001 11111 10000 01010 00010 00001
- 後続のビット ブロックがあるブロックには 0x20 を OR 演算します。
100001 111111 110000 101010 100010 000001
- 各値を 10 進数に変換します。
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`@