בממשק API של JavaScript במפות Google נעשה שימוש במערכות הקואורדינטות הבאות:
- ערכים של קו רוחב וקו אורך, שמפנים לנקודה ייחודית בעולם. (Google משתמשת בתקן World Geodetic System WGS84).
- קואורדינטות גלובלית, שמתייחסות לנקודה ייחודית במפה.
- קואורדינטות פיקסלים, שמתייחסות לפיקסל ספציפי במפה ברמת התצוגה הממוזערת הספציפית.
- קואורדינטות של משבצת, שמתייחסות למשבצת ספציפית במפה ברמת התצוגה הממוזערת הספציפית.
קואורדינטות בעולם
בכל פעם שה-API צריך לתרגם מיקום בעולם למיקום במפה, הוא מתרגם קודם את ערכי קו הרוחב וקו האורך לקווי עולם. ה-API משתמש בתצוגה פרויקטיבית של Mercator כדי לבצע את התרגום הזה.
כדי להקל על החישוב של קואורדינטות הפיקסלים (ראו בהמשך), אנחנו מניחים שמפה ברמת זום 0 היא אריח יחיד בגודל של אריח הבסיס. לאחר מכן אנחנו מגדירים קואורדינטות גלובלית ביחס לקווי הפיסקלים ברמת הזום 0, באמצעות הקרנה כדי להמיר קוי רוחב ואורך למיקומי פיקסלים באריח הבסיס הזה. קואורדינטת העולם הזו היא ערך של נקודה צפה שנמדד ממקור הקרנת המפה למיקום הספציפי. חשוב לזכור שהערך הזה הוא ערך של נקודה צפה, ולכן הוא עשוי להיות מדויק הרבה יותר מהרזולוציה הנוכחית של תמונת המפה שמוצגת. במילים אחרות, קואורדינטה גלובלית לא תלויה ברמת הזום הנוכחית.
הקואורדינטות של העולם במפות Google נמדדות מנקודת המוצא של הקרנת Mercator (הפינה הצפונית-מערבית של המפה, בקו אורך 180 מעלות ובקו רוחב של כ-85 מעלות), ומגדילות את הערך בכיוון x
לכיוון מזרח (ימינה) ובכיוון y
לכיוון דרום (למטה). מאחר שהאריח הבסיסי של מפות Google בפרויקטור Mercator הוא בגודל 256 על 256 פיקסלים, המרחב שאפשר להשתמש בו של קואורדינטות העולם הוא {0-256}, {0-256}
.
חשוב לשים לב שלמיקום Mercator יש רוחב מוגבל לאורך, אבל גובה אינסופי לאורך קו הרוחב. אנחנו מחסימים את התמונות של מפת הבסיס באמצעות הקרנה של Mercator בזווית של כ-85 מעלות פלוס/מינוס, כדי שהמפה שתתקבל תהיה ריבועית. כך קל יותר לבחור את המשבצות. חשוב לזכור שפרויקציה עשויה ליצור קואורדינטות של כדור הארץ מחוץ למרחב הקואורדינטות שאפשר להשתמש בו במפה הבסיסית, אם למשל מתכננים את המיקום קרוב מאוד לקוטבים.
קואורדינטות של פיקסלים
קואורדינטות פיקסלים מתייחסות לפיקסל ספציפי במפה ברמת זום ספציפית, בעוד שקואורדינטות גלובלית משקפות מיקומים מוחלטים בתצוגה נתונה. קואורדינטות הפיקסלים מחושבות לפי הנוסחה הבאה:
pixelCoordinate = worldCoordinate * 2zoomLevel
מהנוסחה שלמעלה, שימו לב שכל רמת זום שמגדילים היא גדולה פי שניים גם בכיוון x
וגם בכיוון y
. לכן, כל רמת זום גבוהה יותר מובילה לרזולוציה גבוהה פי ארבע מהרמה הקודמת. לדוגמה, ברמת הזום 1, המפה מורכבת מ-4 משבצות בגודל 256x256 פיקסלים, כך ששטח הפיקסלים הוא 512x512. ברמת הזום 19, אפשר להפנות לכל פיקסל x
ו-y
במפה באמצעות ערך בין 0 ל-256 * 219.
מכיוון שהתבססנו על קואורדינטות העולם לפי גודל המשבצת במפה, החלק השלם של קואורדינטת הפיקסל מאפשר לזהות את הפיקסל המדויק במיקום הזה ברמת הזום הנוכחית. שימו לב שברמת זום 0, קואורדינטות הפיקסלים זהות לקואורדינטות הגלובלית.
עכשיו יש לנו דרך לציין במדויק כל מיקום במפה, בכל רמת התצוגה. Maps JavaScript API יוצר שדה ראייה על סמך מרכז מרחק התצוגה של המפה (כ-LatLng
) והגודל של רכיב ה-DOM שמכיל אותה, ומתרגם את תיבת הגבול הזו לקווי אורך ורוחב בפיסקלים. לאחר מכן, ה-API קובע באופן לוגי את כל אריחי המפה שנמצאים בתוך גבולות הפיקסלים שצוינו. כל אחד מקטעי המפה האלה מתייחס ל
קואורדינטות של משבצת, שמפשטות מאוד את הצגת התמונות של המפה.
קואורדינטות של קטע במפה
ה-API לא יכול לטעון את כל התמונות של המפה בבת אחת ברמות הזום הגבוהות יותר. במקום זאת, ה-API מפרק את התמונות בכל רמת זום לקבוצה של משבצות מפה, שמאורגנות באופן לוגי בסדר שהאפליקציה מבינה. כשגוללים במפה למיקום חדש או לרמת זום חדשה, ה-API קובע אילו אריחים נדרשים באמצעות קואורדינטות פיקסלים, ומתרגם את הערכים האלה לקבוצה של אריחים לאחזור. קואורדינטות המשבצת האלה מוקצות באמצעות סכימה שמאפשרת לקבוע באופן לוגי בקלות איזו משבצת מכילה את התמונות של כל נקודה נתונה.
המרצ'נדייז במפות Google ממוספרים מאותו מקור כמו הפיקסלים. בהטמעה של Google של הקרנת Mercator, המשבצת המקורית תמיד נמצאת בפינה הצפון-מערבית של המפה, כאשר ערכי x
עולים ממערב למזרח וערכי y
עולים מצפון לדרום. המשבצות נוספות לאינדקס באמצעות קואורדינטות x,y
מהמקור הזה. לדוגמה, ברמת הזום 2, כשהעולם מחולק ל-16 משבצות, אפשר להפנות לכל משבצת באמצעות צמד x,y
ייחודי:
שימו לב שכאשר מחלקים את קואורדינטות הפיקסלים בגודל המשבצת (256) ומקבלים את החלקים השלם של התוצאה, מתקבלת כתוצר לוואי קואורדינטת המשבצת ברמת הזום הנוכחית.
דוגמה
בדוגמה הבאה מוצגות קואורדינטות של שיקגו, אילינוי: ערכי קו רוחב/אורך, קואורדינטות בעולם, קואורדינטות בפיקסלים וקואורדינטות של משבצות. אפשר להשתמש בלחצן הזום כדי לראות את ערכי הקואורדינטות ברמות זום שונות.
כדי לראות איך הקואורדינטות מחושבות, אפשר לעיין בקוד.