מפת ישראל בגוגל מפס
בתקופה האחרונה יצא לי להתעסק הרבה עם שירות המפות של גוגל (Google Maps), וספציפית להשתמש בממשק שגוגל מציעים כדי להציג נתונים על מפה ולשלב את התוצאה באתר חיצוני.
הבעיה היא שנכון לרגע זה, גוגל לא מספקים מפות של ישראל, אלא רק תצלומי לווין. לעומת זאת, אתרים שכן מציגים מפות של ישראל (למשל emap ו-וואלה! מפות) לא מאפשרים לשלב את המפה באתר חיצוני או להציג עליה שכבות מידע נוספות. בפוסט הנוכחי אציג פתרון שמבוסס על הצגת מפות מהאתר ABMaps כשכבה בתוך גוגל מפס.
קוד עובד שמאפשר לעשות זאת ניתן להורדה פה תחת רישיון קוד פתוח. כיוון ששימוש בקוד בודאי מפר את תנאי השימוש של כמה אתרים, המלצתי האישית היא לא להשתמש בו בכלל, ובפרט לא באפליקציה מסחרית. הקוד מוצע להורדה למטרות חינוכיות בלבד, והתוצאה הסופית נראית כך:

כדי להבין איך הפתרון עובד, צריך קודם להבין איך עובדות מפות באופן כללי. הרעיון הבסיסי הוא שיש לנו מידע שנמצא על שטח הפנים של כדור הארץ (או לחילופין על גלובוס), ואנחנו רוצים להציג אותו על דף ניר רגיל. כדור הארץ אמנם תלת מימדי, אבל שטח הפנים שלו דו מימדי - ולכן לפחות ברמה הראשונית לא נראה שאמורה להיות בעיה.
השאלה היא איך בדיוק עושים את זה. כדי להבין איפה הבעיה, תחשבו על תפוז, ותנסו לדמיין איך אפשר להוריד ממנו את הקליפה ולהציג אותה כמלבן מושלם - כשאסור לקרוע מהקליפה חלקים ולשנות את המיקום שלהם.
הפתרון מגיע מהמתמטיקה: בניסוח פורמאלי, השאלה היא כיצד למפות (ז"א להתאים באופן חד-חד ערכי) נקודות על פני כדור תלת-מימדי לנקודות במישור הדו-מימדי. העובדה שניתן לעשות זאת שקולה לכך ששטח הפנים של כדור הוא יריעה דו-מימדית (למשל ניתן לתאר כל נקודה כזו בעזרת שתי קורדינטות כדוריות).
מה שמעניין יותר, הוא שכל מיפוי כזה בהכרח יגרום לעיוותים במרחב, במובן שמרחקים בין נקודות ישתנו כשנעבור מהגלובוס למפה: שני זוגות של נקודות במרחק זהה על הגלובוס עלולים להיות פתאום במרחק שונה על המפה. אם נחשוב שוב על קליפת התפוז שלנו, המשמעות היא שאם אנחנו רוצים למלבן את הקליפה מבלי לשבור אותה לחתיכות, נהיה חייבים למתוח או לדחוס חלקים ממנה.
בפועל, במפות של כדור הארץ נהוג להשתמש בהתאמה בשם היטל מרקטור (Mercator projection), עם נוסחא נוראית מספיק בשביל לכלול לוגריתם של טנגנס. מה לגבי העיוותים במרחב? מתברר שלא חסרים כאלה. למשל, לפי המפות הסטנדרטיות נראה שלגרינלנד ולאפריקה שטח זהה, כשבפועל שטחה של אפריקה גדול פי 14. באופן דומה, אלסקה נראית גדולה יותר מברזיל, למרות שהאחרונה גדולה ממנה פי 5 ויותר. מי שלא מאמין (ואין לו גלובוס בבית בשביל לבדוק) יכול להשוות בין גוגל מפס לגוגל earth.
כעת יש לנו את הכלים להבין איך גוגל מפס עובד. עבור כל רמת זום שנתמכת בגוגל מפס, לגוגל יש מפה מלבנית מתאימה של העולם (שהתקבלה כמובן ע"י הפעלת היטל מרקטור). את המפה הזאת הם בחרו לחלק לריבועי תמונה בגודל 256 על 256 פיקסל כל אחד, ובכל פעם לשלוח לדפדפן רק את הריבועים המתאימים לאיזור הקטן שבו המפה מתמקדת.
למזלינו, גוגל היו חכמים ונחמדים מספיק בשביל לאפשר לכל אחד להרחיב את גוגל מפס, ולהצביע על אתר חיצוני שמספק ריבועים כאלה. אם היה אתר שיודע לספק ריבועי מפה כאלה שכוללים מפות של ישראל, היינו יכולים להצביע עליו והבעיה היתה נפתרת. שיטוט קצר במספר אתרי מפות באינטרנט (עם FireFox פתוח על FireBug, כדי לבחון אילו קבצים יורדים לדפדפן בכל גלישה כזו) העלה שהאתר ABMaps (של חברת AtlasCT הישראלית) מספק את הסחורה.
כעת נותרו שתי בעיות בלבד: ראשית, התברר ש-ABMaps עובדים עם מלבני מפה בגודל 400 על 280 פיקסלים, בעוד גוגל מוכנה לקבל ריבועים בלבד. למזלינו, מתברר שניתן (ע"י שינוי קל בכתובת התמונה) לבקש מ-ABMaps לספק חלקי מפה בכל גודל שהוא. Problem solved.
הבעיה השניה היתה כיצד להתאים בין הקורדינטות של גוגל לבין הקורדינטות של ABMaps. למשל, ריבוע המפה שלפי גוגל הפינה השמאלית העליונה שלו נמצאת בקורדינטות (256, 1024) לא הצביע על אותו איזור של הריבוע המקביל לפי ABMaps.
הנחתי ש-ABMaps לא המציאו את הגלגל מחדש, ובחרו גם הם להשתמש בהיטל מרקטור, או לכל היותר בטרנספורמציה לינארית שלו. לכן, פתרון לבעיה יהיה פשוט למצוא את המקדמים של הטרנספורמציה הזו, ז"א מדובר בבעיית רגרסיה לינארית. כדי לפתור אותה בחרתי 15 נקודות על כדור הארץ, ומצאתי את הקורדינטות שלהן לפי ABMaps ולפי גוגל מפס. והרי התוצאות:

המתאם המושלם בין הנתונים מאשש את ההשערה ש-ABMaps משתמשים בטרנספורמציה לינארית על היטל מרקטור הסטנדרטי. בנוסף, ממקדמי הרגרסיה שהתקבלו ניתן לשער שנקודות החיתוך עם הצירים הן בפועל 364000000 ו-164000000, ושהשיפוע זהה עבור קורדינטת ה-x וקורדינטת ה-y. לכן, מודל רגרסיה טוב יותר הוא כזה שמחפש רק את השיפוע (הזהה) האופטימלי בהינתן שנקודות החיתוך עם הצירים הן כנ"ל.
בשלב זה נטשתי את excel, וכתבתי קוד CVX שפותר את הבעיה, כדי להגיע לערך שיפוע של 1.072883578234450 (מה לעשות, כשלומדים למבחן באופטימיזציה לא-לינארית כל בעיה נראית כמו בעית תכנון קמור). התוצאה לא מושלמת - כשמזפזפים בין צילום הלווין של גוגל למפה של ABMaps מקומות זהים לא נופלים בדיוק אחד על השני - אבל היא קרובה מאוד למושלמות.
כאמור, ניתן להוריד את הקוד בקישור הבא.
שני, 18 באוגוסט 2008 בשעה 21:05
ואו. ++
שני, 18 באוגוסט 2008 בשעה 21:56
cool! כל הכבוד
שלישי, 19 באוגוסט 2008 בשעה 2:04
ממש מגניב
אם רק זה היה רשמי ואפשר היה להשתמש במפות האלה…
שלישי, 19 באוגוסט 2008 בשעה 14:23
ענק!
אחלה פוסט!
שלישי, 19 באוגוסט 2008 בשעה 16:31
[…] דיסוננס קוגניטיבי מפת ישראל בגוגל מפס […]
שלישי, 19 באוגוסט 2008 בשעה 19:49
פוסט מעניין!
במה יצא לך להשתמש במפות האלה?
ואיך מתקדם רימזו?
רביעי, 20 באוגוסט 2008 בשעה 2:07
אני חייב לציין שעומד לי. אתה אדיר, אחלה פוסט. תודה
שישי, 22 באוגוסט 2008 בשעה 17:44
לגבי ההבדלים בהיטל בין ABMaps לבין Google Maps וכו':
אם אני זוכר נכון את מה שאבא של חבר (שעוסק בגיאודזיה) הסביר לנו בזמנו, אחד מהנושאים במיפוי הוא להתמודד עם העובדה שכדור הארץ אינו אליפסואיד מושלם.
בניגוד לתפוז, שהבאת כדוגמא, לכדור הארץ קימורים רבים - הרים, עמקים, וכו'. מעבר לכך, העקימות הזו אינה סימטרית על פני כדור הארץ, ולכן כדי למנוע עיוותים, מיפוי של מקומות שונים דורש שימוש בהיטל שונה.
אז יש תקן אירופאי מ1950 שמתאים בעיקר לאירופה, ותקן אמריקאי מ1984 שמנסה להתאים לכל העולם, וכו' וכו'. יש גם משרד ממשלתי שאחראי על הנושא הזה עבור ישראל.
בכל אופן, עקב הצורך הזה אכן גופים שונים בעולם משתמשים בהיטל שונה לצורך המיפוי, וכך נוצרים עיוותים ברשתות הקורדינאטות (קורדינטות זהות מצביעות על מקומות שונים), ומתפתח הצורך בתיאום ביניהם, כפי שהדגמת כאן.
ראשון, 24 באוגוסט 2008 בשעה 17:19
פרדי:
בגוגל מפס (בלי קשר לשכבה הנוספת של ABMaps) אני משתמש כחלק מאפליקציית פייסבוק + סלולר שאני מפתח, פרטים נוספים בעתיד.
לגבי רימזו, הפסקנו לתחזק את האתר לפני כמעט שנה. בערך באותה תקופה קיבלנו פניה מיזם אמריקאי שניסה להרים מערכת פידבק לארגונים והתלהב מכמה רעיונות שיישמנו ברימזו, ובמשך כמה חודשים היינו מעורבים בכתיבת מסמך הדרישות לאפליקציה הארגונית (בתשלום כמובן). בסופו של דבר החברה האמריקאית נכשלה בגלל בעיות מימון.
זה שתקוע בפיפטיז:
למיטב ידיעתי, מדינות שונות משתמשות בהיטלים שונים (למשל מדינות צרות וארוכות משתמשות בהיטל שונה ממדינות קצרות ורחבות). בכל מקרה במקרה שתיארתי לא סביר שנעשה שימוש בהיטל אחר, כי אחרת לא היה מתאם מושלם כל כך של הטרנספורמציה הלינארית (עד כמה שאני יודע, היטלים אחרים אינם דוקא טרנספורמציה לינארית של היטל מרקטור, אלא ממש שונים ממנו מהותית).
שישי, 29 באוגוסט 2008 בשעה 12:36
תודה רבה. נדיר ליפול על פוסט שאפשר ללמוד ממנו כל כך הרבה
שבת, 30 באוגוסט 2008 בשעה 23:53
באיזה היטל השתמשו במפות לניווט ימי או אוירי של צפון האטלנטי למשל?
היטל מרקטור יעוות את האזור של גרינלנד, איסלנד, והיית רוצה שמפה של האזור הזה תחחבר בצורה חלקה עם מפה של אירופה או צפון אמריקה. אני תוהה אם יש סטנדרט להיטלים של חלקים מכדה"א שממזער את העיוותים המקומיים ואת אי ההתאמה בקצוות של מפות משיקות.
ראשון, 31 באוגוסט 2008 בשעה 1:51
ירונס:
מתברר שיש מיפוי בשם Universal Transverse Mercator coordinate system (או UTM) שמחלק את שטח הפנים של כדור הארץ ל-60 איזורים שונים, ובכל אחד מהם מפעיל מיפוי מסוג Transverse Mercator. בצורה כזאת דואגים שבאף איזור לא יהיה עיוות גדול מדי.
הבעיה היא שגם המיפוי הזה מעוות מאוד את איזור הקטבים, ולכן שם ספציפית משתמשים במיפוי אחר, שנקרא Universal Polar Stereographic Coordinate System (או UPS).
רביעי, 03 בספטמבר 2008 בשעה 12:00
ובתזמון נדיר, גוגל הוסיפו סוף סוף תמיכה רשמית למפת ישראל (כרגע אפשר לראות שמות רחובות רק בעברית).
שני, 29 בספטמבר 2008 בשעה 7:10
הייתי רוצה לעשות שילוב בין הצילומי לווין של גוגל ומתרשימים של מפות תשתית.
יש אפליקציה שתומכת ברעיון?
אייל
שני, 29 בספטמבר 2008 בשעה 14:22
אייל טנדלר:
לא הבנתי למה אתה מתכוון ב"תרשימים של מפות תשתית". בכל מקרה (כמו שכתבתי) ניתן להרחיב את גוגל מפס בעזרת שכבות נוספות של מפות - אתה מוזמן להשתמש בקוד שלי כדוגמא או לקרוא את התיעוד של ה-API של גוגל מפס.
ראשון, 26 באוקטובר 2008 בשעה 5:00
עוד עדכון קצר:
מתברר שגוגל אמנם מציעים מפות מלאות של ישראל (ואפילו שמות רחובות באנגלית!), אבל רק לגולשים באתר של גוגל מפס. בפרט, אין פירוט של ישראל במפות שמשולבות באתרים אחרים בעזרת ה-API של גוגל. הסיבה, ככל הנראה, היא הסכם של גוגל עם ספק התוכן בישראל.
בכל מקרה, הספריה שקישרתי אליה מציעה כעת מפה נוספת: המפה הרגילה של גוגל מפס בתוספת פירוט הרחובות בישראל. זה נעשה ע"י הרחבת ה-API בעזרת האתר של גוגל מפס עצמו, באופן דומה למתואר בפוסט.
חמישי, 13 בנובמבר 2008 בשעה 23:12
http://www.slidex.co.il/watch/661
חמישי, 09 באפריל 2009 בשעה 23:51
אז אנחנו עדיין תקועים עם בעיית GMap API וישראל, השאלה היא אם אני רוכש את המידע על הרחובות מהמרכז למיפוי ישראל או חברת מפה, האם אפשר די בקלות לשלב בין GMap לנתונים?
תודה,
אריק
שישי, 10 באפריל 2009 בשעה 22:05
אריק:
אני לא האדם המתאים לשאלות בנוגע להליך החוקי לשילוב של מפות ישראל באתר שלך.
הקוד שקישרתי אליו הוא פתרון טכנולוגי טוב לבעיה, אבל השימוש בו עשוי להיות בעייתי מבחינת תנאי השימוש של גוגל (ושל אתרים אחרים).
שלישי, 09 ביוני 2009 בשעה 11:06
למי שרוצה מפות של העולם יש את openstreetmap שמנסה למפות את העולם על ידי מתנדבים ומספק את המידע באופן חופשי ונגיש. המיפוי של ישראל חלקי למדי אבל משתפר. ההיטח המשמש את OSM זהה לזה של גוגל.
http://www.openstreetmap.org/?lat=31.88&lon=36.09&zoom=8&layers=B000FTF