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

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

ה-JavaScript JavaScript API משתמש במערכות הקואורדינטות הבאות:

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

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

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

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

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

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

קואורדינטות של Pixel

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

pixelCoordinate = worldCoordinate * 2zoomLevel

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

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

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

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

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

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

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

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

דוגמה

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

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