הוספת נתונים מותאמים אישית

KML מציע שלוש דרכים להוסיף נתונים מותאמים אישית לתכונת KML. הגישה שבה תבחרו תלויה בסוג הנתונים שאתם מוסיפים וגם באופן שבו אתם מתכננים להשתמש בנתונים במצגת ה-KML. באופן ספציפי, הרכיב <ExtendedData> מספק את המנגנונים הבאים:

  • רכיב <נתונים> - מאפשר להוסיף זוגות של שם/ערך לא מסוג מסוים לנתוני המשתמש המשויכים לתכונה נתונה (NetworkLink, Placemark, GroundLayer, PhotoLayer, ScreenLayer, מסמך או תיקייה). צמדי שמות/ערכים אלו מוצגים בבלון כברירת מחדל. ניתן להשתמש במידע הזה גם כדי להחליף יישות ברכיב <text> של <BalloonStyle>. (למידע נוסף, עיינו בקטע שימוש ברכיב BaloonStyle כתבנית).
  • רכיבי <Schema> ו-<SchemaData> מאפשרים לכם להוסיף נתונים שהוזנו לנתוני המשתמש המשויכים לתכונה נתונה.
  • נתוני XML שרירותיים – מאפשרים לשמור נתוני משתמשים בקובץ KML. מערכת Google Earth מעבירה את הנתונים האלה לקובץ ושומרת אותם, אבל לא משתמשת בהם.

הערה: אפשר לשלב את שלושת המנגנונים באותו קובץ. אם רוצים להוסיף סוגים שונים של נתונים ממקורות שונים, ייתכן שעדיף להשתמש בגישה של נתונים שהוקלדו (Schema/SchemaData) עבור חלק מהנתונים המותאמים אישית ולהשתמש בנתונים שלא הוקלדו (נתונים) לנתונים מותאמים אישית אחרים.

באיזו גישה צריך להשתמש?

ברוב המקרים, הרכיב <Data> מציע את המנגנון הפשוט והעוצמתי ביותר להוספת נתונים ללא הקלדה לתכונת KML. קל יחסית להשתמש בשיטה הזו, והיא מאפשרת להשתמש בתבנית של BaloonStyle, שניתן להחיל על כל הסמנים בקובץ KML. (במאמר החלפת ישויות ברכיבי נתונים מורחבים ניתן לראות דוגמה לשימוש כזה.)

הרכיבים <Schema> ו-<SchemaData> מאפשרים להוסיף נתוני משתמשים מסוג. הרכיבים האלה מוצעים בעיקר למשתמשים שיש להם נתוני מערכת מידע גיאוגרפי (GIS). אם הקלדת נתונים שנמצאים בשימוש על ידי אפליקציית מחשב חיצונית, כנראה שיהיה עליך להשתמש ברכיבים <Schema> ו-<SchemaData> כדי להוסיף סוגי נתונים מובנים לפיצ'ר. (Google Earth לא משתמש במידע המוקלד הזה, אבל ייתכן שכדי להשתמש בו נדרשת פעולה אחרת.) סביר להניח שמשתמשים רגילים לא יזדקקו להיבטים הטכניים יותר שהמנגנון הזה מציע. בדומה ל-<Data>, <SchemaData> עוזר להשתמש בתבניות של BaloonStyle.

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

הוספת זוגות של שם/ערך שלא הוקלדו

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

<ExtendedData>                       
<Data name="string">
  <displayName>...</displayName>    <!-- string -->
   <value>...</value>                <!-- string -->
</Data> </ExtendedData>

המאפיין name הוא מזהה ייחודי של קבוצת נתונים זו. הרכיב <displayName> משמש כדי להציג את שם הנתונים האלה בצורה ידידותית למשתמש. התג <displayName> יכול להכיל CDATA שכולל רווחים, כתובות אתרים והיפר-קישורים.

הנה דוגמה של סמן המכיל נתונים מותאמים אישית לגבי מספר חורים במסלול גולף:

<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
  <name>My Golf Course Example</name>
  <Placemark>
    <name>Club house</name>
    <ExtendedData>
      <Data name="holeNumber">
        <value>1</value>
      </Data>
      <Data name="holeYardage">
        <value>234</value>
      </Data>
      <Data name="holePar">
        <value>4</value>
      </Data>
    </ExtendedData>
    <Point>
      <coordinates>-111.956,33.5043</coordinates>
    </Point>
</Placemark> <Placemark> <name>By the lake</name> <ExtendedData> <Data name="holeNumber"> <value>5</value> </Data> <Data name="holeYardage"> <value>523</value> </Data> <Data name="holePar"> <value>5</value> </Data> </ExtendedData> <Point> <coordinates>-111.95,33.5024</coordinates> </Point>
</Placemark> </Document> </kml>

צילום המסך הזה מראה כיצד רכיבי <Data> מוצגים, כברירת מחדל, בטבלה בבלון של הסמן:

דוגמה לנתונים המשתמשים בסגנון ברירת המחדל של הבלון

סקירה: שימוש ברכיב בלון סגנון כתבנית

ב-KML אפשר להגדיר סגנון פעם ולהקצות לו מזהה. לאחר הגדרת הסגנון באופן זה, ניתן להפנות אליו מספר פעמים בתוך קובץ ה-KML (או בקובצי KML אחרים) באמצעות הרכיב <styleUrl>. סגנון המוגדר בדרך זו נקרא סגנון משותף. הרכיב <text> בתוך <BalloonStyle> תומך בהחלפת ישויות. ניתן להחליף ערכים בודדים בכל מופע של הישות. כאן תמצאו את הישויות הרגילות שאפשר להחליף:

$[name]
הוחלף בשם של הסמן
$[description]
הוחלף בתיאור של הסמן
$[כתובת]
הוחלף בכתובת של הסמן
$[id]
הוחלף במזהה של הסמן
[קטע טקסט]
הוחלף בקטע הטקסט של הסמן
$[gedirections]
הוחלפה מסלול הנסיעה 'אל/מ' של הסמן

החלפת אלמנטים ברכיבי נתונים מורחבים

כמו כן, Google Earth תומך בהחלפת ישויות של רכיבי נתונים מורחבים מסוימים בתוך הרכיב <text> של <BalloonStyle>. ניתן להפנות לישויות הבאות בתוך הרכיב <text>:

משתנה הוחלף ב דוגמה
$[name_attribute_of_Data_element] תוכן הרכיב <value> הספרה, מספר חורים
$[name_attribute_of_Data/displayName] תוכן הרכיב <displayName> מספר החור, מספנה

הנה דוגמה שיוצרת תבנית <BalloonStyle> לדוגמה למגרש הגולף. עבור כל בלון סמן, Google Earth מחליף את שם הסמן ולאחר מכן כותב מידע המכיל את מספר החור, פארי והחצר עבור כל חור בודד:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
  <name>Data+BalloonStyle</name>
  <Style id="golf-balloon-style">
    <BalloonStyle>
      <text>
        <![CDATA[
          This is $[name]
          This is hole $[holeNumber]
          The par for this hole is $[holePar]
          The yardage is $[holeYardage]
        ]]>
      </text>
    </BalloonStyle>
  </Style>
  <!-- Shared style sample
        Two Placemarks use the same balloon template
  -->
  <Placemark>
    <name>Club house</name>
    <styleUrl>#golf-balloon-style</styleUrl>
    <ExtendedData>
      <Data name="holeNumber">
        <value>1</value>
      </Data>
      <Data name="holeYardage">
        <value>234</value>
      </Data>
      <Data name="holePar">
        <value>4</value>
      </Data>
    </ExtendedData>
    <Point>
      <coordinates>-111.956,33.5043</coordinates>
    </Point>
  </Placemark>
  <Placemark>
    <name>By the lake</name>
    <styleUrl>#golf-balloon-style</styleUrl>
    <ExtendedData>
      <Data name="holeNumber">
        <value>5</value>
      </Data>
      <Data name="holeYardage">
        <value>523</value>
      </Data>
      <Data name="holePar">
        <value>5</value>
      </Data>
    </ExtendedData>
    <Point>
      <coordinates>-111.95,33.5024</coordinates>
    </Point>
  </Placemark>
</Document>
</kml>

הנה צילום מסך של דוגמה זו:

דוגמה לנתונים המשתמשים בסגנון ברירת המחדל של הבלון

הנה דוגמה מציאותית יותר לגבי השימוש ברכיב <displayName>. השיטה הזו מאפשרת להתאים את הטקסט לשוק המקומי ולעיצוב מפורט יותר.

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Entity-Replacement</name>
<Style id="displayName-value">
<BalloonStyle>
<text>
<![CDATA[
This is $[name]<br/>
$[holeNumber/displayName] $[holeNumber]<br/>
$[holePar/displayName] $[holePar]<br/>
$[holeYardage/displayName] $[holeYardage]
]]>
</text>
</BalloonStyle>
</Style>
<!-- Shared style sample
Two Placemarks use the same balloon template
-->
<Placemark>
<name>Club house</name>
<styleUrl>#displayName-value</styleUrl>
<ExtendedData>
<Data name="holeNumber">
<displayName><![CDATA[
<b>This is hole </b>
]]></displayName>
<value>1</value>
</Data>
<Data name="holePar">
<displayName><![CDATA[
<i>The par for this hole is </i>
]]></displayName>
<value>4</value>
</Data>
<Data name="holeYardage">
<displayName><![CDATA[
<b><i>The yardage is </i></b>
]]></displayName>
<value>234</value>
</Data>
</ExtendedData>
<Point>
<coordinates>-111.956,33.5043</coordinates>
</Point>
</Placemark>
<Placemark>
<name>By the lake</name>
<styleUrl>#Entity-Replacement</styleUrl>
<ExtendedData>
<Data name="holeNumber">
<displayName><![CDATA[
<b>This is hole </b>
]]></displayName>
<value>5</value>
</Data>
<Data name="holePar">
<displayName><![CDATA[
<i>The par for this hole is </i>
]]></displayName>
<value>5</value>
</Data>
<Data name="holeYardage">
<displayName><![CDATA[
<b><i>The yardage is </i></b>
]]></displayName>
<value>523</value>
</Data>
</ExtendedData>
<Point>
<coordinates>-111.95,33.5024</coordinates>
</Point>
</Placemark>
</Document>
</kml>

הנה דוגמה לבלון באמצעות תבנית סגנון בלון זו:

הוספת נתונים מוקלדים לפיצ'ר

הרכיבים <Schema> ו-<SchemaData> מאפשרים להוסיף לתכונת נתונים כלשהי תכונה. אפליקציות GIS ותכנות מסוימות מחייבות את התכונה הזו כי הן מטפלות בנתונים מוקלדים.

סקירה כללית של הוספת נתונים מוקלדים

כדי להוסיף סוג מותאם אישית לתכונת KML, מבצעים שתי משימות בסיסיות:

  1. יוצרים את הרכיב <Schema> שמצהיר על הסוג החדש.
  2. יוצרים מופעים מהסוג החדש באמצעות הרכיב <SchemaData>.

הצהרה על רכיב הסכימה

הרכיב Schema מצהיר על סוג מובנה. <Schema> הוא תמיד צאצא של <Document>. מסמך יכול להכיל אפס רכיבי רכיב או יותר Schema.

מאפיין המזהה

הרכיב <Schema> כולל תמיד מאפיין id. המזהה של השתקה משמש ליצירת מופעים מהסוג הזה (באמצעות <SchemaData>). המזהה הזה צריך להיות ייחודי בקובץ ה-KML.

מאפיין השם

המאפיין name, המשמש להחלפת ישויות, הוא אופציונלי.

תחביר

לרכיב הסכימה יש את התחביר הבא:

<Schema name="string" id="ID">   
  <SimpleField type="string" name="string">     
    <displayName>...</displayName>            <!-- string -->   
  </SimpleField> 
</Schema> 

ב-<SimpleField> יש תמיד גם מאפייני name וגם type. אם לא קיימים בו שני המאפיינים, המערכת תתעלם מהשדה. מאפיין השם משמש להחלפת ישויות ברכיב <text> של <BalloonStyle>. הסוג של Simplefield יכול להיות אחד מאלה:

  • string
  • int
  • uint
  • short
  • ushort
  • float
  • double
  • bool

הגדרת כל מופע של הנתונים

משתמשים ברכיב <SchemaData> כדי ליצור מכונה מהסוג שהוגדר על ידי המשתמש. התחביר של <SchemaData> הוא:

<ExtendedData>                   
  <SchemaData schemaUrl="anyURI">
    <SimpleData name=""> ... </SimpleData>       <!-- string -->
  </SchemaData>
</ExtendedData>

המאפיין schemaUrl מפנה אל ה-id של הסכימה שמצהירה על הסוג (בדיוק כאשר styleUrl מפנה אל ה-id של style שכבר הוכרז).אם schemaUrl הוא כתובת http, מערכת Google Earth מאחזרת את הקובץ הזה ברשת. יכול להיות רק מופע אחד של סוג נתון בהגדרת משתמש לכל סמן.

דוגמה

הדוגמה הבאה מצהירה על סוג משתמש שהוגדר ScenicVista. הסוג הזה מכיל שלושה שדות: TrailHeadName, TrailLength ו-ElevationGain. השדה TrailHeadName מכיל ערכים מסוג string. השדה TrilLength מכיל ערכים מסוג double. השדה ElevationGain מכיל ערכים מסוג int. הסמן שנקרא מסלול קל מכיל מכונה מהסוג הזה. במכונה הזו יש את הערך "Pi in the Sky" עבור השדה TrailHeadName, את הערך 3.14159 בשדה TrailLength ואת הערך 10 עבור השדה ElevationGain.

<kml xmlns="http://www.opengis.net/kml/2.2"> 
<Document>   
  <name>ExtendedData+SchemaData</name>   
  <open>1</open>

  <!-- Declare the type "TrailHeadType" with 3 fields -->
  <Schema name="TrailHeadType" id="TrailHeadTypeId">     
    <SimpleField type="string" name="TrailHeadName">       
      <displayName><![CDATA[<b>Trail Head Name</b>]]></displayName>     
    </SimpleField>     
    <SimpleField type="double" name="TrailLength">       
      <displayName><![CDATA[<i>Length in miles</i>]]></displayName>     
    </SimpleField>     
    <SimpleField type="int" name="ElevationGain">       
      <displayName><![CDATA[<i>Change in altitude</i>]]></displayName>     
    </SimpleField>   
  </Schema> 

<!-- This is analogous to adding three fields to a new element of type TrailHead:

  <TrailHeadType>        
    <TrailHeadName>...</TrailHeadName>        
    <TrailLength>...</TrailLength>        
    <ElevationGain>...</ElevationGain>    
 </TrailHeadType>
--> <!-- Instantiate some Placemarks extended with TrailHeadType fields --> <Placemark> <name>Easy trail</name> <ExtendedData> <SchemaData schemaUrl="#TrailHeadTypeId"> <SimpleData name="TrailHeadName">Pi in the sky</SimpleData> <SimpleData name="TrailLength">3.14159</SimpleData> <SimpleData name="ElevationGain">10</SimpleData> </SchemaData> </ExtendedData> <Point> <coordinates>-122.000,37.002</coordinates> </Point> </Placemark> <Placemark> <name>Difficult trail</name> <ExtendedData> <SchemaData schemaUrl="#TrailHeadTypeId"> <SimpleData name="TrailHeadName">Mount Everest</SimpleData> <SimpleData name="TrailLength">347.45</SimpleData> <SimpleData name="ElevationGain">10000</SimpleData> </SchemaData> </ExtendedData> <Point> <coordinates>-121.998,37.0078</coordinates> </Point> </Placemark> </Document> </kml>

דוגמה ל-SchemaData בסגנון של בלון

החלפת יישות ל-displayName

המנגנון של Schema/SchemaData תומך גם בהחלפת ישויות ברכיב <text> של הרכיב <BalloonStyle>.

הרכיב <displayName> של <Schema> מאפשר לספק גרסה מותאמת אישית לסוג נתונים מותאם אישית. שינוי המחרוזת פעם אחת ב-<Schema> ישפיע על שינוי ה-<displayName> בכל התכונות שמכילות את הסוג הזה.

ברכיב <text> של הרכיב <BalloonStyle>, משתמשים בתחביר הבא כדי להעניק זכאות ל-<displayName>:

$[TYPENAME/TYPEFIELD/displayName] 

איפה

סוג
הוא המאפיין name של <Schema>
שדה טקסט
הוא המאפיין name של <SimpleField>
שם_תצוגה
הוא הרכיב <displayName> בתוך <SimpleField>

הקוד הבא מוסיף תבניתכדור פורים לדוגמת SchemaData הקודמת. כמו בדוגמה של מסלול הגולף, התבנית נוצרת באמצעות הרכיבים <Style>, <BalloonStyle> ו-<text> בתחילת המסמך. כל סמן בקובץ מפנה לתבנית סגנון זו (שנקראת "ExtendedData+SchemaData").

<kml xmlns="http://www.opengis.net/kml/2.2"> 
<Document>   
  <name>ExtendedData+SchemaData</name>   
  <open>1</open>    
  <!-- Create a balloon template referring to the user-defined type -->
  <Style id="trailhead-balloon-template">     
    <BalloonStyle>       
      <text>
        <![CDATA[         
          <h2>My favorite trails!</h2>         
          <br/><br/>         
          The $[TrailHeadType/TrailHeadName/displayName] is <i>$[TrailHeadType/TrailHeadName]</i>.        
          The trail is $[TrailHeadType/TrailLength] miles.         <br/>        
          The climb is $[TrailHeadType/ElevationGain] meters.         <br/><br/>       
        ]]>
      </text>     
    </BalloonStyle>
  </Style>     

  <!-- Declare the type "TrailHeadType" with 3 fields -->
  <Schema name="TrailHeadType" id="TrailHeadTypeId">     
    <SimpleField type="string" name="TrailHeadName">       
      <displayName><![CDATA[<b>Trail Head Name</b>]]></displayName>     
    </SimpleField>     
    <SimpleField type="double" name="TrailLength">       
      <displayName><![CDATA[<i>The length in miles</i>]]></displayName>     
    </SimpleField>     
    <SimpleField type="int" name="ElevationGain">       
      <displayName><![CDATA[<i>change in altitude</i>]]></displayName>     
    </SimpleField>   
  </Schema>       

  <!-- Instantiate some Placemarks extended with TrailHeadType fields -->    
  <Placemark>     
    <name>Easy trail</name>     
    <styleUrl>#trailhead-balloon-template</styleUrl>     
    <ExtendedData>       
      <SchemaData schemaUrl="#TrailHeadTypeId">        
        <SimpleData name="TrailHeadName">Pi in the sky</SimpleData>         
        <SimpleData name="TrailLength">3.14159</SimpleData>         
        <SimpleData name="ElevationGain">10</SimpleData>       
      </SchemaData>     
    </ExtendedData>     
    <Point>       
      <coordinates>-122.000,37.002</coordinates>     
    </Point>   
  </Placemark>    
  <Placemark>     
    <name>Difficult trail</name>     
    <styleUrl>#trailhead-balloon-template</styleUrl>     
    <ExtendedData>
      <SchemaData schemaUrl="#TrailHeadTypeId">         
        <SimpleData name="TrailHeadName">Mount Everest</SimpleData>        
        <SimpleData name="TrailLength">347.45</SimpleData>         
        <SimpleData name="ElevationGain">10000</SimpleData>       
      </SchemaData>    
    </ExtendedData>    
    <Point>       
      <coordinates>-121.998,37.0078</coordinates>     
    </Point>   
  </Placemark>   
</Document> 
</kml>

דוגמה ל-SchemaData באמצעות תבנית של בלון-סגנון

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

הוספת נתוני XML שרירותיים לפיצ'ר

הדרך הפשוטה ביותר להוסיף נתוני משתמשים לפיצ'ר היא להוסיף את הנתונים ישירות בתור ערך של <ExtendedData>. מערכת Google Earth שומרת את הנתונים האלה אך לא מעבדת אותם.

רכיבי נתונים מותאמים אישית שמוסיפים בדרך זו צריכים לכלול קידומת מרחב (xmlns:prefix="namespace"). ניתן להוסיף קידומת זו לרכיב <KML> או לאלמנט <ExtendedData>. התחילית של מרחב השמות החיצוני חייבת לעמוד בכל מופע של נתוני משתמש, כפי שמוצג בדוגמה הבאה:

<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
  <name>ExtendedData Test</name>
  <Placemark>
    <name>CampsiteData</name>
    <!-- Imported schema requires use of namespace prefix -->
    <ExtendedData xmlns:camp="http://campsites.com">
      <camp:number>14</camp:number>
      <camp:parkingSpaces>2</camp:parkingSpaces>
      <camp:tentSites>4</camp:tentSites>
    </ExtendedData>
    <Point>
      <coordinates>-114.041,53.7199</coordinates>
    </Point>
  </Placemark>
</Document>
</kml>

חזרה למעלה