エンコード ポリライン アルゴリズム形式
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
ポリライン エンコードは、非可逆圧縮アルゴリズムの一つで、一連の
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)
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`@
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2025-08-29 UTC。
[null,null,["最終更新日 2025-08-29 UTC。"],[[["\u003cp\u003ePolyline encoding is a lossy compression algorithm that represents a series of coordinates as a single string.\u003c/p\u003e\n"],["\u003cp\u003eThe algorithm uses signed values, Base64 encoding, and offsets from the previous point to compress the data.\u003c/p\u003e\n"],["\u003cp\u003ePoints are encoded by converting latitude and longitude to binary, applying bitwise operations, and converting the result to ASCII characters.\u003c/p\u003e\n"],["\u003cp\u003eEncoded polylines are strings that consist of these ASCII characters, representing the sequence of geographical points.\u003c/p\u003e\n"]]],["Polyline encoding compresses coordinates into a single string. It encodes points as signed integers representing offsets from the previous point. The process involves multiplying the decimal by 1e5, converting to binary (using two's complement for negative values), left-shifting, inverting if negative, dividing into 5-bit chunks, reversing chunk order, OR-ing with 0x20, adding 63, and converting to ASCII. Points are represented in Base64 and latitude/longitude are paired, encoded sequentially. The result is a compact string representing the sequence of points.\n"],null,["# Encoded Polyline Algorithm Format\n\nPolyline encoding is a lossy compression algorithm that allows you to store a series of\ncoordinates as a single string. Point coordinates are encoded using signed values.\nIf you only have a few static points, you may also wish to use the interactive\n[polyline encoding utility](/maps/documentation/utilities/polylineutility).\n\nThe encoding process converts a binary value into a series of character codes for\nASCII characters using the familiar base64 encoding scheme: to ensure proper display\nof these characters, encoded values are summed with 63 (the ASCII character '?')\nbefore converting them into ASCII. The algorithm also checks for additional\ncharacter codes for a given point by checking the least significant bit of each\nbyte group; if this bit is set to 1, the point is not yet fully formed and\nadditional data must follow.\n\nAdditionally, to conserve space, **points only include the offset from the\nprevious point** (except of course for the first point). All points are encoded\nin Base64 as signed integers, as latitudes and longitudes are signed values.\nThe encoding format within a polyline needs to represent two coordinates\nrepresenting latitude and longitude to a reasonable precision. Given a maximum\nlongitude of +/- 180 degrees to a precision of 5 decimal places\n(180.00000 to -180.00000), this results in the need for a 32 bit signed\nbinary integer value.\n\nNote that the backslash is interpreted as an escape character within string literals. Any output of this utility should convert backslash\ncharacters to double-backslashes within string literals.\n\nThe steps for encoding such a signed value are specified below.\n\n1. Take the initial signed value: \n `-179.9832104`\n2. Take the decimal value and multiply it by 1e5, rounding the result: \n `-17998321`\n3. Convert the decimal value to binary. Note that a negative value must be calculated using its [two's complement](https://en.wikipedia.org/wiki/Two%27s_complement) by inverting the binary value and adding one to the result: \n\n ```\n 00000001 00010010 10100001 11110001\n 11111110 11101101 01011110 00001110\n 11111110 11101101 01011110 00001111\n ```\n4. Left-shift the binary value one bit: \n `11111101 11011010 10111100 00011110`\n5. If the original decimal value is negative, invert this encoding: \n `00000010 00100101 01000011 11100001`\n6. Break the binary value out into 5-bit chunks (starting from the right hand side): \n `00001 00010 01010 10000 11111 00001`\n7. Place the 5-bit chunks into reverse order: \n `00001 11111 10000 01010 00010 00001`\n8. OR each value with 0x20 if another bit chunk follows: \n `100001 111111 110000 101010 100010 000001`\n9. Convert each value to decimal: \n `33 63 48 42 34 1`\n10. Add 63 to each value: \n `96 126 111 105 97 64`\n11. Convert each value to its ASCII equivalent: \n ```~oia@``\n\nThe table below shows some examples of encoded points, showing the\nencodings as a series of offsets from previous points. \n\n### Example\n\nPoints: (38.5, -120.2), (40.7, -120.95), (43.252, -126.453)\n\n|----------|-----------|----------------|-----------------|--------------------|---------------------|------------------|-------------------|---------------|\n| Latitude | Longitude | Latitude in E5 | Longitude in E5 | Change In Latitude | Change In Longitude | Encoded Latitude | Encoded Longitude | Encoded Point |\n| 38.5 | -120.2 | 3850000 | -12020000 | +3850000 | -12020000 | `_p~iF` | `~ps|U` | `_p~iF~ps|U` |\n| 40.7 | -120.95 | 4070000 | -12095000 | +220000 | -75000 | `_ulL` | `nnqC` | `_ulLnnqC` |\n| 43.252 | -126.453 | 4325200 | -12645300 | +255200 | -550300 | `_mqN` | ``vxq`@`` | ``_mqNvxq`@`` |\n\n**Encoded polyline** : ``_p~iF~ps|U_ulLnnqC_mqNvxq`@``"]]