การเข้ารหัสแบบโพลีไลน์คืออัลกอริทึมการบีบอัดแบบสูญเสียบางส่วนที่ช่วยให้คุณสามารถจัดเก็บชุดวิดีโอ เป็นสตริงเดียว พิกัดของจุดจะเข้ารหัสโดยใช้ค่าที่ลงนาม หากคุณมีจุดคงที่เพียงไม่กี่จุด คุณสามารถใช้การโต้ตอบ ยูทิลิตีการเข้ารหัส Polyline
กระบวนการเข้ารหัสจะแปลงค่าฐานสองเป็นชุดรหัสอักขระสำหรับ อักขระ ASCII ที่ใช้รูปแบบการเข้ารหัส base64 ที่คุ้นเคย: เพื่อให้แน่ใจว่าการแสดงผลมีความถูกต้อง ของอักขระเหล่านี้ ค่าที่เข้ารหัสจะรวมด้วย 63 (อักขระ ASCII '?') ก่อนที่จะแปลงเป็น ASCII อัลกอริทึมยังตรวจหา รหัสอักขระสำหรับจุดที่กำหนด โดยการตรวจสอบบิตที่สำคัญน้อยที่สุดของแต่ละจุด Byte group; หากตั้งค่าบิตนี้เป็น 1 จุดยังไม่เกิดขึ้นอย่างสมบูรณ์ และ ข้อมูลเพิ่มเติมต้องเป็นไปตาม
นอกจากนี้ เพื่อประหยัดพื้นที่ จุดจะรวมเฉพาะออฟเซ็ตจาก คะแนนก่อนหน้า (ยกเว้นคะแนนแรก) จุดทั้งหมดมีการเข้ารหัส ใน Base64 เป็นจำนวนเต็มแบบมีเครื่องหมาย เนื่องจากละติจูดและลองจิจูดคือค่าที่มีเครื่องหมายกำกับ รูปแบบการเข้ารหัสภายในเส้นประกอบต้องแสดงพิกัด 2 แบบ แสดงละติจูดและลองจิจูดเป็นความแม่นยำที่สมเหตุสมผล กำหนดไว้สูงสุด ลองจิจูดของ +/- 180 องศา ถึงความแม่นยำของทศนิยม 5 ตำแหน่ง (180.00000 ถึง -180.00000) ซึ่งส่งผลให้ต้องใช้ลายเซ็น 32 บิต เลขจำนวนเต็มฐานสอง
โปรดทราบว่าเครื่องหมายแบ็กสแลชจะถือว่าเป็นอักขระหลีก ภายในสัญพจน์ของสตริง เอาต์พุตของยูทิลิตีนี้ควรแปลงแบ็กสแลช อักขระที่จะใช้เป็นเครื่องหมายแบ็กสแลช 2 ชั้นภายในสัญพจน์สตริง
ขั้นตอนในการเข้ารหัสค่าที่รับรองดังกล่าวมีดังนี้
- ใช้ค่าเริ่มต้นที่ลงนาม:
วันที่-179.9832104
- นำค่าทศนิยมมาคูณด้วย 1e5 โดยปัดเศษผลลัพธ์เป็น
วันที่-17998321
- แปลงค่าฐานสิบเป็นฐานสอง โปรดทราบว่าค่าลบต้องเป็น
คำนวณโดยใช้
2 ส่วนเติมเต็มโดยการกลับค่าฐานสองแล้วบวกหนึ่งลงในผลลัพธ์
00000001 00010010 10100001 11110001 11111110 11101101 01011110 00001110 11111110 11101101 01011110 00001111
- เลื่อนค่าฐานสองไปทางซ้ายหนึ่งบิต:
วันที่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 | การเปลี่ยนแปลงใน Latitude | เปลี่ยนลองจิจูด | ละติจูดที่เข้ารหัส | ลองจิจูดที่เข้ารหัส | จุดที่เข้ารหัส |
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`@