এনকোডেড পলিলাইন অ্যালগরিদম বিন্যাস

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

এনকোডিং প্রক্রিয়া পরিচিত বেস64 এনকোডিং স্কিম ব্যবহার করে ASCII অক্ষরগুলির জন্য একটি বাইনারি মানকে ক্যারেক্টার কোডের একটি সিরিজে রূপান্তর করে: এই অক্ষরগুলির সঠিক প্রদর্শন নিশ্চিত করতে, এনকোড করা মানগুলিকে ASCII তে রূপান্তর করার আগে 63 (ASCII অক্ষর '?') দিয়ে যোগ করা হয়। . অ্যালগরিদম প্রতিটি বাইট গ্রুপের সর্বনিম্ন উল্লেখযোগ্য বিট চেক করে একটি নির্দিষ্ট পয়েন্টের জন্য অতিরিক্ত অক্ষর কোডগুলিও পরীক্ষা করে; যদি এই বিটটি 1 এ সেট করা থাকে, বিন্দুটি এখনও সম্পূর্ণরূপে গঠিত হয়নি এবং অতিরিক্ত ডেটা অবশ্যই অনুসরণ করতে হবে।

অতিরিক্তভাবে, স্থান সংরক্ষণ করার জন্য, পয়েন্টগুলি শুধুমাত্র পূর্ববর্তী বিন্দু থেকে অফসেট অন্তর্ভুক্ত করে (অবশ্যই প্রথম পয়েন্টের জন্য ছাড়া)। সমস্ত পয়েন্ট বেস64-এ স্বাক্ষরিত পূর্ণসংখ্যা হিসাবে এনকোড করা হয়েছে, কারণ অক্ষাংশ এবং দ্রাঘিমাংশগুলি স্বাক্ষরিত মান। একটি পলিলাইনের মধ্যে এনকোডিং বিন্যাসকে যুক্তিসঙ্গত নির্ভুলতার জন্য অক্ষাংশ এবং দ্রাঘিমাংশের প্রতিনিধিত্বকারী দুটি স্থানাঙ্ক উপস্থাপন করতে হবে। সর্বোচ্চ দ্রাঘিমাংশে +/- 180 ডিগ্রি 5 দশমিক স্থানের নির্ভুলতা (180.00000 থেকে -180.00000) দেওয়া হলে, এর ফলে একটি 32 বিট স্বাক্ষরিত বাইনারি পূর্ণসংখ্যা মানের প্রয়োজন হয়।

মনে রাখবেন যে ব্যাকস্ল্যাশকে স্ট্রিং লিটারেলের মধ্যে একটি এস্কেপ ক্যারেক্টার হিসেবে ব্যাখ্যা করা হয়েছে। এই ইউটিলিটির যেকোনো আউটপুট ব্যাকস্ল্যাশ অক্ষরকে স্ট্রিং লিটারেলের মধ্যে ডবল-ব্যাকস্ল্যাশে রূপান্তর করতে হবে।

এই ধরনের একটি স্বাক্ষরিত মান এনকোডিংয়ের জন্য ধাপগুলি নীচে উল্লেখ করা হয়েছে৷

  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. বাইনারি মানটিকে 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`@