קואורדינטות של מפה ושל משבצת במפה

בחירת פלטפורמה: Android iOS JavaScript

ב-SDK של מפות ל-iOS נעשה שימוש במערכות הקואורדינטות הבאות:

  • ערכים של קו רוחב וקו אורך, שמציינים נקודה ייחודית בעולם. ‫Google משתמשת בתקן World Geodetic System WGS84.
  • קואורדינטות עולמיות, שמציינות נקודה במפה באופן ייחודי.
  • קואורדינטות של פיקסלים, שמפנות לפיקסל ספציפי במפה ברמת זום ספציפית.
  • קואורדינטות של קטע במפה, שמפנות לקטע ספציפי במפה ברמת זום ספציפית.

קואורדינטות עולמיות

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

כדי שיהיה נוח לחשב את הקואורדינטות של הפיקסלים (ראו בהמשך), אנחנו מניחים שמפה ברמת זום 0 היא משבצת אחת בגודל של משבצת הבסיס. לאחר מכן אנחנו מגדירים קואורדינטות גלובליות ביחס לקואורדינטות של פיקסלים ברמת זום 0, ומשתמשים בהיטל כדי להמיר קווי רוחב וקווי אורך למיקומי פיקסלים במשבצת הבסיס הזו. הקואורדינטה הזו היא ערך של נקודה צפה (floating point) שנמדד מנקודת המוצא של היטל המפה למיקום הספציפי. שימו לב: מכיוון שהערך הזה הוא ערך של נקודה צפה, הוא עשוי להיות מדויק הרבה יותר מהרזולוציה הנוכחית של תמונת המפה שמוצגת. במילים אחרות, קואורדינטה גלובלית לא תלויה ברמת הזום הנוכחית.

הקואורדינטות של העולם במפות Google נמדדות מנקודת המוצא של היטל מרקטור (הפינה הצפון-מערבית של המפה בקו אורך של 180 מעלות ובקו רוחב של כ-85 מעלות), והן גדלות בכיוון x לכיוון מזרח (ימינה) ובכיוון y לכיוון דרום (למטה). מכיוון שהמשבצת הבסיסית של היטל מרקטור במפות Google היא בגודל 256x256 פיקסלים, מרחב הקואורדינטות העולמיות שניתן להשתמש בו הוא {0-256}, {0-256}.

חשוב לשים לב שלמפה בהיטל מרקטור יש רוחב סופי לאורך קווי האורך, אבל גובה אינסופי לאורך קווי הרוחב. אנחנו חותכים את התמונות של המפה הבסיסית באמצעות היטל מרקטור בערך ב-‎+/- 85 מעלות כדי ליצור מפה בצורת ריבוע, מה שמאפשר לוגיקה קלה יותר לבחירת משבצות. שימו לב: אם אתם משרטטים קרוב מאוד לקטבים, למשל, יכול להיות שההיטל ייצור קואורדינטות עולמיות מחוץ למרחב הקואורדינטות שאפשר להשתמש בו במפה הבסיסית.

קואורדינטות של פיקסלים

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

pixelCoordinate = worldCoordinate * 2zoomLevel

מהמשוואה שלמעלה, שימו לב שכל רמת זום עולה גדולה פי שניים גם בכיוון x וגם בכיוון y . לכן, כל רמת זום גבוהה יותר מניבה רזולוציה גבוהה פי ארבעה מהרמה הקודמת. לדוגמה, ברמת זום 1, המפה מורכבת מ-4 משבצות של 256x256 פיקסלים, וכתוצאה מכך נוצר מרחב פיקסלים של 512x512. ברמת זום 19, אפשר להפנות לכל פיקסל x ו-y במפה באמצעות ערך בין 0 ל-256 * 219.

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

מערכות הקואורדינטות האלה מציינות במדויק כל מיקום במפה, בכל רמת זום. ‫SDK של מפות ל-iOS יוצר אזור תצוגה לפי רמת הזום, מרכז המפה בתור LatLng וגודל רכיב ה-DOM שמכיל את המפה, ומתרגם את התיבה התוחמת הזו לקואורדינטות של פיקסלים. לאחר מכן, ה-API קובע באופן לוגי את כל משבצות המפה שנמצאות בתוך גבולות הפיקסלים הנתונים. כדי להפנות לכל אחד מהקטעים האלה במפה, משתמשים בקואורדינטות של קטע במפה, שמפשטות מאוד את הצגת התמונות במפה.

קואורדינטות של קטע במפה

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

האריחים במפות Google ממוספרים מאותה נקודת מוצא כמו הפיקסלים. בהטלת מרקטור של Google, המשבצת הראשונה תמיד נמצאת בפינה הצפון-מערבית של המפה, וערכי x גדלים ממערב למזרח וערכי y גדלים מצפון לדרום. המשבצות נוספות לאינדקס באמצעות קואורדינטות x,y מאותה נקודת מוצא. לדוגמה, ברמת זום 2, כשהעולם מחולק ל-16 משבצות, אפשר להפנות לכל משבצת באמצעות צמד x,y ייחודי:

מפת העולם מחולקת לארבע שורות וארבע עמודות של משבצות.

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

דוגמה

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

כדי לראות איך הקואורדינטות חושבו, עיינו בקוד.