এনকোড করা পলিলাইন অ্যালগরিদম ফর্ম্যাট

পলাইন এনকোডিং হল একটি লসি কম্প্রেশন অ্যালগরিদম যা আপনাকে কোঅর্ডিনেটের একটি সিরিজকে সিঙ্গেল স্ট্রিং হিসেবে স্টোর করতে দেয়। সাইন করা ভ্যালু ব্যবহার করে পয়েন্ট কোঅর্ডিনেট এনকোড করা হয়। আপনার কাছে যদি শুধুমাত্র কয়েকটি স্ট্যাটিক পয়েন্ট থাকে, তাহলে আপনি ইন্ট্যার‍্যাক্টিভ পলাইন এনকোডিং ইউটিলিটি ব্যবহার করতে পারেন।

এনকোডিং প্রসেস বাইনারি ভ্যালুকে 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 দিয়ে আলাদা করুন:
    100001 111111 110000 101010 100010 000001
  9. প্রতিটি মানকে দশমিক সংখ্যায় পরিবর্তন করুন:
    33 63 48 42 34 1
  10. প্রতিটি ভ্যালুর সাথে ৬৩ যোগ করুন:
    96 126 111 105 97 64
  11. প্রতিটি ভ্যালুকে তার ASCII সমতুল্যে কনভার্ট করুন:
    `~oia@

নিচের টেবিলে এনকোড করা পয়েন্টের কিছু উদাহরণ দেখানো হয়েছে, যেখানে এনকোডিংকে আগের পয়েন্ট থেকে অফসেটের সিরিজ হিসেবে দেখানো হয়েছে।

উদাহরণ

পয়েন্ট: (38.5, -120.2), (40.7, -120.95), (43.252, -126.453)

Latitude দ্রাঘিমাংশ E5-এ অক্ষাংশ E5-এ দ্রাঘিমাংশ Latitude-এ পরিবর্তন দ্রাঘিমাংশে পরিবর্তন এনকোড করা অক্ষাংশ এনকোড করা দ্রাঘিমাংশ এনকোড করা পয়েন্ট
৩৮.৫ -১২০.২ 3850000 -12020000 +3850000 -12020000 _p~iF ~ps|U _p~iF~ps|U
৪০.৭ -120.95 4070000 -12095000 +220000 -75000 _ulL nnqC _ulLnnqC
৪৩.২৫২ -১২৬.৪৫৩ 4325200 -12645300 +255200 -550300 _mqN vxq`@ _mqNvxq`@

এনকোড করা পলিলাইন: _p~iF~ps|U_ulLnnqC_mqNvxq`@