قالب الگوریتم چندخطی کدگذاری‌شده

کدبندی چندخطی یک الگوریتم فشرده‌سازی با اتلاف است که به شما امکان می‌دهد مجموعه‌ای از مختصات را به‌عنوان یک رشته ذخیره کنید. مختصات نقطه بااستفاده از مقادیر علامت‌دار کدبندی می‌شود. اگر فقط چند نقطه ثابت دارید، می‌توانید از ابزار کدبندی چندخطی تعاملی نیز استفاده کنید.

فرایند کدبندی مقدار دودویی را به مجموعه‌ای از کدهای نویسه برای نویسه‌های ASCII بااستفاده از طرح کدبندی آشنای base64 تبدیل می‌کند: برای اطمینان از نمایش صحیح این نویسه‌ها، مقادیر کدبندی‌شده با ۶۳ (نویسه ASCII «؟») جمع می‌شوند و سپس به ASCII تبدیل می‌شوند. الگوریتم همچنین با بررسی کم‌اهمیت‌ترین بیت هر گروه بایت، کدهای کاراکتر اضافی را برای یک نقطه معین بررسی می‌کند؛ اگر این بیت روی ۱ تنظیم شده باشد، نقطه هنوز به‌طور کامل شکل نگرفته است و داده‌های اضافی باید دنبال شود.

علاوه‌براین، برای صرفه‌جویی در فضا، نقطه‌ها فقط شامل انحراف از نقطه قبلی است (البته به‌جز نقطه اول). همه نقطه‌ها به‌عنوان اعداد صحیح علامت‌دار در Base64 کدبندی می‌شوند، زیرا عرض و طول جغرافیایی مقادیر علامت‌دار هستند. قالب کدبندی در چندخطی باید دو مختصات را نشان دهد که عرض جغرافیایی و طول جغرافیایی را با دقت معقولی نشان می‌دهند. با درنظر گرفتن حداکثر طول جغرافیایی ‏ ‎+/- ۱۸۰ درجه با دقت ۵ رقم اعشاری ‏ (‎۱۸۰.۰۰۰۰۰ تا ‎-۱۸۰.۰۰۰۰۰)، این امر منجر به نیاز به مقدار عدد صحیح باینری علامت‌دار ۳۲ بیتی می‌شود.

توجه داشته باشید که خط مورب معکوس به‌عنوان نویسه گریز در حروف رشته‌ای تفسیر می‌شود. هر خروجی این ابزار باید نویسه‌های واکج‌خط را به واکج‌خط دوگانه در رشته‌های ثابت تبدیل کند.

مراحل کدگذاری چنین مقدار امضاشده‌ای در زیر مشخص شده است.

  1. مقدار امضاشده اولیه را بگیرید:
    -179.9832104
  2. مقدار اعشاری را بگیرید و آن را در 1e5 ضرب کنید و نتیجه را گرد کنید:
    -17998321
  3. مقدار اعشاری را به دودویی تبدیل کنید. توجه داشته باشید که مقدار منفی باید بااستفاده از مکمل دو آن محاسبه شود، یعنی مقدار باینری معکوس شود و یک به نتیجه اضافه شود:
    00000001 00010010 10100001 11110001
    11111110 11101101 01011110 00001110
    11111110 11101101 01011110 00001111
    
  4. جابه‌جایی مقدار دودویی به چپ به‌اندازه یک بیت:
    11111101 11011010 10111100 00011110
  5. اگر مقدار اعشاری اصلی منفی است، این کدبندی را معکوس کنید:
    00000010 00100101 01000011 11100001
  6. مقدار باینری را به تکه‌های ۵ بیتی تقسیم کنید (از سمت راست شروع کنید):
    00001 00010 01010 10000 11111 00001
  7. تکه‌های ۵ بیتی را به‌ترتیب معکوس قرار دهید:
    00001 11111 10000 01010 00010 00001
  8. اگر تکه بیت دیگری دنبال شود، هر مقدار را با 0x20 ترکیب OR کنید:
    100001 111111 110000 101010 100010 000001
  9. هر مقدار را به ده‌دهی تبدیل کنید:
    33 63 48 42 34 1
  10. افزودن ۶۳ به هر مقدار:
    96 126 111 105 97 64
  11. هر مقدار را به معادل ASCII آن تبدیل کنید:
    `~oia@

جدول زیر چند نمونه از نقاط کدگذاری‌شده را نشان می‌دهد، که کدگذاری‌ها را به‌عنوان مجموعه‌ای از افست‌ها از نقاط قبلی نشان می‌دهد.

مثال

نقاط: (۳۸٫۵، -۱۲۰٫۲)، (۴۰٫۷، -۱۲۰٫۹۵)، (۴۳٫۲۵۲، -۱۲۶٫۴۵۳)

عرض جغرافیایی طول جغرافیایی عرض جغرافیایی در E5 طول جغرافیایی در E5 تغییر در عرض جغرافیایی تغییر در طول جغرافیایی عرض جغرافیایی کدبندی‌شده طول جغرافیایی کدبندی‌شده نقطه کدبندی‌شده
۳۸٫۵ -۱۲۰.۲ 3850000 -12020000 +3850000 -12020000 _p~iF ~ps|U _p~iF~ps|U
۴۰٫۷ ‎-۱۲۰٫۹۵ 4070000 -12095000 +220000 -75000 _ulL nnqC _ulLnnqC
43.252 ‎-126.453 4325200 -12645300 +255200 -550300 _mqN vxq`@ _mqNvxq`@

چندخطی کدبندی‌شده: _p~iF~ps|U_ulLnnqC_mqNvxq`@