相機

2009 年 2 月更新:新增提及 <gx: heightMode>、<gx:TimeStamp> 和 <gx:TimeSpan>。

<Camera> 搭配 KML 2.2 時,您可以透過另一種方式指定觀察者的觀察點和相關檢視參數。<Camera><LookAt> 類似,因為這兩個元素都會定義檢視地球的虛擬相機位置和方向。差別在於 LookAt 會根據使用者搜尋點,指定觀看的檢視畫面。相較之下,攝影機則會根據觀眾的位置和螢幕方向指定檢視畫面。

<LookAt><Camera> 都是從基本抽象類型的 <AbstractView> 元素延伸而來。在 KML 檔案中,<Camera><LookAt> 的用法相同,也就是從 <Feature> 中產生的任何元素 (地標、螢幕疊加層、區域疊加層、PhotoOverlay、資料夾、文件、NetworkLink) 或為 <NetworkLinkControl> 的子項。您可以在功能中使用 <Camera><LookAt>,但不能同時使用兩者 (也就是說,只有一個虛擬相機可以指定目前的視角)。

<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> 元素可指定正在檢視的地球點、檢視點與搜尋點之間的距離,以及視角。這個元素的語法如下:

<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> 元素可指定下列問題的答案:

問題
<LookAt> 中的規格
我查看的是什麼? <經度>、<緯度>、<高度>、<高度模式>
搜尋點與搜尋點之間的距離有多遠? <range>
檢視區塊的設計是否會讓北方的檢視畫面位於檢視畫面頂端? 如果是的話,請使用預設的 <heading> 值 0。如果否,請指定從 >0 到 360° 的 <heading> 旋轉
地球是向下看地球嗎? 如果是的話,請使用 default<tilt> 值。如果不是,則攝影機會朝向地平線傾斜;請指定 <傾斜> 旋轉角度 ≤ 90°。
90° 朝向水平的方向看似。(如果距離您遠處且 <tilt> 等於 90°,則可能無法看到地球表面)。

範例

以下是含有 <LookAt> 元素的 <Placemark> 範例:

<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 地球」顯示的地標如下:

「Google 地球」中馬丘比丘地標的螢幕截圖

如果您的檢視方向與地球相交,請使用 <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> 中的規格
攝影機位於空間中的位置? 將相機定位在 <經度>、<緯度>、<海拔高度> 和 <海拔高度模式> 的位置。一般來說,最好將攝影機放在地面上。
攝影機的方向是否朝北,在檢視畫面頂端? 如果是的話,請使用預設的 <heading> 值 0。如果不是,請依據指南針的點旋轉相機 >0 到 360°。
攝影機直視地球,看起來像直線嗎? 如果是的話,請使用預設的 <tilt> 值 0。如果不是,請將相機從 0 旋轉到 180°,指定 X 軸旋轉角度。(可使用 <tilt> 的負值,但會使上下顛倒的檢視畫面)。
從場景的角度來看,相機等級是否正常? 如果是的話,請使用預設的 <roll> 值 0。注意:將 <roll> 當做 <Camera> 的子項使用時,其值通常是 0。您可以指定介於 -180 和 +180° 之間的值,但使用時很少見。

下圖顯示連接至虛擬相機的 XYZ 軸。

  • 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 地球中的顯示方式:

AbstractViews 中的時間

<Camera><LookAt> 都可以包含時間資訊,這會影響歷史圖像、日照和任何有時間標記的物件。<gx:TimeSpan><gx:TimeStamp> 會用於 AbstractViews,且包含在 Google 擴充功能命名空間內。如需詳細資訊,請參閱時間和動畫章節的含有時間摘要一節。

範例

以下範例說明不同的 <Camera> 旋轉。

標題

此範例顯示標題為 90 度 (東) 且傾斜為 90 度 (朝向水平線) 的 <Camera>。將相機放置在 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 地球」的結果:

傾斜

以下範例使用傾斜度等於 90 度的 <Camera>,其朝向地平線。它使用 <heading><altitude><altitudeMode><roll> 的預設值。

<Camera> 確實包含 <gx:TimeStamp> 值,這會影響歷史圖像和陽光,以及任何標記時間的物件。在下圖中,陽光打開,<Camera> 會在世界標準時間 2009 年 1 月 1 日下午 3 點 29 分 (當地時間) 檢視位置。

<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 地球中的顯示方式:

向左/向右旋轉

這個範例包含值為 45 度的 <roll> 元素,讓相機向左旋轉。

<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. <Elevation> - 沿著 Z 軸平移至 <海拔高度>
  2. <heading> - 沿著 Z 軸旋轉。
  3. <tilt> - 沿著 X 軸旋轉。
  4. <roll> - 再次旋轉 Z 軸。

請注意,每次套用旋轉方向時,兩個相機軸的方向都會改變方向。

返回頁首