קואורדינטות מפה ואריחים

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

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

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

קואורדינטות בעולם

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

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

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

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

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

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

pixelCoordinate = worldCoordinate * 2zoomLevel

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

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

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

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

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

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

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

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

דוגמה

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

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