בממשק 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) ומקבלים את החלקים השלם של התוצאה, מתקבלת כתוצר לוואי קואורדינטת המשבצת ברמת הזום הנוכחית.
דוגמה
בדוגמה הבאה מוצגות קואורדינטות של שיקגו, אילינוי: ערכי קו אורך/רוחב, קואורדינטות בעולם, קואורדינטות בפיקסלים וקואורדינטות של משבצות. אפשר להשתמש בבקרת הזום כדי לראות את ערכי הקואורדינטות ברמות מרחק שונות של מרחק.
כדי לראות איך הקואורדינטות מחושבות, אפשר לעיין בקוד.