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

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

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

  • ערכים של קו רוחב וקו אורך, שמציינים נקודה ייחודית בעולם. ‫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 של מפות ל-Android יוצר אזור התצוגה לפי רמת זום, מרכז המפה כ-LatLng וגודל רכיב ה-DOM שמכיל את המפה, ומתרגם את התיבה התוחמת הזו לקואורדינטות של פיקסלים. לאחר מכן, ה-API קובע באופן לוגי את כל משבצות המפה שנמצאות בתוך גבולות הפיקסלים הנתונים. כדי להפנות לכל אחד מהקטעים האלה במפה, משתמשים בקואורדינטות של קטע במפה, מה שמפשט מאוד את הצגת התמונות במפה.

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

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

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

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

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

דוגמה

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

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