お気に入り | 日本語 | ログイン

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 要素も含めることができます。

次に示す例では、完結したツアーに加え、目印である Placemark 要素を複数含む 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>A tour and some features</name>
  <open>1</open>

  <gx:Tour>
    <name>Play me!</name>
    <gx:Playlist>

      <gx:FlyTo>
        <gx:duration>5.0</gx:duration>
        <!-- bounce is the default 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>Points and polygons</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>New Zealand's Southern Alps</name>
      <styleUrl>#pushpin</styleUrl>
      <Point>
        <coordinates>170.144,-43.605,0</coordinates>
      </Point>
    </Placemark>

    <Placemark id="pin2">
      <name>The End</name>
      <description>
        Learn more at http://code.google.com/apis/kml/documentation
      </description>
      <styleUrl>pushpin</styleUrl>
      <Point>
        <coordinates>175.370,-36.526,0</coordinates>
      </Point>
    </Placemark>

    <Placemark id="polygon1">
      <name>Polygon</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 クライアントに表示されていた位置によって、ツアー冒頭の連続する FlyTo の表示が変わってくるということです。それでも最初の地点の FlyTo を smooth に設定したい場合は、ツアー コード内の最初の FlyTo の後に <gx:Wait> を挿入することを検討してください。これにより、初期位置とそれ以降のツアーを分離させることができます。

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

 bounce_example.kml

<gx:FlyTo>
  <gx:duration>4.0</gx:duration>
  <!-- bounce is the default 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>

<!-- ...snip... -->

 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>

<!-- ...snip... -->

待機と一時停止

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

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

待機

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

<gx:Wait>
    <gx:duration>10.0</gx:duration>   <!-- wait time in seconds -->
</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"?>
 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>   <!-- this file is ten seconds long -->
    </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 環境内を動き回ることができます。ツアーを再開したくなったら、ツアー コントロールの再生ボタンをクリックします。すると、一時停止している場所まで一気に戻ってツアーが再開されます。

 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> <!-- this file is ten seconds long --> </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 example</name> <open>1</open> <Style> <IconStyle id="iconstyle"> <scale>1.0</scale> </IconStyle> </Style> <Placemark id="mountainpin1"> <name>New Zealand's Southern Alps</name> <styleUrl>#style</styleUrl> <Point> <coordinates>170.144,-43.605,0</coordinates> </Point> </Placemark> <gx:Tour> <name>Play me!</name> <gx:Playlist> <!-- The order and duration of TourPrimitives is important; in this example, the AnimatedUpdate needs 6.5 seconds to complete. The FlyTo provides 4.1, and the Wait 2.4, giving the update time to complete before the Tour ends. AnimatedUpdates don't hold Tours open, but FlyTos and Waits do. For more information, refer to: http://code.google.com/apis/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> <!-- wait for the AnimatedUpdate to complete --> <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 second audio clip -->
    </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 second audio clip --> </gx:SoundCue> <gx:Wait> <gx:duration>10</gx:duration> <!-- continues the tour for 10 seconds --> </gx:Wait> <!-- while audio clip plays --> </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 Example</name>
    <open>1</open>

    <gx:Tour>
      <name>Play me</name>
      <gx:Playlist>
 
        <gx:FlyTo>
          <gx:duration>5.0</gx:duration>
          <!-- bounce is the default 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>
          <!-- the default duration is 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>Underwater off the California Coast</name>
      <description>
        The tour begins near the Santa Cruz Canyon, 
        off the coast of California, USA.
      </description>
      <Point>
        <gx:altitudeMode>clampToSeaFloor</gx:altitudeMode>
        <coordinates>-119.749531,33.715059,0</coordinates>
      </Point>
    </Placemark>

    <Placemark id="underwater2">
      <name>Still swimming...</name>
      <description>We're about to leave the ocean, and visit the coast...</description>
      <Point>
        <gx:altitudeMode>clampToSeaFloor</gx:altitudeMode>
        <coordinates>-119.779550,33.829268,0</coordinates>
      </Point>
    </Placemark>

    <Placemark id="onland">
      <name>The end</name>
      <description>
        <![CDATA[The end of our simple tour. 
        Use <gx:balloonVisibility>1</gx:balloonVisibility> 
        to show description balloons.]]>
      </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>Small town over time</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>2002-04-03</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 が絶対標高モードに設定されます。作成したツアーでこのような経路の訂正が発生した場合は、標高を絶対値に変換する必要があります。