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

폴리라인 인코딩은 일련의 좌표를 하나의 문자열로 저장할 수 있는 비가역 압축 알고리즘입니다. 지점 좌표는 서명된 값을 사용하여 인코딩됩니다. 몇 개의 정적 지점만 있다면 대화형 폴리라인 인코딩 유틸리티를 사용할 수도 있습니다.

인코딩 프로세스는 바이너리 값을 친숙한 base64 인코딩 구성표를 사용하여 ASCII 문자에 대한 일련의 문자 코드로 변환합니다. 이러한 문자를 적절히 표시하기 위해 인코딩된 값은 ASCII로 변환하기 전에 63(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 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`@

다음에 대한 의견 보내기...