การเข้ารหัสแบบโพลีไลน์เป็นอัลกอริทึมการบีบอัดแบบสูญเสียบางส่วนที่ช่วยให้คุณจัดเก็บชุดพิกัดเป็นสตริงเดียวได้ พิกัดของจุดได้รับการเข้ารหัสโดยใช้ค่าแบบมีเครื่องหมาย หากมีจุดคงที่เพียงไม่กี่จุด คุณอาจต้องการใช้ยูทิลิตีการเข้ารหัสโพลีไลน์แบบอินเทอร์แอกทีฟ
กระบวนการเข้ารหัสจะแปลงค่าไบนารีเป็นชุดรหัสอักขระสำหรับอักขระ ASCII โดยใช้รูปแบบการเข้ารหัส base64 ที่คุ้นเคย เพื่อให้แน่ใจว่าการแสดงอักขระเหล่านี้อย่างถูกต้อง ระบบจะรวมค่าที่เข้ารหัสด้วย 63 (อักขระ ASCII "?") ก่อนที่จะแปลงเป็น ASCII อัลกอริทึมยังตรวจสอบรหัสอักขระเพิ่มเติมสำหรับจุดหนึ่งๆ โดยตรวจสอบบิตที่มีนัยสำคัญน้อยที่สุดของกลุ่มไบต์แต่ละกลุ่ม หากตั้งค่าบิตนี้เป็น 1 แสดงว่าจุดยังไม่ก่อตัวอย่างสมบูรณ์และต้องมีข้อมูลเพิ่มเติมตามมา
นอกจากนี้ หากต้องการประหยัดพื้นที่ จุดควรมีเฉพาะออฟเซ็ตจากจุดก่อนหน้า (ยกเว้นจุดแรก) ระบบจะเข้ารหัสจุดทั้งหมดใน Base64 เป็นจำนวนเต็มแบบมีเครื่องหมาย เนื่องจากละติจูดและลองจิจูดเป็นค่าที่มีการรับรอง รูปแบบการเข้ารหัสภายในเส้นประกอบจะต้องแสดงพิกัด 2 พิกัดซึ่งแสดงละติจูดและลองจิจูดได้อย่างถูกต้องแม่นยำ เมื่อกำหนดลองจิจูดสูงสุดไว้ที่ +/- 180 องศา กับค่าทศนิยม 5 ตำแหน่งที่แม่นยำ (180.00000 ถึง -180.00000) จะทำให้จำเป็นต้องใช้ค่าจำนวนเต็มไบนารีแบบมีเครื่องหมาย 32 บิต
โปรดทราบว่าระบบจะตีความแบ็กสแลชเป็นอักขระหลีกภายในลิเทอรัลสตริง เอาต์พุตใดๆ ของยูทิลิตีนี้ควรแปลงอักขระแบ็กสแลชเป็นแบ็กสแลชคู่ภายในลิเทอรัลสตริง
ดูขั้นตอนการเข้ารหัสค่าที่ลงนามแล้วได้ที่ด้านล่าง
- ใช้ค่าที่ลงนามเริ่มต้นที่
-179.9832104
- นำค่าทศนิยมมาคูณด้วย 1e5 โดยปัดเศษผลลัพธ์
-17998321
- แปลงค่าทศนิยมเป็นเลขฐานสอง โปรดทราบว่าจะต้องคำนวณค่าลบโดยใช้
การเสริม 2 ของของค่าดังกล่าวโดยการกลับค่าฐานสองแล้วบวก 1 ลงในผลลัพธ์ ดังนี้
00000001 00010010 10100001 11110001 11111110 11101101 01011110 00001110 11111110 11101101 01011110 00001111
- เปลี่ยนค่าไบนารีไปทางซ้าย 1 บิต:
11111101 11011010 10111100 00011110
- หากค่าทศนิยมเดิมเป็นลบ ให้กลับการเข้ารหัสนี้
00000010 00100101 01000011 11100001
- แบ่งค่าไบนารีออกเป็น 5 บิต (เริ่มต้นจากด้านขวามือ) ดังนี้
00001 00010 01010 10000 11111 00001
- เรียงชิ้นส่วน 5 บิตให้เรียงกลับกัน
00001 11111 10000 01010 00010 00001
- หรือแต่ละค่าที่มี 0x20 หากมีกลุ่มบิตอื่นต่อท้าย
100001 111111 110000 101010 100010 000001
- แปลงแต่ละค่าเป็นเลขทศนิยม
33 63 48 42 34 1
- แล้วบวกค่า 63 ลงในแต่ละค่า
96 126 111 105 97 64
- แปลงแต่ละค่าให้เทียบเท่ากับ 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`@