עודכן בפברואר 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 (שוב).
חשוב לזכור שבכל פעם שמחילים סיבוב, שני מהצירים של המצלמה משנים את הכיוון שלהם.