รูปแบบอัลกอริทึม Polyline

การเข้ารหัสแบบโพลีไลน์เป็นอัลกอริทึมการบีบอัดแบบสูญเสียบางส่วนที่ช่วยให้คุณจัดเก็บชุดพิกัดเป็นสตริงเดียวได้ พิกัดของจุดได้รับการเข้ารหัสโดยใช้ค่าแบบมีเครื่องหมาย หากมีจุดคงที่เพียงไม่กี่จุด คุณอาจต้องการใช้ยูทิลิตีการเข้ารหัสโพลีไลน์แบบอินเทอร์แอกทีฟ

กระบวนการเข้ารหัสจะแปลงค่าไบนารีเป็นชุดรหัสอักขระสำหรับอักขระ ASCII โดยใช้รูปแบบการเข้ารหัส base64 ที่คุ้นเคย เพื่อให้แน่ใจว่าการแสดงอักขระเหล่านี้อย่างถูกต้อง ระบบจะรวมค่าที่เข้ารหัสด้วย 63 (อักขระ ASCII "?") ก่อนที่จะแปลงเป็น ASCII อัลกอริทึมยังตรวจสอบรหัสอักขระเพิ่มเติมสำหรับจุดหนึ่งๆ โดยตรวจสอบบิตที่มีนัยสำคัญน้อยที่สุดของกลุ่มไบต์แต่ละกลุ่ม หากตั้งค่าบิตนี้เป็น 1 แสดงว่าจุดยังไม่ก่อตัวอย่างสมบูรณ์และต้องมีข้อมูลเพิ่มเติมตามมา

นอกจากนี้ หากต้องการประหยัดพื้นที่ จุดควรมีเฉพาะออฟเซ็ตจากจุดก่อนหน้า (ยกเว้นจุดแรก) ระบบจะเข้ารหัสจุดทั้งหมดใน Base64 เป็นจำนวนเต็มแบบมีเครื่องหมาย เนื่องจากละติจูดและลองจิจูดเป็นค่าที่มีการรับรอง รูปแบบการเข้ารหัสภายในเส้นประกอบจะต้องแสดงพิกัด 2 พิกัดซึ่งแสดงละติจูดและลองจิจูดได้อย่างถูกต้องแม่นยำ เมื่อกำหนดลองจิจูดสูงสุดไว้ที่ +/- 180 องศา กับค่าทศนิยม 5 ตำแหน่งที่แม่นยำ (180.00000 ถึง -180.00000) จะทำให้จำเป็นต้องใช้ค่าจำนวนเต็มไบนารีแบบมีเครื่องหมาย 32 บิต

โปรดทราบว่าระบบจะตีความแบ็กสแลชเป็นอักขระหลีกภายในลิเทอรัลสตริง เอาต์พุตใดๆ ของยูทิลิตีนี้ควรแปลงอักขระแบ็กสแลชเป็นแบ็กสแลชคู่ภายในลิเทอรัลสตริง

ดูขั้นตอนการเข้ารหัสค่าที่ลงนามแล้วได้ที่ด้านล่าง

  1. ใช้ค่าที่ลงนามเริ่มต้นที่
    -179.9832104
  2. นำค่าทศนิยมมาคูณด้วย 1e5 โดยปัดเศษผลลัพธ์
    -17998321
  3. แปลงค่าทศนิยมเป็นเลขฐานสอง โปรดทราบว่าจะต้องคำนวณค่าลบโดยใช้ การเสริม 2 ของของค่าดังกล่าวโดยการกลับค่าฐานสองแล้วบวก 1 ลงในผลลัพธ์ ดังนี้
    00000001 00010010 10100001 11110001
    11111110 11101101 01011110 00001110
    11111110 11101101 01011110 00001111
    
  4. เปลี่ยนค่าไบนารีไปทางซ้าย 1 บิต:
    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`@