פורמט אלגוריתם מצולע מקודד

קידוד Polyline הוא אלגוריתם של דחיסת נתונים מסוג אובדן שמאפשר לאחסן סדרה של כמחרוזת אחת. קואורדינטות הנקודות מקודדות באמצעות ערכים חתומים. אם יש לך רק כמה נקודות סטטיות, מומלץ גם להשתמש כלי עזר לקידוד קו פוליגוני.

תהליך הקידוד ממיר ערך בינארי לסדרה של קודי תווים עבור תווי ASCII שמשתמשים בסכימת הקידוד המוכרת של base64: כדי להבטיח הצגה תקינה מתוך התווים האלה, הערכים המקודדים מסוכמים ב-63 (תו ה-ASCII '?') לפני שממירים אותם ל-ASCII. האלגוריתם גם בודק אם יש פונקציות נוספות קודי תווים לנקודה נתונה על ידי בדיקת החלק הכי פחות משמעותי byte group; אם הביט הזה מוגדר ל-1, הנקודה עדיין לא נוצרה במלואה נתונים נוספים חייבים לבוא אחריה.

בנוסף, כדי לחסוך מקום, הנקודות כוללות רק את ההיסט מהנקודה הקודמת (מלבד כמובן לנקודה הראשונה). כל הנקודות מקודדות ב-Base64 כמספרים שלמים חתומים, מאחר שקווי אורך ורוחב הם ערכים חתומים. פורמט הקידוד בתוך קו פוליגוני צריך לייצג שתי קואורדינטות שמייצגים קו רוחב וקו אורך ברמת דיוק סבירה. נקבע ערך מקסימלי קו אורך של +/- 180 מעלות עד דיוק של 5 ספרות אחרי הנקודה העשרונית (180.00000 עד -180.00000), וכתוצאה מכך יש צורך בחתימה של 32 ביט מספר שלם בינארי.

שים לב שהקו הנטוי ההפוך מתפרש כתו בריחה בתוך ליטרלים של מחרוזת. כל פלט של הכלי הזה צריך להמיר לוכסן הפוך. עד לוכסן כפול בתוך מילים של מחרוזות.

השלבים לקידוד ערך חתום כזה מפורטים בהמשך.

  1. לוקחים את הערך החתום הראשוני:
    -179.9832104
  2. לוקחים את הערך העשרוני ומכפילים אותו ב-1e5, כדי לעגל את התוצאה:
    -17998321
  3. ממירים את הערך העשרוני לבינארי. שימו לב שהערך השלילי מחושב באמצעות הפונקציה משלימים את שניהם על ידי ממירים את הערך הבינארי ומוסיפים אחד לתוצאה:
    00000001 00010010 10100001 11110001
    11111110 11101101 01011110 00001110
    11111110 11101101 01011110 00001111
    
  4. הזזה שמאלה של הערך הבינארי ביט אחד:
    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`@