המרת נתוני וקטור מסוג GIS ל-KML

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

מטרה

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

מבוא

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

ישויות ממשלתיות רבות מפרסמות חלק מנתוני GIS שלהן לשימוש ציבורי. פורטלים כמו Data.gov, Massachusetts Html Information System ו-DataSF מאפשרים למצוא נתונים בקלות על הקהילות שלהם. במאמר הזה נתאר איך להמיר נתוני וקטורים – כלומר נתונים שמורכבים מגיאומטריה פשוטה כמו נקודות, קווים ופוליגונים – ל-KML. כך תקבל גישה למגוון סוגים שונים של נתונים, כולל:

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

קיימות אפליקציות מצוינות רבות לביצוע המרת נתונים, כגון Google Earth Pro , shp2KML , KML2KML , Arc2Earth ועוד רבות אחרות. מאמר זה יתמקד בהמרת נתוני וקטורים ל-KML לשימוש ב-Google Earth או במפות Google, באמצעות הכלים בקוד פתוח ספריית Geospatial Data Abstraction(שורת GDAL) משורת הפקודה, ואולי יעודד אתכם לשלב את הספריות האלה באפליקציות שלכם.

הערה לגבי סוגי קבצים

במאמר הזה נפרט את השלבים הננקטים בהמרת shapes של ESRI ל-KML, אבל ניתן להשתמש במתקני GDAL, ובמיוחד OGR, כדי להמיר המרות ממגוון רחב של סוגי קבצים, כולל מסדי נתונים מסוג CSV, PostGRES/PostGIS ומגוון פורמטים אחרים. קיימת תמיכה ברוב הפורמטים הנפוצים של הנתונים. אם מצאתם פורמט שאינו נתמך, תוכלו לכתוב מנהל התקן עבור OGR מאחר שזו ספריית קוד פתוח.

קובצי צורות

הפורמט הפופולרי של קובצי ESRI הוא הצורה של נתוני GIS. אמנם מבחינה טכנית, ה-filefile הוא קובץ יחיד עם סיומת .shp, אך לא ניתן לפתוח אותו בעצמו. יש צורך בקובץ .dbf ו- .shx לפחות, ויש צורך גם במגוון קבצים אחרים למגוון מטרות. לכן, כשרואים קובץ עזר, לרוב המשמעות היא אוסף של קבצים, בדרך כלל בארכיון דחוס כלשהו, כדי לשמור אותו יחד. ככה נשתמש במונח shapefile בהמשך המאמר.

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

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

מערכות עזר מרחביות (SRS) משמשות לזיהוי מערכות קואורדינטות ותחזיות המשמשות ליצירת נתוני הווקטור. ב-KML נעשה שימוש בקווי אורך ורוחב במערכת קואורדינטות WGS84. עם זאת, קיימות דרכים אחרות לזיהוי קואורדינטות במפה. בין הקטגוריות הפופולריות ניתן למנות את: Universal Transverse Mercator, את הרשת הלאומית הבריטית ואת המטוס הלאומי. כדי להמיר נתונים ל-KML, ייתכן שתצטרכו לזהות את המידע הזה. KML תומך רק ב-WGS84. בדרך כלל קובצי הצורות יכילו את המידע הזה ביחד איתם, לרוב בקובץ .prJ , ו-OGR יוכל לזהות אותם משם. עם זאת, לפעמים יש צורך לזהות את ה-SRS. לפעמים מקור המידע מגיע בצורה כלשהי ממקור הנתונים, בדף שמורידים אותו ממנו או במסמך Readme שמכיל את ההורדה, או בפורמט אחר. לרוב, זה מספיק. באתר הפניות מרחביות יש מידע נוסף על SRS ויש לו קובץ עזר שמאפשר לחפש מערכות עזר נפרדות.

Ogr2ogr

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

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

ניתן להשתמש ב-ogr2ogr בקלות משורת הפקודה. כך ניתן להמיר את realtor_neighborhoods מקובץ צורה ל-KML:

ogr2ogr -f "KML" -where "NBRHOOD='Telegraph Hill'" realtor_neighborhoods.kml realtor_neighborhoods.shp

לפניך פירוט של הפעולות שהפקודה הזו עושה:

  • ogr2ogr: זוהי הפקודה העיקרית.
  • -f "KML: ההגדרה של פורמט הפלט היא KML.
  • -where "NBRHOOD='Telegraph Hill'": זהו משפט אופציונלי ב-where, כמו ב-SQL. בעיקרון, השיטה הזו מאפשרת להריץ שאילתות על הנתונים לפי מטא-נתונים. הוא מתאים לצורות ולסוגים אחרים של קבצים שתומכים בשאילתות. במקרה הזה, השאילתה שולחת שאילתה עבור השדה NBRHOOD, ובוחרת רק תכונות שיש להן NBRHOOD של טלגרף היל. אם הפרמטר הזה לא יופעל, מערכת ogr2ogr תספק לך כל פוליגון שכונתי.
  • realtor_neighborhoods.kml: זהו שם קובץ הפלט. שם קובץ הפלט מופיע ראשון.
  • realtor_neighborhoods.shp: זהו השם של קובץ הקלט. קובץ ה- .shp מייצג את כל קובץ הצורה.

זהו, זה פשוט מאוד. פקודה זו כותבת קובץ KML שנראה כך:

<?xml version="1.0" encoding="utf-8" ?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document><Folder><name>realtor_neighborhoods</name>
    <Schema name="realtor_neighborhoods" id="realtor_neighborhoods">
      <SimpleField name="Name" type="string"></SimpleField>
      <SimpleField name="Description" type="string"></SimpleField>
      <SimpleField name="OBJECTID" type="float"></SimpleField>
      <SimpleField name="NBRHOOD" type="string"></SimpleField>
      <SimpleField name="SFAR_DISTR" type="string"></SimpleField>
    </Schema>
    <Placemark>
      <ExtendedData><SchemaData schemaUrl="#realtor_neighborhoods">
        <SimpleData name="OBJECTID">81</SimpleData>
        <SimpleData name="NBRHOOD">Telegraph Hill</SimpleData>
        <SimpleData name="SFAR_DISTR">District 8 - Northeast</SimpleData>
      </SchemaData></ExtendedData>
      <Polygon><outerBoundaryIs><LinearRing><coordinates>-122.41041847319012,37.805924016582715,0 -122.407203813674,37.806324902060979,0 -122.40667792852096,37.803710121958744,0 -122.40348255423899,37.804117462290641,0 -122.40237202127015,37.798540648764529,0 -122.40876046662795,37.797723222540775,0 -122.41041847319012,37.805924016582715,0</coordinates></LinearRing></outerBoundaryIs></Polygon>
      <Style><LineStyle><color>ff0000ff</color></LineStyle>  <PolyStyle><fill>0</fill></PolyStyle></Style>
    </Placemark>
  </Folder></Document></kml>

ניתן לראות שהמטא-נתונים מקובץ הצורה נשמרו, ברכיבים Schema ו-SimpleData. למידע נוסף על השימוש ב-ExtendedData ועל שימור נתונים מותאמים אישית, מומלץ לעיין במדריך למפתחים בנושא KML בנושא הוספת נתונים מותאמים אישית.

המאמרים הבאים

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