עודכן בפברואר 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>:
הרכיב <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:
אם כיוון התצוגה חוצה את כדור הארץ, יש להשתמש ברכיב <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>. סדר הטרנספורמציות הוא:
- <height> - תרגם לאורך ציר ה-Z עד <height>
- <header> - סובב סביב הציר Z.
- <tilt> - סובב סביב הציר X.
- <roll> - סובב סביב הציר Z (שוב).
חשוב לזכור שבכל פעם שמחילים סיבוב, שני מהצירים של המצלמה משנים את הכיוון שלהם.