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

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

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

인코딩 프로세스는 익숙한 base64 인코딩 스키마를 사용하여 바이너리 값을 ASCII 문자에 대한 일련의 문자 코드로 변환합니다. 이러한 문자가 제대로 표시되도록 인코딩 값은 ASCII로 변환한 후 ASCII로 변환합니다. 또한 알고리즘은 각 바이트 그룹의 최하위 비트를 확인하여 특정 지점의 추가 문자 코드를 확인합니다. 이 비트가 1로 설정되면 지점이 아직 완전히 형성되지 않은 것이므로 추가 데이터가 이어져야 합니다.

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

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

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

  1. 다음과 같이 초기에 서명된 값을 사용합니다.
    -179.9832104
  2. 십진수 값에 1e5를 곱하여 결과를 반올림합니다.
    -17998321
  3. 십진수 값을 바이너리로 변환합니다. 음수 값은 바이너리 값을 반전시키고 결과에 1을 더하는 2의 보수를 사용하여 계산해야 합니다.
    00000001 00010010 10100001 11110001
    11111110 11101101 01001101 01001101 01001101 0100111
  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을 포함하는 각 값:
    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`@