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

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

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

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

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

ขั้นตอนสําหรับการเข้ารหัสสําหรับค่าที่ลงนามระบุไว้ด้านล่าง

  1. ใช้ค่าเริ่มต้นที่ลงนาม:
    -179.9832104
  2. นําค่าทศนิยมแล้วคูณด้วย 1e5 เพื่อปัดเศษผลลัพธ์
    -17998321
  3. แปลงค่าทศนิยมเป็นไบนารี โปรดทราบว่าคุณต้องคํานวณค่าลบโดยใช้การเสริม 2' โดยการกลับค่าไบนารีและเพิ่มค่าลงในผลลัพธ์
    00000001 00010010 10100001 11110001
    11111110 11101101 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11 11 11 1111111111111111111111 11111111111 1 111111111 1 ค่าเบื้องต้นเบื้องต้นเบื้องต้น
  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@

ตารางด้านล่างแสดงตัวอย่างของจุดที่เข้ารหัส โดยแสดงการเข้ารหัสเป็นชุดการชดเชยจากจุดก่อนหน้า

ตัวอย่าง

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`@