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> 中的規格 |
我查看的是什麼? | <經度>、<緯度>、<高度>、<高度模式> |
搜尋點與搜尋點之間的距離有多遠? | <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 地球」顯示的地標如下:
如果您的檢視方向與地球相交,請使用 <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° 之間的值,但使用時很少見。 |
下圖顯示連接至虛擬相機的 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 地球中的顯示方式:
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>
。轉換順序如下:
- <Elevation> - 沿著 Z 軸平移至 <海拔高度>
- <heading> - 沿著 Z 軸旋轉。
- <tilt> - 沿著 X 軸旋轉。
- <roll> - 再次旋轉 Z 軸。
請注意,每次套用旋轉方向時,兩個相機軸的方向都會改變方向。