कोड में बदले गए पॉलीलाइन एल्गोरिदम का फ़ॉर्मैट

पॉलीलाइन एन्कोडिंग एक नुकसान पहुंचाने वाला कंप्रेशन एल्गोरिदम है. इसकी मदद से, कई निर्देशांकों की सीरीज़ को एक स्ट्रिंग के रूप में सेव किया जा सकता है. पॉइंट के निर्देशांक, साइन की गई वैल्यू का इस्तेमाल करके एन्कोड किए जाते हैं. अगर आपके पास कुछ ही स्टैटिक पॉइंट हैं, तो हो सकता है कि आप इंटरैक्टिव पॉलीलाइन एन्कोडिंग यूटिलिटी का इस्तेमाल करना चाहें.

कोड में बदलने की प्रक्रिया, जाने-पहचाने base64 एन्कोडिंग स्कीम का इस्तेमाल करके, बाइनरी वैल्यू को ASCII वर्णों के लिए वर्ण कोड की सीरीज़ में बदल देती है: इन वर्णों को सही तरीके से दिखाने के लिए, कोड में बदली गई वैल्यू को ASCII में बदलने से पहले 63 (ASCII वर्ण '?') का योग किया जाता है. एल्गोरिदम, हर बाइट ग्रुप के सबसे कम ज़रूरी बिट की जांच करके भी किसी दिए गए पॉइंट के लिए अतिरिक्त वर्ण कोड की जांच करता है. अगर इस बिट को 1 पर सेट किया गया है, तो पॉइंट पूरी तरह से नहीं बना है. इसलिए, अतिरिक्त डेटा फ़ॉलो करना होगा.

इसके अलावा, जगह बचाने के लिए, पॉइंट सिर्फ़ पिछले पॉइंट से ऑफ़सेट शामिल करते हैं (पहले पॉइंट को छोड़कर). सभी पॉइंट, Base64 में साइन किए गए पूर्णांक के तौर पर एन्कोड किए जाते हैं. ऐसा इसलिए, क्योंकि अक्षांश और देशांतर, साइन की गई वैल्यू होते हैं. पॉलीलाइन के अंदर कोड में बदलने के फ़ॉर्मैट को दो निर्देशांक दिखाने चाहिए, जो अक्षांश और देशांतर को सही तरीके से दिखाते हों. ज़्यादा से ज़्यादा देशांतर +/- 180 डिग्री से लेकर पांच दशमलव स्थानों (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 में देशांतर अक्षांश में बदलें देशांतर में परिवर्तन कोड में बदला गया अक्षांश कोड में बदला गया देशांतर कोड में बदला गया पॉइंट
78.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`@