رمزگذاری Polyline یک الگوریتم فشرده سازی با اتلاف است که به شما امکان می دهد مجموعه ای از مختصات را به عنوان یک رشته واحد ذخیره کنید. مختصات نقطه ای با استفاده از مقادیر علامت گذاری شده کدگذاری می شوند. اگر فقط چند نقطه ثابت دارید، ممکن است بخواهید از ابزار کدگذاری چند خطی تعاملی نیز استفاده کنید.
فرآیند رمزگذاری یک مقدار باینری را به یک سری از کدهای کاراکتر برای کاراکترهای ASCII با استفاده از طرح رمزگذاری آشنا base64 تبدیل میکند: برای اطمینان از نمایش صحیح این کاراکترها، مقادیر کدگذاری شده قبل از تبدیل آنها به ASCII با 63 (کاراکتر ASCII '?') جمع میشوند. . این الگوریتم همچنین کدهای کاراکتر اضافی را برای یک نقطه مشخص با بررسی کمترین بیت مهم هر گروه بایت بررسی می کند. اگر این بیت روی 1 تنظیم شود، نقطه هنوز به طور کامل تشکیل نشده است و باید داده های اضافی دنبال شود.
علاوه بر این، برای حفظ فضا، نقاط فقط شامل افست نقطه قبلی (البته به جز نقطه اول) می شود. همه نقاط در Base64 به عنوان اعداد صحیح امضا شده کدگذاری می شوند، زیرا طول و عرض جغرافیایی مقادیر علامت دار هستند. قالب رمزگذاری در یک چند خط باید دو مختصات را نشان دهد که طول و عرض جغرافیایی را با دقت معقول نشان می دهد. با توجه به حداکثر طول جغرافیایی +/- 180 درجه تا دقت 5 رقم اعشار (180.00000 تا 180.00000-)، این منجر به نیاز به یک عدد صحیح باینری با علامت 32 بیتی می شود.
توجه داشته باشید که بک اسلش به عنوان یک کاراکتر فرار در لفظ رشته تفسیر می شود. هر خروجی از این ابزار باید کاراکترهای بک اسلش را به حروف اسلش دوگانه در لفظ رشته تبدیل کند.
مراحل رمزگذاری چنین مقدار امضا شده در زیر مشخص شده است.
- مقدار امضا شده اولیه را بگیرید:
-179.9832104 - مقدار اعشاری را بگیرید و آن را در 1e5 ضرب کنید و نتیجه را گرد کنید:
-17998321 - مقدار اعشاری را به باینری تبدیل کنید. توجه داشته باشید که یک مقدار منفی باید با استفاده از متمم دو با معکوس کردن مقدار باینری و اضافه کردن یک به نتیجه محاسبه شود:
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 اگر قطعه بیت دیگری دنبال شود:
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)
عرض جغرافیایی | طول جغرافیایی | عرض جغرافیایی در E5 | طول جغرافیایی در E5 | تغییر در Latitude | تغییر در طول جغرافیایی | Latitude رمزگذاری شده | طول جغرافیایی رمزگذاری شده | نقطه رمزگذاری شده |
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`@