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