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

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

תהליך הקידוד ממיר ערך בינארי לסדרה של קודי תווים של תווי ASCII באמצעות סכימת הקידוד המוכרת base64: כדי להבטיח תצוגה תקינה של התווים האלו, הערכים המקודדים יסוכמו ב-63 (תו ה-ASCII '?') לפני ההמרה שלהם ל-ASCII. האלגוריתם בודק גם קודי תווים נוספים לנקודה נתונה על ידי בדיקת הסיביות הפחות משמעותית מכל קבוצת בייטים. אם הביט מוגדר ל-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`@