อัปเดตเมื่อเดือนกุมภาพันธ์ 2009: เพิ่มการพูดถึง <gx:a ในส่วนMode>, <gx:TimeStamp> และ <gx:TimeSpan>
เมื่อใช้กับ KML 2.2 <Camera> จะมีวิธีการเพิ่มเติมในการระบุมุมมองของผู้สังเกตและพารามิเตอร์มุมมองที่เกี่ยวข้อง <Camera> คล้ายกับ <LookAt> เนื่องจากทั้ง 2 องค์ประกอบจะกําหนดตําแหน่งและการวางแนวของกล้องเสมือนซึ่งกําลังดูโลก ความแตกต่างคือ LookAt จะระบุมุมมองในแง่ของจุดสนใจที่กําลังดูอยู่ ในทางตรงกันข้าม กล้องจะระบุมุมมองในแง่ของตําแหน่งและการวางแนวของผู้ชม
ทั้ง <LookAt> และ <Camera> จะขยายจากองค์ประกอบ <AbstractView> ซึ่งเป็นประเภทนามธรรมฐาน <Camera> และ <LookAt> เหมือนกับวิธีใช้ในไฟล์ KML กล่าวคือ เป็นองค์ประกอบย่อยที่ได้มาจาก <Feature> (หมุด, การวางซ้อนหน้าจอ, GroundOverlay, PhotoOverlay, Folder, เอกสาร, NetworkLink) หรือเป็นองค์ประกอบย่อยของ <NetworkLinkControl> คุณจะใช้ <Camera> หรือ <LookAt> ภายในฟีเจอร์ก็ได้ แต่จะใช้ทั้ง 2 อย่างพร้อมกันไม่ได้ (กล่าวคือ มีกล้องเสมือนจริงเพียง 1 ตัวเท่านั้นที่จะระบุมุมมองปัจจุบันได้)
ความแตกต่างระหว่าง <Camera> และ <LookAt>
องค์ประกอบ <Camera> ใหม่ให้ความยืดหยุ่นมากขึ้นในการระบุมุมมอง สิ่งสําคัญที่สุดคือ คุณสามารถเอียงมุมมองกล้องเพื่อให้คุณมองออกไปเหนือเส้นขอบฟ้า <Camera> มอบการควบคุมแบบอิสระเต็ม 6 องศาในมุมมอง เราจึงวางตําแหน่งกล้องในอวกาศแล้วหมุนรอบแกน 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> ระบุคําตอบของคําถามต่อไปนี้
Question |
ข้อกําหนดใน <LookAt> |
| ฉันกําลังดูอะไรอยู่ | <lลองจิจูด> <ละติจูด> <aระดับความสูง> <aระดับความสูงMode> |
| จุดชมวิวอยู่ไกลแค่ไหนจากจุดสนใจ | <ช่วง> |
| มุมมองเป็นไปตามทิศทางหรือไม่ โดยให้ทิศเหนืออยู่บนจุดชมวิว | หากใช่ ให้ใช้ค่า <heading> เริ่มต้นเป็น 0 หากไม่ใช่ ให้ระบุการหมุนเวียน <heading> จาก >0 ถึง 360° |
| มุมมองมองตรงลงสู่โลกใช่ไหม | หากใช่ ให้ใช้ค่าเริ่มต้น<tilt> หากไม่มี ให้กล้องเอียงขึ้นไปยังขอบฟ้า ระบุการหมุน <tilt> ≤ 90° 90° มองไปทางขอบฟ้าโดยตรง (คุณอาจไม่เห็นพื้นผิวโลกเลยหากอยู่ไกลและ <tilt> เท่ากับ 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> ระบุคําตอบของคําถามต่อไปนี้
Question |
ข้อกําหนดใน <Camera> |
| กล้องอยู่ในตําแหน่งใด | จัดตําแหน่งกล้องให้พอดีที่จุดที่ระบุโดย <longitude>, <ละติจูด>, <a ในส่วน> และ <a ในส่วนโหมด> โดยทั่วไปแล้ว เป็นตัวเลือกที่ไม่แย่นักในการวางกล้องบนพื้น |
| กล้องใช้กล้องเพื่อให้ทิศเหนืออยู่บนมุมมองหรือไม่ | หากใช่ ให้ใช้ค่า <heading> เริ่มต้นเป็น 0 หากไม่ใช่ ให้หมุนกล้องจาก >0 ถึง 360° ตามจุดของเข็มทิศ |
| กล้องมองตรงมาที่โลกใช่ไหม | หากใช่ ให้ใช้ค่า <tilt> เริ่มต้นเป็น 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> ภายใน AbstractViews และอยู่ในเนมสเปซของ 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 (7: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> ลําดับของการเปลี่ยนรูปแบบมีดังนี้
- <a ในส่วน> - แปลตามแกน Z เป็น <aระดับความสูง>
- <heading> - หมุนรอบแกน Z
- <tilt> - หมุนรอบแกน X
- <roll> - หมุนรอบแกน Z (อีกครั้ง)
โปรดทราบว่าทุกครั้งที่มีการหมุน แกนกล้อง 2 แกนจะเปลี่ยนการวางแนว