מצלמות

עודכן בפברואר 2009: נוסף אזכור של <gx:heightMode> , <gx:TimeStamp> , ו-<gx:TimeSpan>.

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

גם <LookAt> וגם <Camera> מורחבות מהרכיב <AbstractView>, שהוא סוג מופשט של בסיס. <Camera> ו-<LookAt> זהים מבחינת השימוש שלהם בקובץ KML – כלומר צאצאים של כל רכיב שנגזר מ-<Feature> (Placemark, ScreenLayer, GroundLayer, Photo שכבת-על, תיקייה, מסמך, NetworkLink) או כצאצא של <NetworkLinkControl>. אפשר להשתמש ב-<Camera> או ב-<LookAt> בתוך פיצ'ר, אבל לא בשניהם בו-זמנית (כלומר, רק מצלמה וירטואלית אחת יכולה לציין את נקודת המבט הנוכחית).

הבדלים בין <Camera> לבין <LookAt>

הרכיב החדש <Camera> מספק גמישות נוספת בהגדרת התצוגה. והכי חשוב, תוכלו להטות את תצוגת המצלמה כך שתביטו מעל האופק לשמיים. באמצעות <Camera> אפשר לשלוט בחופש בשש מעלות של חופש, כדי למקם את המצלמה בחלל ולאחר מכן לסובב אותה על ציר ה-X, ציר ה-Y וציר ה-Z. אם לא צוינו סבבים, שני הרכיבים מקבילים:

<Camera>       
  <longitude>-121</longitude>       
  <latitude>37</latitude>       
  <altitude>2000</altitude>
  <altitudeMode>clampToGround</altitudeMode>     
</Camera> 
<LookAt>
  <longitude>-121</longitude>
  <latitude>37</latitude>
  <altitude>2000</altitude>
  <altitudeMode>clampToGround</altitudeMode>
</LookAt>

בקטע הבא מוצגת סקירה קצרה של הרכיב <LookAt> כדי שניתן יהיה להשוות את השימוש בו באלמנט החדש <Camera>.

ביקורת על <LookAt>

הרכיב <LookAt> מציין את הנקודה ב-Earth שמוצגת כרגע, את המרחק של נקודת המבט מנקודת העניין ואת זווית התצוגה. זהו התחביר של הרכיב הזה:

<LookAt id="ID">
  <longitude></longitude>                       <!-- kml:angle180 -->   
  <latitude></latitude>                         <!-- kml:angle90 -->   
  <altitude>0</altitude>                        <!-- double -->    
  <range></range>                               <!-- double -->   
  <tilt>0</tilt>                                <!-- float -->   
  <heading>0</heading>                          <!-- float -->   
  <altitudeMode>clampToGround</altitudeMode>    
           <!--kml:altitudeModeEnum:clampToGround, relativeToGround, absolute --> 
           <!-- or, gx:altitudeMode can be substituted: clampToSeaFloor, relativeToSeaFloor -->
</LookAt>

התרשים הבא ממחיש את אופן הבנייה של נקודת המבט של <LookAt>:

תרשים שמציג פרמטרים לרכיב LookLook

הרכיב <LookAt> מציין תשובות לשאלות הבאות:

שאלה
מפרט ב<LookAt>
באיזו נקודה אני מתבונן? <קו רוחב>, <קו רוחב>,<גובה>, <heightMode>
מה המרחק של נקודת המבט מנקודת העניין? <range>
האם התצוגה ממוקדת כך שצפון ימוקם בראש התצוגה? אם כן, יש להשתמש בערך 0 כברירת מחדל. אם לא, צריך לציין סיבוב <headline> מ- >0 עד 360°
האם התמונה נראית ישירות ב-Earth? אם כן, יש להשתמש בערך ברירת המחדל <tilt>. אם לא, המצלמה נוטה כלפי מעלה לכיוון האופק. יש לציין סיבוב של <tilt> ≤ 90°.
90° מביט ישירות לאורך האופק. (אם אינך רחוק, ושטח התצוגה של כדור הארץ רחוק מ-90°, ייתכן שלא תראה את פני כדור הארץ כלל.)

דוגמה

לפניכם דוגמה ל-<Placemark> שמכילה רכיב <LookAt>:

<Placemark>
<name>Machu Picchu, Peru</name>
<LookAt>
<longitude>-72.503364</longitude>
<latitude>-13.209676</latitude>
<altitude>0</altitude>
<range>14794.882995</range>
<tilt>66.768762</tilt>
<heading>71.131493</heading>
</LookAt>
<styleUrl>#msn_icon12</styleUrl>
<Point>
<coordinates>-72.516244,-13.162806,0</coordinates>
</Point>
</Placemark>

וזהו הסמן המוצג ב-Google Earth:

צילום מסך של סמן מאצ&#39;ו פיצ&#39;ו ב-Google Earth

אם כיוון התצוגה חוצה את כדור הארץ, יש להשתמש ברכיב <LookAt> כי קל יותר לציין אותו מאשר <Camera>.

רכיבי צאצא של <Camera>

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

<Camera id="ID">    
  <longitude>0</longitude>          <!-- kml:angle180 -->     
  <latitude>0</latitude>            <!-- kml:angle90 -->    
  <altitude>0</altitude>            <!-- double -->    
  <heading>0</heading>              <!-- kml:angle360 -->    
  <tilt>0</tilt>                    <!-- kml:anglepos180 -->    
  <roll>0</roll>                    <!-- kml:angle180 -->    
  <altitudeMode>clampToGround</altitudeMode>
       <!-- kml:altitudeModeEnum: relativeToGround, clampToGround, or absolute -->  
       <!-- or, gx:altitudeMode can be substituted: clampToSeaFloor, relativeToSeaFloor -->
</Camera> 

הרכיב <Camera> מציין תשובות לשאלות הבאות:

שאלה
מפרט ב<Camera>
איפה המצלמה נמצאת במרחב? מקם את המצלמה בנקודה המצוינת לפי <length>, <width>, <height>, ו-<heightMode>. באופן כללי, לא כדאי לבחור להציב את המצלמה על הקרקע.
האם המצלמה מוכוונת כך שהצפון נמצא בחלק העליון של התצוגה? אם כן, יש להשתמש בערך 0 כברירת מחדל. אם לא, מסובבים את המצלמה מ-0 ל-360 מעלות, בהתאם לנקודות של המצפן.
האם המצלמה מסתכלת ישירות על כדור הארץ? אם כן, יש להשתמש בערך 0 כברירת מחדל. אם לא, מסובבים את המצלמה מ-0 ל-180 מעלות כדי לציין את זווית הסיבוב סביב ציר ה-X. (ערכים שליליים עבור <tilt> מותרים, אבל הערכים האלה מובילים לתצוגה הפוכה).
האם רמת המצלמה בעת הצפייה בסצנה? אם כן, יש להשתמש בערך ברירת המחדל <roll> של 0. הערה: הערך של <roll> כשמשתמשים בו כצאצא של <Camera> הוא בדרך כלל 0. ניתן לציין ערך בין 180- ל-180°, אך השימוש בו הוא נדיר.

בתרשים הבא מוצגים הצירים X , Y ו-Z, המחוברים למצלמה הווירטואלית.

  • ציר ה-X מפנה לכיוון ימין של המצלמה ונקרא וקטור ימני.
  • ציר Y מגדיר את הכיוון "למעלה" ביחס למסך ונקרא וקטור למעלה.
  • ציר Z פונה ממרכז המסך לכיוון נקודת העין. המצלמה מסתכלת למטה בציר -Z, שנקרא וקטור התצוגה.

הנה דוגמה להגדרת <Camera> כנקודת המבט הראשונית בתוך <Document>:

<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Golden Gate tour</name>
<open>1</open>
<Camera>
<longitude>-122.4790</longitude>
<latitude>37.8110</latitude>
<altitude>127</altitude>
<heading>18.0</heading>
<tilt>85</tilt>
<altitudeMode>absolute</altitudeMode>
</Camera> </Document> </kml>

כך נראית נקודת המבט הזו ב-Google Earth:

זמן בתצוגה אבסטרקטית

גם <Camera> וגם <LookAt> יכולות להכיל מידע על הזמן, שמשפיע על התמונות ההיסטוריות, על אור השמש ועל אובייקטים שתויגו לפי זמן. <gx:TimeSpan> ו-<gx:TimeStamp> נמצאים בשימוש ב-AbsstrViews ונכללים במרחב השמות של תוסף Google. למידע נוסף, עיינו בקטע זמן עם AbstractViews בפרק זמן ואנימציה.

דוגמאות

הדוגמאות הבאות ממחישות סבבים שונים של <Camera>.

כותרת

בדוגמה הזו מוצג <Camera> עם כותרת של 90 מעלות (מזרח) והטיה של 90 מעלות (מבט לאופק). המצלמה מוצבת בגובה של 100 מטרים.

<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
  <Placemark>
<name>100m looking east</name>
<Camera>
<longitude>-122.4783</longitude>
<latitude>37.8120</latitude>
<altitude>100</altitude>
<heading>90</heading>
<!-- east -->
<tilt>90</tilt>
<!-- level -->
<altitudeMode>absolute</altitudeMode>
</Camera>
</Placemark> </Document> </kml>

זו התוצאה ב-Google Earth:

הטיה

הדוגמה הבאה משתמשת ב-<Camera> עם הטיה של 90 מעלות, שמביטה לכיוון האופק. הוא משתמש בערכי ברירת מחדל עבור <heading>, <altitude>, <altitudeMode> וגם <roll>.

השדה <Camera> מכיל ערך <gx:TimeStamp>. הוא משפיע על תמונות היסטוריות ואור שמש, וגם על תצוגה של אובייקטים עם תיוג זמן. בתמונה הבאה, אור השמש הופעל ו<Camera> מציגה את המיקום בשעה 15:29, UTC ב-1 בינואר 2009 (07:30, זמן מקומי).

<kml xmlns="http://www.opengis.net/kml/2.2"
 xmlns:gx="http://www.google.com/kml/ext/2.2">
  <Document>
    <Placemark>
      <name>At ground level</name>
      <Camera>
        <gx:TimeStamp><
          when>2009-01-01T15:29:27Z</when>
        </gx:TimeStamp>
        <longitude>-122.4783</longitude>
        <latitude>37.8120</latitude> 
        <!-- altitude default is 0 (default altitudeMode is clampToGround) -->   
        <!-- heading default is 0 (north) -->    
        <tilt>90</tilt>   
        <!-- level -->   
        <!-- roll default is 0 -->    
        <!-- altitudeMode default is clampToGround -->  
      </Camera>
    </Placemark>
  </Document>
</kml>

כך נראית נקודת המבט הזו ב-Google Earth:

גליל

דוגמה זו כוללת רכיב <roll> עם ערך של 45 מעלות, שגורם למצלמה לפעול שמאלה.

<kml xmlns="http://www.opengis.net/kml/2.2"
 xmlns:gx="http://www.google.com/kml/ext/2.2">
  <Document>
    <Placemark>
      <name>Roll left</name>
      <Camera>
        <gx:TimeStamp><
          when>2009-01-01T15:29:27Z</when>
        </gx:TimeStamp>
        <longitude>-122.4783</longitude>
        <latitude>37.8120</latitude>
        <altitude>100</altitude>
        <heading>90</heading>
        <!-- east -->
        <tilt>90</tilt>
        <!-- level -->
        <roll>45</roll>
        <altitudeMode>absolute</altitudeMode>
      </Camera>
    </Placemark>
  </Document>
</kml>

סדר הטרנספורמציות

סדר הסיבוב חשוב. כברירת מחדל, המצלמה מסתכלת ישר למטה, על ציר ה-Z לכיוון כדור הארץ. לפני ביצוע סיבובים, המצלמה מתורגמת לאורך ציר Z ל-<altitude>. סדר הטרנספורמציות הוא:

  1. <height> - תרגם לאורך ציר ה-Z עד <height>
  2. <header> - סובב סביב הציר Z.
  3. <tilt> - סובב סביב הציר X.
  4. <roll> - סובב סביב הציר Z (שוב).

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

חזרה למעלה