인코딩된 폴리라인 알고리즘 형식

다중선 인코딩은 일련의 좌표를 단일 문자열로 저장할 수 있는 손실이 있는 압축 알고리즘입니다. 지점 좌표는 서명된 값을 사용하여 인코딩됩니다. 몇 개의 정적 점만 있는 경우에는 대화형 다중선 인코딩 유틸리티를 사용할 수도 있습니다.

인코딩 프로세스는 익숙한 base64 인코딩 체계를 사용하여 바이너리 값을 ASCII 문자에 해당하는 일련의 문자 코드로 변환합니다. 이러한 문자를 올바르게 표시하기 위해 인코딩된 값은 ASCII로 변환하기 전에 63 (ASCII 문자 '?')로 합산됩니다. 또한 이 알고리즘은 각 바이트 그룹의 최하위 비트를 확인하여 지정된 지점의 추가 문자 코드를 확인합니다. 이 비트가 1로 설정된 경우 점이 아직 완전히 형성되지 않은 것이므로 추가 데이터가 이어져야 합니다.

또한 공간을 절약하기 위해 점에는 이전 점으로부터의 오프셋만 포함됩니다 (첫 번째 점 제외). 위도와 경도는 부호가 있는 값이므로 모든 점은 부호 있는 정수로 Base64로 인코딩됩니다. 다중선 내의 인코딩 형식은 위도와 경도를 적절한 정밀도로 나타내는 두 개의 좌표를 표현해야 합니다. 최대 경도가 +/- 180도이고 소수점 이하 다섯 자리의 정밀도(180.00000~-180.00000)로 인해 32비트의 부호 있는 바이너리 정수 값이 필요합니다.

백슬래시는 문자열 리터럴에서 이스케이프 문자로 해석됩니다. 이 유틸리티의 모든 출력은 문자열 리터럴 내에서 백슬래시 문자를 이중 백슬래시로 변환해야 합니다.

부호가 있는 값을 인코딩하는 절차는 다음과 같습니다.

  1. 초기 부호 있는 값을 가져옵니다.
    -179.9832104
  2. 십진수 값에 1e5를 곱한 다음, 결과를 반올림합니다.
    -17998321
  3. 십진수 값을 바이너리로 변환합니다. 음수 값은 바이너리 값을 반전하고 결과에 1을 더하여 2의 보수로 계산해야 합니다.
    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으로 OR합니다.
    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`@