KML のツアー機能

目次

はじめに

Google Earth 5.0 では、ツアー機能が新しく拡張され、地理空間データに基づいた飛行を次のように操作できるようになりました。

  • 2 地点間を特定の時間で飛行する
  • 複数の地点を停止なしでスムーズに飛行する
  • ツアー中の特定の時間にサウンド ファイルを再生する
  • ツアーの境界内の KML 要素を一時的に更新する

Google Earth クライアントから操作するツアー機能の詳細については、Google Earth のユーザー ガイドをご覧ください。

Google の拡張名前空間

ツアーを定義する KML 要素は、OGC KML 標準の拡張セット内に接頭辞 gx が付いて格納されます。この要素を使用するには、KML ファイルの開始要素 <kml> に正しい名前空間 URI を記述する必要があります。

<kml xmlns="http://www.opengis.net/kml/2.2"
 xmlns:gx="http://www.google.com/kml/ext/2.2">

gx 拡張セットに含まれるツアー関連の要素には、次のようなものがあります。

<gx:Tour> <gx:playMode>
<gx:Playlist> <gx:Wait>
<gx:Flyto> <gx:AnimatedUpdate>
<gx:flyToMode> <gx:SoundCue>
<gx:TourControl> <gx:duration>

ツアーの機能は Google Earth 5.0 でサポートされますが、他の地理情報ブラウザではサポートされていない場合があります。ご使用のブラウザで特定の拡張がサポートされていない場合、通常、これらの拡張のデータは暗黙的に無視され、KML ファイルの残りの部分はエラーなしで読み込まれます。

用語

ツアー プリミティブ: 要素セットの 1 つで、ツアー内の操作を定義します。たとえば、ツアー プリミティブ FlyTo は、<gx:FlyTo> 要素とその子要素で定義します。

再生リスト: ツアーを定義するツアー プリミティブのリストを格納するコンテナです。再生リストは、タイムラインに沿って視覚化できます(詳しくは、ツアーのタイムラインをご覧ください)。

ツアーの構造

ツアーを作成する場合は、特定の要素を KML ファイル内に順番に配置します。KML ファイルには、ツアーとともに有効な KML 要素を含めることができます。

次の例では、完結したツアーと、複数の目印を含む Folder が記述されています。このツアーは、ニュージーランドのサウス アイランドを出発し、タラナキ山の上空を通過してノース アイランドまで飛行します。flyToMode として smoothbounce の両方を使用しており、<gx:balloonVisibility> で説明バルーンを表示しています。ツアー要素については、下で詳しく説明します。

 complete_tour_example.kml

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
 xmlns:gx="http://www.google.com/kml/ext/2.2">

<Document>
  <name>ツアーと一部の機能</name>
  <open>1</open>

  <gx:Tour>
    <name>再生してください</name>
    <gx:Playlist>

      <gx:FlyTo>
        <gx:duration>5.0</gx:duration>
        <!-- bounce はデフォルトの flyToMode です -->
        <Camera>
          <longitude>170.157</longitude>
          <latitude>-43.671</latitude>
          <altitude>9700</altitude>
          <heading>-6.333</heading>
          <tilt>33.5</tilt>
        </Camera>
      </gx:FlyTo>

      <gx:Wait>
         <gx:duration>1.0</gx:duration>
      </gx:Wait>

      <gx:FlyTo>
        <gx:duration>6.0</gx:duration>
        <Camera>
          <longitude>174.063</longitude>
          <latitude>-39.663</latitude>
          <altitude>18275</altitude>
          <heading>-4.921</heading>
          <tilt>65</tilt>
          <altitudeMode>absolute</altitudeMode>
        </Camera>
      </gx:FlyTo>

      <gx:FlyTo>
        <gx:duration>3.0</gx:duration>
        <gx:flyToMode>smooth</gx:flyToMode>
        <LookAt>
          <longitude>174.007</longitude>
          <latitude>-39.279</latitude>
          <altitude>0</altitude>
          <heading>112.817</heading>
          <tilt>68.065</tilt>
          <range>6811.884</range>
          <altitudeMode>relativeToGround</altitudeMode>
        </LookAt>
      </gx:FlyTo>

      <gx:FlyTo>
        <gx:duration>3.0</gx:duration>
        <gx:flyToMode>smooth</gx:flyToMode>
        <LookAt>
          <longitude>174.064</longitude>
          <latitude>-39.321</latitude>
          <altitude>0</altitude>
          <heading>-48.463</heading>
          <tilt>67.946</tilt>
          <range>4202.579</range>
          <altitudeMode>relativeToGround</altitudeMode>
        </LookAt>
       </gx:FlyTo>

      <gx:FlyTo>
        <gx:duration>5.0</gx:duration>
        <LookAt>
          <longitude>175.365</longitude>
          <latitude>-36.523</latitude>
          <altitude>0</altitude>
          <heading>-95</heading>
          <tilt>65</tilt>
          <range>2500</range>
          <altitudeMode>relativeToGround</altitudeMode>
        </LookAt>
      </gx:FlyTo>

      <gx:AnimatedUpdate>
        <gx:duration>0.0</gx:duration>
        <Update>
          <targetHref/>
          <Change>
            <Placemark targetId="pin2">
              <gx:balloonVisibility>1</gx:balloonVisibility>
            </Placemark>
          </Change>
        </Update>
      </gx:AnimatedUpdate>

      <gx:Wait>
         <gx:duration>6.0</gx:duration>
      </gx:Wait>

    </gx:Playlist>
  </gx:Tour>

  <Folder>
    <name>地点とポリゴン</name>

    <Style id="pushpin">
      <IconStyle>
        <Icon>
          <href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
        </Icon>
      </IconStyle>
    </Style>

    <Placemark id="mountainpin1">
      <name>ニュージーランドの南アルプス山脈</name>
      <styleUrl>#pushpin</styleUrl>
      <Point>
        <coordinates>170.144,-43.605,0</coordinates>
      </Point>
    </Placemark>

    <Placemark id="pin2">
      <name>終わり</name>
      <description>
        詳しくは、http://developers.google.com/kml/documentation をご覧ください
      </description>
      <styleUrl>pushpin</styleUrl>
      <Point>
        <coordinates>175.370,-36.526,0</coordinates>
      </Point>
    </Placemark>

    <Placemark id="polygon1">
      <name>ポリゴン</name>
      <Polygon>
        <tessellate>1</tessellate>
        <outerBoundaryIs>
          <LinearRing>
            <coordinates>
              175.365,-36.522,0
              175.366,-36.530,0
              175.369,-36.529,0
              175.366,-36.521,0
              175.365,-36.522,0
            </coordinates>
          </LinearRing>
        </outerBoundaryIs>
      </Polygon>
    </Placemark>

  </Folder>
</Document>
</kml>

ツアーのタイムライン

ツアーはツアー プリミティブ(FlyTo、Wait、TourControl、AnimatedUpdate、SoundCue など)によって構成されます。これらのプリミティブには、他のプリミティブが完了するのを待って順番に再生されるものと、他のプリミティブと同時並行で再生されるものがあります。

順番に発生するプリミティブ

  • <gx:FlyTo>
  • <gx:Wait>
  • <gx:TourControl>

これらのプリミティブは、実行が完了しないと、再生リスト内の他の要素に進むことができません。つまり、順番に発生するタイプのプリミティブ(FlyTo、Wait、TourControl)は一度に 1 つのみ実行されます。、その間に SoundCue や AnimatedUpdate を追加で「開始」することはできません。

同時並行で発生するプリミティブ

  • <gx:AnimatedUpdate>
  • <gx:SoundCue>

これらのプリミティブは、再生リストに追加すると同時にキューに登録されます。これらのプリミティブが開始されると、再生リストは SoundCue や AnimatedUpdate の完了を待つことなく、次のプリミティブに移動します。これは、次のことを意味します。

  • SoundCue や AnimatedUpdate は、再生リストに順次追加することで、いくつでも同時に実行できます。
  • SoundCue や AnimatedUpdate は、順番に発生するタイプのプリミティブの再生中も実行できますが、このタイプのプリミティブの再生中に新たに「開始」することはできません。

次の図に、これらの動作をまとめます。図をクリックすると、再生リスト内で各プリミティブを定義している KML コンテンツなど、より詳しい情報を見ることができます。


 

この図に示されている FlyTo は、完了するまでにかかる時間がそれぞれ異なります(時間は <gx:duration> 要素で指定します)。次のプリミティブが開始されるのは、指定された時間が経過した後です。

一方、SoundCue は同時並行で実行されます。メイン タイムライン内の次のプリミティブは、サウンド ファイルの再生が始まると同時に発生します。サウンド ファイルの再生は、ファイルの最後またはツアーの最後に到達するまで継続します(どちらか早い方)。ツアーがサウンド ファイルよりも早く終了した場合は、サウンド ファイルの再生が中断されます。各サウンド ファイルは別々のタイムラインに読み込まれるため、同時にいくつでも再生できます。

アニメーション更新も同じように動作します。たとえば、目印のアイコンが 5 秒間拡大表示されるように設定されている場合、この効果はメイン タイムライン内の次のプリミティブの実行中に実行されます。

FlyTo と flyToMode

ツアーは、<gx:FlyTo> 要素を使用して指定された場所から場所へ次々に移動します。この要素には、Google Earth で表示する場所、角度、標高を定義する AbstractView(<Camera> または <LookAt>)が含まれます。

また、flyToMode を指定すると、ブラウザがその場所に接近する方法を指定できます。<gx:Tour> が導入される前の「ツアー」は、ブラウザで再生すると目印から目印に飛び跳ねるように表示されていました。飛行速度はブラウザで定義しますが、目印に近づくにつれて遅くなり、最後に速度ゼロになってからまた次の目印に移動していました。この動作は、現在でも <gx:flyToMode>bounce</gx:flyToMode> 要素プロパティを使用してツアーで指定できます。

flyToMode を smooth に設定すると、飛行がスムーズに表示されるように制御できます。地点間の飛行速度は、<gx:duration> 要素を指定して制御できます。この要素は、現在地から次の地点として定義されているビューまでの移動にかかる時間を定義します。飛行が途中で停止しないようにするには、一連の FlyTo の flyToMode を smooth に設定します。Earth ブラウザで地点間の速度と曲線経路が補完され、KML で指定した時間どおりに各目印に到着します。bounce flyToMode と異なり、以下のいずれかの状況によって飛行が停止された場合以外は速度はゼロになりません。

  • ツアーが終了した
  • flyToMode を bounce に設定した地点に到達した
  • 待機が発生した

一時停止アニメーション更新サウンド キューによって飛行が中断されることはありません。

最初の FlyTo

再生リストの 1 番目の <gx:FlyTo> に指定された飛行は、その時点で Google Earth に表示されている地点から始まります。最初の地点までの飛行時間が考慮されるため、ツアー開始時の Earth 内の表示位置によって、最初の地点までの飛行速度が大きく異なります。できる限り自然に表示するため、この最初の FlyTo の時間を 5 秒以上にし、モードを bounce に設定することをおすすめします

最初の FlyTo の <gx:flyToMode>smooth に設定し、それに続く FlyTo も smooth に設定すると、初期の表示位置も曲線経路の 1 地点とみなされ、最初の地点と後続の地点の間の曲線経路にも影響を及ぼします。これは、ツアーの開始時に Earth クライアントに表示されていた位置によって、ツアー冒頭の連続する smooth FlyTo の表示が変わるということを意味します。それでも最初の地点を smooth FlyTo に設定する場合は、ツアー コード内の最初の FlyTo の後に <gx:Wait> を挿入できます。これにより、初期位置とそれ以降のツアーを分離させることができます。

次の例では、flyToMode が bounce と smooth でどう違うかを示します。それぞれのツアーで訪問する目印は同じですが、異なる flyToMode を使用しています。これらのツアーを Google Earth で再生するには、各コード スニペットの上にあるリンクをクリックし、Google Earth の [場所] パネルに表示されたツアー名をダブルクリックします。

 bounce_example.kml

<gx:FlyTo>
  <gx:duration>4.0</gx:duration>
  <!-- bounce はデフォルトの flyToMode です -->
  <LookAt>
     <longitude>-121.303179</longitude>
     <latitude>45.993041</latitude>
    <altitude>0</altitude>
    <heading>-27.923387</heading>
     <tilt>71.600075</tilt>
    <range>22570.546801</range>
    <altitudeMode>relativeToGround</altitudeMode>
  </LookAt>
</gx:FlyTo>

<!-- ...以下略... -->

 smooth_example.kml

<gx:FlyTo>
  <gx:duration>4.0</gx:duration>
  <gx:flyToMode>smooth</gx:flyToMode>
  <LookAt>
     <longitude>-121.303179</longitude>
     <latitude>45.993041</latitude>
    <altitude>0</altitude>
    <heading>-27.923387</heading>
     <tilt>71.600075</tilt>
    <range>22570.546801</range>
    <altitudeMode>relativeToGround</altitudeMode>
  </LookAt>
</gx:FlyTo>

<!-- ...以下略... -->

待機と一時停止

「待機」とは、ツアー内の空間全体の動きを停止することを意味します。ただし、サウンド ファイルやアニメーション更新は続行できます。待機の長さは KML で指定します。

「一時停止」とは、ユーザーが一時停止ボタンをクリックしたかのようにツアーをその位置で停止することを意味します。「一時停止」ボタンは、すべてのプリミティブに影響します。ツアーを再開するには、ユーザーが Google Earth のツアー コントロールの再生ボタンをクリックする必要があります。

待機

この要素は、カメラにのみ影響し、カメラを静止させる時間の長さを指定します。その時点で再生されているサウンド ファイルやアニメーション更新は影響を受けないため、待機の間も引き続き再生されます。待機を使用すると、次の FlyTo を開始する前またはツアーを終了する前に、サウンド ファイルの再生や更新の実行を最後まで終わらせることができます。

<gx:Wait>
    <gx:duration>10.0</gx:duration>   <!-- 待機時間(秒) -->
</gx:Wait>

待機の長さは、<gx:duration> 要素を使用して秒単位で指定します。待機時間が経過すると、再生リストに指定されている次の操作からツアーが続行されます。待機を挿入すると、スムーズな飛行経路が無効になります。その場合は、flyToMode に関係なく、待機に近づくとカメラの動きがゆっくりになり、待機の直前で速度がゼロになります。

一時停止

ユーザー操作の一時停止は、<gx:TourControl> とその子要素 <gx:playMode> で指定します。この子要素の有効な値は pause のみです。この操作を呼び出すと、ユーザーが Google Earth の一時停止ボタンをクリックした場合と同じような状態になり、再生ボタンがクリックされるまで一時停止したままになります。一時停止の間、ユーザーは Earth 環境内を自由に移動することができます。再生ボタンをクリックすると、ツアーが一時停止している地点に戻ります。

一時停止しても、スムーズな飛行経路は無効にはなりません。一時停止の前後の 2 地点間の飛行速度は、一時停止がなかったものとしてブラウザで計算されます。

<gx:TourControl>
    <gx:playMode>pause</gx:playMode>
</gx:TourControl>

次に示す待機の例では、10 秒間の紹介ナレーションのサウンド ファイルをキューに登録し、そのサウンド キューの直後に 10 秒間の待機を挿入しています。これにより、次の FlyTo は、ナレーションが終わるまで実行されません。

 wait_example.kml

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
 xmlns:gx="http://www.google.com/kml/ext/2.2">   

<gx:Tour>
  <gx:Playlist>

    <gx:SoundCue>
      <href>
        http://dev.keyhole.com/codesite/cntowerfacts.mp3
      </href>   <!-- このファイルの長さは 10 秒です -->
    </gx:SoundCue>
 
    <gx:Wait>
      <gx:duration>10</gx:duration>
    </gx:Wait>

    <gx:FlyTo>
       <gx:duration>5</gx:duration>
      <gx:flyToMode>bounce</gx:flyToMode>
      <LookAt>
        <longitude>-79.387</longitude>
<latitude>43.643</latitude>
<altitude>0</altitude> <heading>-172.3</heading> <tilt>10</tilt> <range>1200</range> <altitudeMode>relativeToGround</altitudeMode>
</LookAt> </gx:FlyTo> </gx:Playlist> </gx:Tour> </kml>

次の例では、一時停止の使用方法を示します。Earth のこのツアーは、現在地から所定の場所に移動した後一時停止します。ユーザーは、一時停止している間は自由に Earth 環境内を移動することができます。ツアーを再開するには、ツアー コントロールの再生ボタンをクリックします。すると、一時停止している場所まで一気に戻ってツアーが再開されます。

 pause_example.kml

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
 xmlns:gx="http://www.google.com/kml/ext/2.2">  

<gx:Tour>
  <gx:Playlist>

    <gx:FlyTo>
<gx:duration>5</gx:duration>
<gx:flyToMode>bounce</gx:flyToMode>
<LookAt>
<longitude>-79.387</longitude>
<latitude>43.643</latitude>
<altitude>0</altitude>
<heading>-172.3</heading>
<tilt>10</tilt>
<range>1200</range>
<altitudeMode>relativeToGround</altitudeMode>
</LookAt>
</gx:FlyTo> <gx:TourControl> <gx:playMode>pause</gx:playMode> </gx:TourControl> <gx:SoundCue> <href> http://dev.keyhole.com/codesite/cntowerfacts.mp3 </href> <!-- このファイルの長さは 10 秒です --> </gx:SoundCue> <gx:Wait> <gx:duration>10.0</gx:duration> </gx:Wait> </gx:Playlist> </gx:Tour> </kml>

更新

Earth 環境内の KML 要素は、ツアー中でも修正、変更、作成できます。たとえば、サイズ、スタイル、目印の位置などを変更したり、地面オーバーレイやジオメトリなどを追加したりできます。KML の更新については、「デベロッパー ガイド」の更新のセクションをご覧ください。

ツアー中に KML を更新するには、<gx:AnimatedUpdate> 要素を使用します。ツアーでの更新の動作は、NetworkLink での更新の動作と次の点で異なります。

  • ツアーが終了すると、KML に対する更新が元に戻される
  • 現在の状態を保存しても、KML に対する更新は保存されない

また、補間が可能な変更(つまり、サイズ変更のように中間状態がある変更)は、指定した時間に合わせてアニメーションで更新されます。中間状態がない変更(たとえば説明バルーンの開閉)は、指定した時間が経過するまでは更新されません。時間を指定しない場合、<gx:duration> のデフォルト値は 0.0 となり、直ちに更新が行われます。

上に挙げた相違点を除けば、<gx:AnimatedUpdate> 要素内の Update と <NetworkLinkControl> 要素内の Update は同じように動作します。Update を使用することで、マーカーのサイズ、位置、表示を変更したり、地面オーバーレイやモデルを追加したりできます。<gx:balloonVisibility> 要素を使用して、情報バルーンを切り替えることもできます。

<gx:AnimatedUpdate> とツアーのタイムライン

アニメーション更新は、タイムラインと同時並行で実行されます。つまり、アニメーション更新の実行中であっても、ツアーは再生リスト内の次のプリミティブに直接進みます。<gx:duration> には更新時間の長さを指定しますが、その影響で次のツアーのプリミティブの実行が遅延することはありません。

次の操作が実行される前にアニメーション更新を完了する場合は、アニメーション更新とその次のツアーのプリミティブの間に、更新時間と同じ長さの <gx:Wait> を挿入します。

また、最後の <gx:FlyTo> または <gx:Wait> 要素が完了した時点でまだ完了していないアニメーション更新は中断されます。アニメーション更新が中断されないようにするには、<gx:duration> を適切な値に変更するか、再生リストの最後に <gx:Wait> 要素を追加します。

タイムラインについて詳しくは、ツアーのタイムラインをご覧ください。

次のコード スニペットでは、特定の目印アイコンのサイズを、スケール 1.0 からスケール 10.0 に変更しています。この変更は 6.5 秒かけて実行され、その時間内にアイコンが元のサイズから最終的なサイズまで徐々に拡大されます。

ツアーの最後に <gx:Wait> プリミティブが挿入されていることに注目してください。アニメーション更新が実行中であっても、それだけではツアーの再生を続行することはできません。ツアーの長さを定義できるのは、順番に発生するタイプのツアー プリミティブだけです。これが、2.4 秒の待機が挿入されている理由です。この Wait を 4.1 秒の FlyTo と組み合わせると、更新が完了する時点までツアーの再生を続行できます。

 animatedupdate_example.kml

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
xmlns:gx="http://www.google.com/kml/ext/2.2"> <Document> <name>gx:AnimatedUpdate の例</name> <open>1</open> <Style id="style"> <IconStyle id="iconstyle"> <scale>1.0</scale> </IconStyle> </Style> <Placemark id="mountainpin1"> <name>ニュージーランドの南アルプス</name> <styleUrl>#style</styleUrl> <Point> <coordinates>170.144,-43.605,0</coordinates> </Point> </Placemark> <gx:Tour> <name>再生してください</name> <gx:Playlist> <!-- TourPrimitive の順序と長さは重要です。この例では、AnimatedUpdate を完了するには 6.5 秒かかります。FlyTo は 4.1 秒、Wait は 2.4 秒かかるので、更新が完了する時点までツアーの再生を続行できます。AnimatedUpdate だけではツアーの再生を続行できませんが、FlyTo と Wait を組み合わせると続行できます。詳しくは、http://developers.google.com/kml/documentation/touring.html#tourtimelines をご覧ください --> <gx:AnimatedUpdate> <gx:duration>6.5</gx:duration> <Update> <targetHref></targetHref> <Change> <IconStyle targetId="iconstyle"> <scale>10.0</scale> </IconStyle> </Change> </Update> </gx:AnimatedUpdate> <gx:FlyTo> <gx:duration>4.1</gx:duration> <Camera> <longitude>170.157</longitude> <latitude>-43.671</latitude> <altitude>9700</altitude> <heading>-6.333</heading> <tilt>33.5</tilt> <roll>0</roll> </Camera> </gx:FlyTo> <!-- AnimatedUpdate の完了を待機します --> <gx:Wait> <gx:duration>2.4</gx:duration> </gx:Wait> </gx:Playlist> </gx:Tour> </Document> </kml>

サウンドの追加

ツアーにサウンド ファイルを含め、<gx:SoundCue> 要素を使用して任意のタイミングで再生できます。サウンド ファイルは子要素 <href> で指定します。サポートされるファイル形式は、お使いのシステムにインストールされているコーデックによって異なります。たとえば、次のようなファイルがサポートされています。

  • MP3
  • AAC

再生時間は指定しません。

サウンド ファイルは、メイン タイムラインと同時並行で再生されます。つまり、サウンド ファイルの再生中であっても、再生リストは次のツアー プリミティブに進みます。詳しくは、ツアーのタイムラインをご覧ください。アニメーション更新と同じように、サウンド ファイルだけでツアーの再生を続行することはできません。ツアーの長さを定義できるのは、順番に発生するタイプのツアー プリミティブだけです。ツアーがサウンド ファイルよりも早く終了した場合は、サウンド ファイルの再生が中断されます。

複数のサウンド ファイルの再生

Google Earth では、複数のサウンド ファイルを同時に再生できます。たとえば、ツアーの冒頭から BGM を流し、ツアーの途中からナレーションを入れる、という演出も可能です。

次のプリミティブを再生する前にサウンド ファイルの再生を完了させる

サウンド ファイルの再生中にツアーを待機させる場合は、<gx:Wait> 要素を <gx:SoundCue> プリミティブの直後に挿入します。<gx:Wait> には、ツアーが次のプリミティブに進む前に待機する時間を秒単位で指定します。

ツアーが終了した後もサウンド ファイルの再生を続行することはできません。サウンド ファイルを最後まで再生する場合は、待機を挿入してツアーの終了を遅らせます。

次に示すサンプル ツアーの長さは 15 秒です。これは、<gx:FlyTo><gx:Wait> で指定された時間の合計です。1 番目のサウンド クリップの長さは 15 秒なので、ツアーの最初から最後まで再生されます。2 番目のサウンド ファイルは、キューで 5 秒間待機した後、1 番目のファイルと重なりながら 10 秒間再生されます。<gx:Wait> を挿入してツアーの再生時間を延長することで、2 つのサウンド クリップが最後まで再生されるようにしています。

 soundcue_example.kml

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
 xmlns:gx="http://www.google.com/kml/ext/2.2">

<gx:Tour>
  <gx:Playlist>
 
    <gx:SoundCue>
      <href>
        http://dev.keyhole.com/codesite/AJsBlues.mp3
      </href>    <!-- 15 秒の音声クリップ -->
    </gx:SoundCue>
  
    <gx:FlyTo>
       <gx:duration>5</gx:duration>
      <gx:flyToMode>bounce</gx:flyToMode>
      <LookAt>
        <longitude>-79.387</longitude>
<latitude>43.643</latitude>
<altitude>0</altitude>
<range>1200</range>
<tilt>10</tilt>
<heading>-172.3</heading>
<altitudeMode>relativeToGround</altitudeMode>
</LookAt> </gx:FlyTo> <gx:SoundCue> <href> http://dev.keyhole.com/codesite/cntowerfacts.mp3 </href> <!-- 10 秒の音声クリップ --> </gx:SoundCue> <gx:Wait> <gx:duration>10</gx:duration> <!-- 音声クリップの再生中、 --> </gx:Wait> <!-- ツアーは 10 秒間続きます --> </gx:Playlist> </gx:Tour> </kml>

説明バルーンの切り替え

アニメーション更新内で <gx:balloonVisibility> を使用すると、ツアー中に目印の説明バルーンを開いたり閉じたりできます。バルーンの表示/非表示は、指定した時間が経過した時点で切り替わります。アニメーション更新のように、指定した時間内に徐々に表示が切り替わるわけではありません。<gx:duration> に値を指定しない場合は、デフォルト値 0.0 が適用され、バルーンは直ちに開閉されます。

 balloonvisibility_tourexample.kml

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
 xmlns:gx="http://www.google.com/kml/ext/2.2">
  
  <Document>
    <name>balloonVisibility の例</name>
    <open>1</open>

    <gx:Tour>
      <name>再生してください</name>
      <gx:Playlist>
 
        <gx:FlyTo>
          <gx:duration>5.0</gx:duration>
          <!-- bounce はデフォルトの flyToMode です -->
          <LookAt>
            <longitude>-119.748584</longitude>
            <latitude>33.736266</latitude>
            <altitude>0</altitude>
            <heading>-9.295926</heading>
            <tilt>84.0957450</tilt>
            <range>4469.850414</range>
            <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
           </LookAt>
        </gx:FlyTo>

        <gx:AnimatedUpdate>
          <!-- デフォルトの長さは 0.0 です -->
          <Update>
            <targetHref/>
            <Change>
              <Placemark targetId="underwater1">
                <gx:balloonVisibility>1</gx:balloonVisibility>
              </Placemark>
            </Change>
          </Update>
        </gx:AnimatedUpdate>
 
        <gx:Wait>
          <gx:duration>4.0</gx:duration>
        </gx:Wait>

        <gx:AnimatedUpdate>
          <Update>
            <targetHref/>
            <Change>
              <Placemark targetId="underwater1">
                <gx:balloonVisibility>0</gx:balloonVisibility>
              </Placemark>
            </Change>
          </Update>
        </gx:AnimatedUpdate>
 
        <gx:FlyTo>
          <gx:duration>3</gx:duration>
          <gx:flyToMode>smooth</gx:flyToMode>
           <LookAt>
            <longitude>-119.782630</longitude>
            <latitude>33.862855</latitude>
            <altitude>0</altitude>
            <heading>-19.314858</heading>
            <tilt>84.117317</tilt>
            <range>6792.665540</range>
            <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
           </LookAt>
        </gx:FlyTo>

        <gx:AnimatedUpdate>
          <Update>
            <targetHref/>
            <Change>
              <Placemark targetId="underwater2">
                <gx:balloonVisibility>1</gx:balloonVisibility>
              </Placemark>
            </Change>
          </Update>
        </gx:AnimatedUpdate>
 
        <gx:Wait>
          <gx:duration>4.0</gx:duration>
        </gx:Wait>

        <gx:AnimatedUpdate>
          <Update>
            <targetHref/>
            <Change>
              <Placemark targetId="underwater2">
                <gx:balloonVisibility>0</gx:balloonVisibility>
              </Placemark>
            </Change>
          </Update>
        </gx:AnimatedUpdate>
 
        <gx:FlyTo>
          <gx:duration>3</gx:duration>
          <gx:flyToMode>smooth</gx:flyToMode>
           <LookAt>
            <longitude>-119.849578</longitude>
            <latitude>33.968515</latitude>
            <altitude>0</altitude>
            <heading>-173.948935</heading>
            <tilt>23.063392</tilt>
            <range>3733.666023</range>
            <altitudeMode>relativeToGround</altitudeMode>
          </LookAt>
        </gx:FlyTo>

        <gx:AnimatedUpdate>
          <Update>
            <targetHref/>
            <Change>
              <Placemark targetId="onland">
                <gx:balloonVisibility>1</gx:balloonVisibility>
              </Placemark>
            </Change>
          </Update>
        </gx:AnimatedUpdate>
 
        <gx:Wait>
          <gx:duration>4.0</gx:duration>
        </gx:Wait>

      </gx:Playlist>
    </gx:Tour>

    <Placemark id="underwater1">
      <name>カリフォルニア沖の海中</name>
      <description>
        ツアーは、アメリカのカリフォルニア沖の 
        サンタ クルズ渓谷付近から始まります。
      </description>
      <Point>
        <gx:altitudeMode>clampToSeaFloor</gx:altitudeMode>
        <coordinates>-119.749531,33.715059,0</coordinates>
      </Point>
    </Placemark>

    <Placemark id="underwater2">
      <name>まだ遊泳中...</name>
      <description>海を離れ、海岸に移動します...</description>
      <Point>
        <gx:altitudeMode>clampToSeaFloor</gx:altitudeMode>
        <coordinates>-119.779550,33.829268,0</coordinates>
      </Point>
    </Placemark>

    <Placemark id="onland">
      <name>終わり</name>
      <description>
        <![CDATA[ショートツアーの終わり。 
        <gx:balloonVisibility>1</gx:balloonVisibility> を使用して 
        説明バルーンを表示します。]]>
      </description>
      <Point>
        <coordinates>-119.849578,33.968515,0</coordinates>
      </Point>
    </Placemark>

  </Document>
</kml>

歴史イメージの組み込み

ユーザーが使用しているクライアントで歴史イメージが有効になっている場合は、特定の日付のイメージを取得してツアーに表示できます。表示するイメージの日付を指定するには、AbstractView 内に <gx:TimeStamp> 要素を挿入します。なお、<gx:TimeStamp>時間ベースの KML太陽光にも影響します。

最後に指定した日付が、それ以前のすべてのイメージに適用されます。

 historicalimagery_example.kml

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
 xmlns:gx="http://www.google.com/kml/ext/2.2">

<gx:Tour>
  <name>小さな町の歴史</name>
  <gx:Playlist>
    <gx:FlyTo>
       <gx:duration>5.0</gx:duration>
      <Camera>
        <gx:TimeStamp>
          <when>1990-08-04</when>
        </gx:TimeStamp>
        <longitude>-121.991</longitude>
        <latitude>47.857</latitude>
        <altitude>7000</altitude>
        <altitudeMode>absolute</altitudeMode>
      </Camera>
    </gx:FlyTo>

    <gx:FlyTo>
       <gx:duration>3.0</gx:duration>
      <gx:flyToMode>smooth</gx:flyToMode>
      <Camera>
        <gx:TimeStamp>
          <when>2009</when>
        </gx:TimeStamp>
        <longitude>-121.991</longitude>
        <latitude>47.857</latitude>
        <altitude>7000</altitude>
        <altitudeMode>absolute</altitudeMode>
      </Camera>
    </gx:FlyTo>

  </gx:Playlist>
</gx:Tour>
</kml>

既知の問題

現在、Google Earth クライアントは、KML のツアー機能に完全には対応していません。以下に、既に把握できている問題の一部を挙げます。これらの問題については、今後のリリースで順次解決していく予定です。

  • <gx:AnimatedUpdate> および <gx:TourControl> 要素によって、一連の smooth FlyTo で作成した曲線経路が無効になり、これらの要素の前または後の FlyTo 地点が直線経路で接続される。
  • <gx:SoundCue> で読み込まれたサウンド ファイルが、<gx:TourControl> によってツアーが一時停止した後も再生され続ける。ツアーを再開すると、サウンド ファイルは一時停止がトリガされた地点まで戻ります。
  • 高度モードに absolute 以外の値を指定すると、FlyTo 間の経路でカメラが次の地点に近づいたときに、高度が急に変化することがある。この現象は、カメラがある地点に近づくとその地点に関するより詳細な情報が必要になり、クライアントに読み込まれている地形データが更新されるために発生します。結果として、高度がその地点の地面より下に更新された場合、その地点までの経路を訂正しなければならなくなります。

    そのため、Google Earth の記録メカニズムでは、すべての FlyTo が absolute 標高モードに設定されます。作成したツアーでこのような経路の訂正が発生した場合は、標高も絶対値に変換する必要があります。