יצירת שכבות-על עם gdal2tiles

Mano Marks, צוות Google Geo APIs
ספטמבר 2009

מטרה

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

מבוא

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

  • מיקום לוויין או צילומי אוויר משלך בדפדפן גיאוגרפי
  • הצבת מפות היסטוריות מעל תמונות קיימות, כגון השכבה מפות רמזי ב-Google Earth
  • יבוא נתוני GIS בצורת רסטר
  • הצבת LIDAR או תמונות אינפרה-אדום בדפדפן הגיאוגרפי

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

אריח מפצל את קובץ התמונה לתמונות רבות ושונות שנטענות כאשר הן מוצגות. כשיוצרים תמונה אחת ברזולוציה נמוכה, המשתמש מתרחק. על אותו אזור יוצרים ארבע תמונות ברזולוציה גבוהה יותר, כדי שתהיה יותר אפשרות לצפות בהן. עבור כל אזור בתמונה המכוסה, תיצור ארבע תמונות נוספות ברזולוציה גבוהה יותר כדי להגדיל את מרחק התצוגה וכו'. זוהי השיטה המכונה ארבעה משבצות, והיא האופן שבו התמונות מרוצפות ב-Google Earth ובמפות Google. התהליך מוסבר בפירוט במאמר המאמר למפתחים של KML לגבי אזורים.

ניתן לעשות זאת באופן ידני באמצעות אפליקציה לעריכת גרפיקה, כמו PhotoShop או GIMP של Adobe, אבל זו יכולה להיות פעולה קלה ומתישה ומושפעת משגיאות. יש גם מספר יישומים טובים, בעיקר עבור Windows, כגון SuperLayer, Arc2Earth ו-MapsCruncher בשילוב עם CrunchUp2KML.

אם רוצים להפוך את התהליך לאוטומטי, או להוסיף פונקציונליות לאפליקציה שלכם, GDAL מספק לכם מגוון רחב של כלים לעבודה עם רשת נתונים ונתונים וקטוריים. המאמר הזה עוסק באפשרויות של שורת הפקודה. עם זאת, ניתן לשלב בקלות את הספריות גם באפליקציות שלכם. במדריך הזה נשתמש בכלים gdalinfo, gdal_translate, gdalwarp ובgdal2tiles. הפלט האולטימטיבי הוא שכבת-על עליונה.

שלבים בשורת הפקודה

יש שישה שלבים לשימוש ב-GDAL בשורת הפקודה.

  1. הורדה והתקנה של GDAL
  2. הורדת תמונה
  3. שימוש ב-gdalinfo לקביעת המידע על התמונה
  4. שימוש ב-gdal_translate לביצוע הפניה גיאוגרפית לתמונה
  5. שימוש ב-gdalwarp כדי לשנות את ההקרנה של התמונה
  6. באמצעות gdal2tiles אפשר לחלק את התמונה למשבצות וליצור את קוד ה-KML המשויך

שלב 1: מורידים ומתקינים את GDAL

אפשר להתחיל על ידי הורדה והתקנה של GDAL, כפי שמפורט כאן.

שלב 2: הורדת תמונה

ניתן להשתמש בכל תמונה. יש כמה מקורות של נתונים גיאוגרפיים באינטרנט. אפשר להשתמש בכל אחד מהם, אבל צריך לדעת מה הגבולות של התמונה – את קווי האורך והרוחב של כל אחת מהפינות של התמונה. המדריך הזה משתמש בתמונת שיש כחולה של NASA, שזמינה להורדה באתר של NaASA. התמונות האלה צולמו ב-2004 והן מציגות תמונה יפה של כדור הארץ מהחלל. בוחרים באחד מהקבצים שבפינה השמאלית התחתונה של סרגל הניווט השמאלי.

אם אתם משתמשים בתמונה משלכם ואתם יודעים שהיא עברה כבר גיאוגרפיה, אתם יכולים לדלג לשלב 5. אחרת, המשך לשלב 3.

שלב 3: קבלת מידע על התמונה

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

GDAL מספק כלי שימושי, gdalinfo, ללכידת המידע הזה. בשורת הפקודה פשוט מקלידים gdalinfo filename ומחליפים את filename בנתיב לקובץ. הפלט אמור להיראות כך:

Driver: JPEG/JPEG JFIF
Files: world_200401.jpg
Size is 21600, 10800
Coordinate System is `'
Image Structure Metadata:
  SOURCE_COLOR_SPACE=YCbCr
  INTERLEAVE=PIXEL
  COMPRESSION=JPEG
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0,10800.0)
Upper Right (21600.0,    0.0)
Lower Right (21600.0,10800.0)
Center      (10800.0, 5400.0)
Band 1 Block=21600x1 Type=Byte, ColorInterp=Red
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 2 Block=21600x1 Type=Byte, ColorInterp=Green
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 3 Block=21600x1 Type=Byte, ColorInterp=Blue
  Image Structure Metadata:
    COMPRESSION=JPEG

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

שלב 4: מטרגטים את התמונה גיאוגרפית

שימוש בהפניה גיאוגרפית במקרה זה פירושו יצירת מטא נתונים המתארים את המיקום הגיאוגרפי של כל אחת מפינות התמונה. על סמך המידע שמתקבל בשלב 3 ובשלב gdal_translate, אפשר להקצות לקובץ מידע על הפניות גיאוגרפיות. פעולה זו יוצרת קובץ VRT מתוך התמונה world_200401.jpg, bluemarble1.vrt. קובצי VRT הם קובצי XML שמכילים מידע על שינוי מסוים, במקרה הזה השלב gdal_translate. תשתמשו בה שוב בשלב הבא כדי ליצור את קבוצת המשבצות הסופית. ב-gdal_translate אפשר לבצע כמה סוגים של פלטי קבצים, כולל פורמטים ראשיים של קובצי תמונות. השימוש בפלטי VRT מאפשר בפועל לדחות קבצים של פלט עד לשלב האחרון. כך תגדילו את היעילות ותפחיתו את זמן ההמתנה בשלבים מסוימים, אם אתם משתמשים בשורת הפקודה. כך תריץ את הפקודה:

gdal_translate -of VRT -a_srs EPSG:4326 -gcp 0 0 -180 90 -gcp 21600 0 180 90 -gcp 21600 10800 180 -90 world_200401.jpg bluemarble1.vrt

השורה הזו מכילה הרבה מידע, לכן הנה פירוט:

  • -of הוא פורמט פלט, במקרה הזה VRT.
  • -a_srs מקצה מערכת עזר מרחבית לקובץ. הוא מציין עבור כל אפליקציה שצורכת אותה, באמצעות מערכת הקואורדינטות. במקרה זה, הוא משתמש ב-EPSG:4326, שהוא זהה ל-WGS84, מערכת הקואורדינטות המשמשת את Google Earth.
  • -gcp, או נקודת הבקרה על הקרקע, מקצה קואורדינטות למיקומים בקובץ. במקרה זה, דרושות רק שלוש נקודות, מאחר שהתמונה היא מלבן ולכן קל לזהות את הנקודה הרביעית. עבור -gcp, מגדירים את ה-gcp על ידי הגדרת הפיקסל, לאחר מכן מספר קו ואז קו האורך וקו הרוחב. יש להפריד ביניהם.
  • שני הפרמטרים האחרונים הם קובץ המקור וקובץ היעד.

שלב 5: עיוות של התמונה

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

כדי שהתמונה תיראה כמו שצריך, אתם צריכים לעוות את התמונה כך שתתאים לכדור הארץ. למזלנו, GDAL הוא כלי מצוין שמאפשר לעשות את זה. פשוט מקלידים gdalwarp -of VRT -t_srs EPSG:4326 bluemarble1.vrt bluemarble2.vrt. הפעולה הזו תיצור קובץ חדש, Bluemarble.vrt, שיספק מטא-נתונים על הליך העיוות.

שלב 6: יצירת המשבצות

כמעט סיימת, אבל החלק הזה יימשך הכי הרבה זמן. כדי ליצור את כרטיסי המידע, יש להקליד gdal2tiles.py -p geodetic -k bluemarble2.vrt. -k אוכף פלט KML. הפעולה הזו תיצור מבנה ספרייה עם שכבת-על עליונה. צריך ליצור כל קובץ תמונה בנפרד, כי ייתכן שייקח קצת זמן עד שהוא יפעל. כדי לצלם תמונות גדולות, עכשיו אתם יכולים ללכת, לשתות קפה, לתפוס תנומה, או אולי לאכול ארוחה קלה. כשמסיימים, פותחים את doc.kml ומעיינים בתוצאות!

סיכום

המדריך הזה פשוט מדגימה את מה שה-GDAL יכול לעשות, אבל הוא מספק מנגנון נוח ליצירת אריחים. ספריות הליבה של GDAL נכתבות ב-C++ , אך הן מספקות איגודים עבור Perl , Python , VB6 , R , Ruby , Java ו-C#/.NET. כך תוכלו לשלב בקלות את GDAL באפליקציות שלכם. בנוסף, רבים מהכלים, כולל gdal2tiles, נכתבים ב-Python, ומקלים על השילוב שלהם באפליקציות Python. ל-gdal2tiles יש גם יכולת ליצור דפים של Google Maps API ו-OpenLayers.