カメラ

2009 年 2 月更新: <gx:altitudeMode>、<gx:TimeStamp>、および <gx:TimeSpan> に関する記述を追加

KML 2.2 で <Camera> が導入されたことで、ユーザーの視点とその表示パラメータをまったく新しい方法で指定できるようになりました。<Camera><LookAt> は、どちらも Earth を表示する仮想カメラの位置と方向を定義する要素です。違いは、LookAt では表示する地点を基準にしてビューを指定するのに対し、Camera ではユーザーの視点の位置と方向を基準にしてビューを指定する点です。

<LookAt> および <Camera> は、基本抽象型である <AbstractView> 要素の拡張です。<Camera><LookAt> も、KML ファイル内での使用方法はまったく同じで、<Feature> から派生した要素(Placemark、ScreenOverlay、GroundOverlay、PhotoOverlay、Folder、Document、NetworkLink)の子要素、または <NetworkLinkControl> の子要素として使用します。Feature 内では、<Camera> または <LookAt> のどちらか一方を使用できます。同時に両方を使用することはできません(つまり、現在の視点を指定できるのは 1 つの仮想カメラだけです)。

<Camera><LookAt> の違い

新たに <Camera> 要素が追加されたことで、ビューをより柔軟に指定できるようになりました。最も重要なのは、カメラのビューを傾けることができる点です。つまり、地平線上から空を見上げることも可能です。<Camera> では、ビューを 6 つの自由度で完全にコントロールできるため、カメラを空中に配置してから x 軸、y 軸、z 軸を中心に回転させることができます。次の例のように回転が指定されていない場合は、2 つの要素の効果は同じです:

<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> の視点がどのように構成されるかを示します。

質問
<LookAt> での指定方法
どの地点を見ていますか? <longitude>、<latitude>、<altitude>、<altitudeMode>
視点からその地点までどのくらい離れていますか? <range>
ビューの上方向が北になるように表示しますか? 上方向を北にする場合は、<heading> をデフォルト値 0 のままにします。それ以外の場合は、<heading> に 0 より大きい値(最大 360 度)を指定します。
その視点から Earth をまっすぐ見下ろしますか? まっすぐ見下ろす場合は、デフォルトの <tilt> 値を使用します。それ以外の場合は、垂直方向から地平線に向かって視線を上げる角度を <tilt> に指定します(最大 90 度)。
90 度にすると、地平線の方向にまっすぐ向いたビューになります(視点を遠く離した状態で <tilt> を 90 度に設定すると、Earth の表面がまったく見えなくなることがあります)。

次の例では、<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> 要素には、以下の質問に対する答えを指定します:

質問
<Camera> での指定方法
カメラを空中のどこに配置しますか? カメラの位置は、<longitude>、<latitude>、<altitude>、<altitudeMode> で指定します。一般的に、カメラを地面に置くことは好ましくありません。
カメラの方位は、ビューの上方向が北になるようにしますか? 上方向を北にする場合は、<heading> をデフォルト値 0 のままにします。それ以外の場合は、コンパスの方位に従って 0 より大きい値(最大 360 度)を指定し、カメラを回転させます。
カメラから Earth をまっすぐ見下ろしますか? まっすぐ見下ろす場合は、<tilt> をデフォルト値 0 のままにします。それ以外の場合は、カメラを X 軸に沿って回転させる角度として、0 より大きい値(最大 180 度)を指定します(<tilt> には負の値を指定できますが、ビューの表示が逆さまになります)。
カメラを水平に配置しますか? 水平にする場合は、<roll> をデフォルト値 0 のままにします。注: 通常、<Camera> の子要素として <roll> を使用する場合の値は 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 では次のように表示されます:

AbstractViews 内の時間情報

<Camera> および <LookAt> には時間情報を含めることができます。この時間情報は、歴史イメージや太陽光をはじめ、時間が関連付けられているすべてのオブジェクトの表示に影響します。AbstractView 内に指定した <gx:TimeSpan><gx:TimeStamp> は、Google 拡張名前空間に格納されます。詳細については、「時間とアニメーション」の AbstractViews での時間の指定をご覧ください。

以下に、<Camera> の回転の設定例をいくつか示します。

機首方位(heading)

この例では、<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 では次のように表示されます:

前後の傾き(tilt)

次の例では、<Camera> の前後の傾きを 90 度に設定し、カメラを地平線の方向にまっすぐに向けています。この例は、<heading><altitude><altitudeMode><roll> をすべてデフォルト値のままにした設定です。

<Camera> には、<gx:TimeStamp> 値を含めることができます。この時間情報は、歴史イメージや太陽光をはじめ、時間が関連付けられているすべてのオブジェクトの表示に影響します。次の例では、太陽光をオフにし、<Camera> に 2009 年 1 月 1 日の UTC 3:29pm(現地時間 7:30am)を設定しています。

<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)

この例では、<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 軸に沿って Earth をまっすぐ見下した状態で配置されます。回転する前に、カメラは Z 軸に沿って <altitude> まで移動します。転換の順序は次のとおりです:

  1. <altitude> - <altitude> まで Z 軸に沿って移動します。
  2. <heading> - Z 軸を中心にして回転します。
  3. <tilt> - X 軸を中心にして回転します。
  4. <roll> - 再び Z 軸を中心にして回転します。

回転が適用されるたびに、2 つのカメラ軸の向きが変わりますので注意してください。

トップへ戻る