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

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

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

بالإضافة إلى ذلك، لتوفير المساحة، لا تتضمن النقاط سوى الإزاحة من النقطة السابقة فقط (باستثناء النقطة الأولى بالطبع). يتم ترميز جميع النقاط في Base64 كأعداد صحيحة موقّعة، لأنّ خطوط العرض والطول هي قيم موقّعة. يجب أن يمثّل تنسيق الترميز خطًا متعدّدًا أن يمثّل إحداثيات خط الطول وخط العرض بدقة دقيقة. نظرًا إلى الحد الأقصى لطول خط الطول الذي يبلغ +/- 180 درجة وصولاً إلى دقة تبلغ 5 خانات عشرية (من 180.00000 إلى -180.00000)، يؤدي ذلك إلى الحاجة إلى قيمة عدد صحيح ثنائية تحمل 32 بت.

تجدر الإشارة إلى أنّ الشرطة المائلة للخلف تُفسَّر على أنها حرف إلغاء ضمن حرفيّات السلسلة. يجب أن تحوِّل أي مخرجات لهذه الأداة رموزًا مائلة إلى الشرطة المائلة للخلف إلى شرطات مائلة للخلف ضمن القيم الحرفية للسلسلة.

وقد تم تحديد خطوات ترميز هذه القيمة الموقّعة أدناه.

  1. أضِف القيمة الموقّعة الأولية:
    -179.9832104
  2. اضرب القيمة العشرية واضربها في 1e5، مع تقريب النتيجة:
    -17998321
  3. تحويل القيمة العشرية إلى برنامج ثنائي. تجدر الإشارة إلى أنه يجب حساب القيمة السلبية باستخدام التكاملَين ' من خلال عكس القيمة الثنائية وإضافة قيمة إلى النتيجة:
    00000001 00010010 10100001 11110001
    11111110 111011010101010101010101010101010101010101010101010101010101010101010101010101
  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 -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`@