인코딩된 폴리라인 알고리즘 형식
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
다중선 인코딩은 손실이 있는 압축 알고리즘으로,
좌표를 단일 문자열로 나타낸 것입니다. 지점 좌표는 서명된 값을 사용하여 인코딩됩니다.
고정점이 몇 개밖에 없는 경우에는 대화형
다중선 인코딩 유틸리티를 사용합니다.
인코딩 프로세스는 이진 값을 텍스트 변환에 대한 일련의 문자 코드로
익숙한 base64 인코딩 방식을 사용하는 ASCII 문자: 올바른 표시 보장
인코딩된 값은 63 (ASCII 문자 '?')으로 합산됩니다.
ASCII로 변환하기 전에 63이어야 합니다. 또한 알고리즘은 추가적인
각 문자의 최하위 비트를 확인하여 특정 지점의 문자 코드
바이트 그룹 이 비트를 1로 설정하면 점이 아직 완전히 형성되지 않은 것이며
추가 데이터가 뒤따라야 합니다
또한 공간을 절약하기 위해 점에는
이전 지점을 선택합니다 (첫 번째 지점 제외). 모든 점이 인코딩됨
위도와 경도는 부호 있는 값이므로 Base64로 변환합니다.
다중선 내의 인코딩 형식은
위도와 경도를 적절한 정밀도로 나타냅니다. 최대
경도 +/- 180도(소수점 이하 5자리의 정밀도)
(180.00000에서 -180.00000까지) 이를 위해서는
바이너리 정수 값입니다.
백슬래시는 이스케이프 문자로 해석됩니다.
사용할 수 있습니다. 이 유틸리티의 모든 출력은 백슬래시로 변환해야 합니다.
더블 백슬래시로 변환할 수 있습니다.
부호가 있는 값을 인코딩하는 절차는 다음과 같습니다.
- 초기 서명된 값을 사용합니다.
-179.9832104
- 십진수 값을 입력하고 1e5를 곱한 다음, 결과를 반올림합니다.
-17998321
- 십진수 값을 바이너리로 변환합니다. 음수 값은
를 사용하여 계산
2의 보수를 구합니다. 이진 값을 반전하고 결과에 1을 더합니다.
00000001 00010010 10100001 11110001
11111110 11101101 01011110 00001110
11111110 11101101 01011110 00001111
- 바이너리 값을 한 비트 왼쪽으로 시프트합니다.
11111101 11011010 10111100 00011110
- 원래 십진수 값이 음수이면 이 인코딩을 반전합니다.
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
- 각 값을 십진수로 변환합니다.
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`@
달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스에 따라 라이선스가 부여되며, 코드 샘플에는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 Google Developers 사이트 정책을 참조하세요. 자바는 Oracle 및/또는 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`@``"]]