تنسيق خوارزمية الخطوط المتعددة المشفّرة

الترميز المتعدد الخطوط هو خوارزمية ضغط مع فقدان البيانات تتيح لك تخزين سلسلة من الإحداثيات كسلسلة واحدة. يتم ترميز إحداثيات النقاط باستخدام قيم موقعة. إذا كان لديك بعض النقاط الثابتة فقط، يمكنك أيضًا استخدام أداة الترميز التفاعلية المتعددة الخطوط.

تحوِّل عملية الترميز قيمة ثنائية إلى سلسلة من رموز حروف ASCII باستخدام نظام ترميز base64 المألوف: لضمان العرض المناسب لهذه الأحرف، يتم جمع القيم المشفرة بـ 63 (حرف ASCII "?") قبل تحويلها إلى ASCII. تبحث الخوارزمية أيضًا عن رموز أحرف إضافية لنقطة معيّنة من خلال التحقّق من البت الأقل أهمية في كل مجموعة بايت. وفي حال ضبط هذا البت على 1، يعني ذلك أنّه لم يتم تكوين النقطة بشكل كامل بعد، ويجب إرسال بيانات إضافية لاحقًا.

بالإضافة إلى ذلك، لتوفير المساحة، تتضمّن النقاط الإزاحة من النقطة السابقة فقط (باستثناء النقطة الأولى). يتم ترميز جميع النقاط باستخدام Base64 كأعداد صحيحة بعلامة، حيث تكون خطوط العرض والطول هي قيم موقعة. يجب أن يمثل تنسيق الترميز داخل الخطوط المتعددة إحداثيتين تمثلان خط العرض وخط الطول بدقة معقولة. بالنظر إلى الحد الأقصى لخط الطول +/- 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`@