กล้อง

อัปเดตเมื่อเดือนกุมภาพันธ์ 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

องค์ประกอบ <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

ภาพหน้าจอมาชูปิกชูหมุดใน 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> ลําดับของการเปลี่ยนรูปแบบมีดังนี้

  1. <a ในส่วน> - แปลตามแกน Z เป็น <aระดับความสูง>
  2. <heading> - หมุนรอบแกน Z
  3. <tilt> - หมุนรอบแกน X
  4. <roll> - หมุนรอบแกน Z (อีกครั้ง)

โปรดทราบว่าทุกครั้งที่มีการหมุน แกนกล้อง 2 แกนจะเปลี่ยนการวางแนว

กลับไปด้านบน