อัปเดตเมื่อเดือนกุมภาพันธ์ 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 แกนจะเปลี่ยนการวางแนว