時間とアニメーション

目次

はじめに

KML 内のすべての Feature には、時間データを関連付けることができます。時間データを使用すると、データ セットが表示される期間や時点を制限できます。KML ファイルの読み込み時には完全なデータ セットが取得されますが、Google Earth ユーザー インターフェースの時間スライダを使ってデータのどの部分を表示するかを操作できます。

KML には、TimePrimitive から派生した次の 2 つの時間要素があります:

  • TimeStamp: 特定の Feature の一時点を示します。
  • TimeSpan: 特定の Feature の開始時刻 <begin> と終了時刻 <end> を示します。

これらの要素は、Google 拡張名前空間でも以下の要素としてコピーされます:

  • gx:TimeStamp
  • gx:TimeSpan

そのため、AbstractView 要素の子要素として指定できます。詳細については、後述の AbstractView での時間の指定をご覧ください。

Google Earth では、TimePrimitive 要素のある Feature が含まれる KML ファイルを開くと、時間スライダが表示されます(時間スライダの開始時点と終了時点は、そのファイルの KML Feature にある最も古い時間と最も新しい時間に基づいて自動的に決定されます)。ユーザーは、スライダと再生ボタンを使用して、全体を時系列で「再生」したり、特定の期間を選択して表示したりできます。

Google Earth で時間スライダを有効にするには、[表示] メニューから [時間を表示] を選択し、[自動] または [常に表示] を選択します(デフォルトでは [自動] です)。ここで紹介するサンプルでは、[選択しているフォルダの時間に制限する] オプションがオフになっていることを前提としています(デフォルトはオフ)。

タイムスタンプと GPS データ

TimeStamp は一般に、Point Placemark に関連付けられます。経路上の各位置の Placemark アイコンを順番に短く表示すると、Placemark がアニメーションで移動するように見せることができます。この手法は、GPS 追跡デバイスからインポートしたデータを KML で表示する場合に特に便利です。効果的に表示するには、指定されたデータ セットの TimeStamp を一定の間隔で取得する必要があります。

TimeStamp は通常、複数の位置に表示する軽量のデータ セット(経路に沿って移動する Placemark など)に使用されます。このような用途では多くの場合、複数の Feature が同時に表示範囲内に入るようにし、それぞれの Feature が異なる位置に異なるタイミングで表示されるようにします。Google Earth ユーザー インターフェースの時間スライダでは、時間ウィンドウを使用して、スライダ内の期間の「一部分」を選択し、その一定時間の開始から終了まで移動します。

German European School Singapore では、この手法を使用して、「シュローダー」という愛称のジンベイザメにタグを付け、GPS デバイスでこのサメがインド洋からアフリカ大陸に向かって移動する様子を数か月間追跡しました。興味のある方は、調査チームのウェブサイトに公開されている KMZ ファイルをご覧ください。

この KML ファイルでは、チームがシュローダーを見失うまでの移動経路が赤い線で示されます。画面上部に表示されるタイムラインに従い、この経路に沿って黄色の点(Placemark アイコン)がアニメーション表示されます。青い矢印は波動パターンの方向を示す地面オーバーレイの一部です。研究者は、シュローダーが突然方向転換したのは波動パターンの影響によるもので、波動パターンにより主な餌であるプランクトンの流れが決まるからだ、と考えています。

この例では、Point Placemark に <TimeStamp> 要素を関連付けています。赤色の LineString と青色の GroundOverlay は、時間要素が関連付けられていないため常時表示されます。

KML アイコン whale_shark.kmlTeam Seeadlerpost、German European School Singapore の許可を得て使用)

タイムスパン

ポリゴンや画像がすばやく切り替わるオーバーレイを表示するには、TimeSpan オブジェクトを使用して開始時点と終了時点を指定します。この手法は一般に、地面オーバーレイのようなポリゴンや画像の変化(氷河の範囲が徐々に狭くなっていく様子や、火山灰の拡散、数年間に渡る森林伐採の進行状況など)を表現するために使用します。

TimeSpan は、特定の時点に 1 つの Feature のみが表示範囲に入る場合で、ある画像から次の画像に表示をすばやく切り替えたいときに使用します。複数の TimeSpan を切れ目なく、かつオーバーラップしないように設定する必要があります。Google Earth ユーザー インターフェースの時間スライダには、TimeSpan を含むデータ セット用に、開始時点から終了時点までをスムーズに移動するポインタが表示されます。ある Feature から次の Feature への切り替えは瞬時に行われます。

Brian Flood 氏が作成した KML プレゼンテーションに、米国の各州が合衆国に加盟して国土が拡大していく様子を表現したものがあります。この KML ファイルでは、開始時点のみが指定された TimeSpan オブジェクトが使用されているため、一度追加された州(ポリゴン)はその後も表示されたままとなります。

KML アイコン us_states.kmlBrian Flood 氏の許可を得て使用)

モデルのアニメーション

TimeSpan 要素を使用したもう 1 つの例として、James Stafford 氏が作成したロンドン アイ(観覧車)のアニメーションを紹介します。この表示では、ロンドン アイのモデルが使用されています。このモデルは、一連の Placemark から参照されています。それぞれの Placemark に、モデルの回転幅を少しずつ増やした値と、表示期間を示す TimeSpan が指定されています。

KML アイコン london_eye.kmzJames Stafford 氏の許可を得て使用)

時間の指定方法

dateTime は、XML Schema の時間に基づいています(XML Schema Part 2: Datatypes Second Edition をご覧ください)。値は yyyy-mm-ddThh:mm:sszzzzzz と表記します。T は日付と時刻の区切り文字で、タイム ゾーンには Z(UTC)または zzzzzz(UTC からの時間差を ±hh:mm の形式で指定)を使用します。また、この値で日付のみを指定することもできます。具体例については、「KML 2.2 リファレンス」の <TimeStamp> 要素のセクションをご覧ください。

AbstractView での時間の指定

Google Earth 5.0 では、Google 拡張名前空間がサポートされており、<gx:TimeSpan> 要素と <gx:TimeStamp> 要素を使用することができます。これらの要素はそれぞれ <TimeSpan> 要素と <TimeStamp> 要素のコピーであり、<LookAt> 要素や <Camera> 要素に時間情報を追加するために使用できます。

AbstractView で時間情報を設定すると、表示される Feature、日照、過去のイメージに適用されます。AbstractView 内で <gx:TimeSpan> または <gx:TimeStamp> を使用することにより、Google Earth 内の特定の空間、特定の時間に向けてジャンプすることができます。

いったん指定した時間は、次に別の時間が指定されるまで記録され、その時間に合わせてイメージ、Feature 、日照が表示されます。KML では、「現在時間」という概念はサポートされていません。したがって、Google Earth で現在に戻るには、<gx:TimeStamp> 内で <when>2999</when>(または未来の別の日付)を指定する必要があります。

Google 拡張名前空間内で要素を使用する場合は、まず KML ファイルの開始要素 <kml> に正しい名前空間 URI を追加する必要があります。

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

なお、接頭辞 gx の拡張名前空間をサポートしていない地理情報ブラウザもありますのでご注意ください。Google Earth 5.0 ではサポートしています。

KML アイコン abstractviews_timeprimitive_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>Views with Time</name>
    <open>1</open>
    <description>
      In Google Earth, enable historical imagery and sunlight,
      then click on each placemark to fly to that point in time.
    </description>

    <Placemark>
      <name>Sutro Baths in 1946</name>
      <Camera>
        <gx:TimeStamp>
          <when>1946-07-29T05:00:00-08:00</when>
        </gx:TimeStamp>
        <longitude>-122.518172</longitude>
        <latitude>37.778036</latitude>
        <altitude>221.0</altitude>
        <heading>70.0</heading>
        <tilt>75.0</tilt>
      </Camera>
    </Placemark>

    <Placemark>
      <name>Palace of Fine Arts in 2002</name>
      <Camera>
        <gx:TimeStamp>
          <when>2002-07-09T19:00:00-08:00</when>
        </gx:TimeStamp>
        <longitude>-122.444633</longitude>
        <latitude>37.801899</latitude>
        <altitude>139.629438</altitude>
        <heading>-70.0</heading>
        <tilt>75</tilt>
      </Camera>
    </Placemark>

  </Document>
</kml>

例: 目印が経路に沿って移動する様子を表示する

次の例では、TimeStamp 要素を使用して、Placemark が経路に沿って移動する様子を表示する方法を紹介します。TimeStamp を頻繁にサンプリングして、KML ファイルを再生したときに Placemark アイコンが経路に沿ってアニメーションのように移動する様子を表示できます。

KML アイコン TimeStamp_example.kml
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Points with TimeStamps</name>
<Style id="paddle-a">
<IconStyle>
<Icon>
<href>http://maps.google.com/mapfiles/kml/paddle/A.png</href>
</Icon>
<hotSpot x="32" y="1" xunits="pixels" yunits="pixels"/>
</IconStyle>
</Style>
<Style id="paddle-b">
<IconStyle>
<Icon>
<href>http://maps.google.com/mapfiles/kml/paddle/B.png</href>
</Icon>
<hotSpot x="32" y="1" xunits="pixels" yunits="pixels"/>
</IconStyle>
</Style>
<Style id="hiker-icon">
<IconStyle>
<Icon>
<href>http://maps.google.com/mapfiles/ms/icons/hiker.png</href>
</Icon>
<hotSpot x="0" y=".5" xunits="fraction" yunits="fraction"/>
</IconStyle>
</Style>
<Style id="check-hide-children">
<ListStyle>
<listItemType>checkHideChildren</listItemType>
</ListStyle>
</Style>
<styleUrl>#check-hide-children</styleUrl>
<Placemark>
<TimeStamp>
<when>2007-01-14T21:05:02Z</when>
</TimeStamp>
<styleUrl>#paddle-a</styleUrl>
<Point>
<coordinates>-122.536226,37.86047,0</coordinates>
</Point>
</Placemark>
<Placemark>
<TimeStamp>
<when>2007-01-14T21:05:20Z</when>
</TimeStamp>
<styleUrl>#hiker-icon</styleUrl>
<Point>
<coordinates>-122.536422,37.860303,0</coordinates>
</Point>
</Placemark>
<Placemark>
<TimeStamp>
<when>2007-01-14T21:05:43Z</when>
</TimeStamp>
<styleUrl>#hiker-icon</styleUrl>
<Point>
<coordinates>-122.536688,37.860072,0</coordinates>
</Point>
</Placemark>
<Placemark>
<TimeStamp>
<when>2007-01-14T21:06:04Z</when>
</TimeStamp>
<styleUrl>#hiker-icon</styleUrl>
<Point>
<coordinates>-122.536923,37.859855,0</coordinates>
</Point>
</Placemark>
<Placemark>
<TimeStamp>
<when>2007-01-14T21:06:24Z</when>
</TimeStamp>
<styleUrl>#hiker-icon</styleUrl>
<Point>
<coordinates>-122.537116,37.85961000000001,0</coordinates>
</Point>
</Placemark>
<Placemark>
<TimeStamp>
<when>2007-01-14T21:06:46Z</when>
</TimeStamp>
<styleUrl>#hiker-icon</styleUrl>
<Point>
<coordinates>-122.537298,37.859336,0</coordinates>
</Point>
</Placemark>
<Placemark>
<TimeStamp>
<when>2007-01-14T21:07:07Z</when>
</TimeStamp>
<styleUrl>#hiker-icon</styleUrl>
<Point>
<coordinates>-122.537469,37.85907,0</coordinates>
</Point>
</Placemark>
<Placemark>
<TimeStamp>
<when>2007-01-14T21:07:27Z</when>
</TimeStamp>
<styleUrl>#hiker-icon</styleUrl>
<Point>
<coordinates>-122.537635,37.858822,0</coordinates>
</Point>
</Placemark>
<Placemark>
<TimeStamp>
<when>2007-01-14T21:07:51Z</when>
</TimeStamp>
<styleUrl>#hiker-icon</styleUrl>
<Point>
<coordinates>-122.537848,37.858526,0</coordinates>
</Point>
</Placemark>
<Placemark>
<TimeStamp>
<when>2007-01-14T21:08:11Z</when>
</TimeStamp>
<styleUrl>#hiker-icon</styleUrl>
<Point>
<coordinates>-122.538044,37.858288,0</coordinates>
</Point>
</Placemark>
<Placemark>
<TimeStamp>
<when>2007-01-14T21:08:33Z</when>
</TimeStamp>
<styleUrl>#hiker-icon</styleUrl>
<Point>
<coordinates>-122.538307,37.858064,0</coordinates>
</Point>
</Placemark>
<Placemark>
<TimeStamp>
<when>2007-01-14T21:08:56Z</when>
</TimeStamp>
<styleUrl>#hiker-icon</styleUrl>
<Point>
<coordinates>-122.538601,37.857837,0</coordinates>
</Point>
</Placemark>
<Placemark>
<TimeStamp>
<when>2007-01-14T21:09:19Z</when>
</TimeStamp>
<styleUrl>#hiker-icon</styleUrl>
<Point>
<coordinates>-122.53887,37.857604,0</coordinates>
</Point>
</Placemark>
<Placemark>
<TimeStamp>
<when>2007-01-14T21:09:45Z</when>
</TimeStamp>
<styleUrl>#hiker-icon</styleUrl>
<Point>
<coordinates>-122.539052,37.857262,0</coordinates>
</Point>
</Placemark> . . .
</Document>
</kml>

アニメーションの子要素を非表示にする

このような例では一般に、Document 内に ListStyle 要素を挿入して checkHideChildren を指定し、個々の目印がリスト ビューに表示されないようにすると便利です。次のコードには、この追加要素が含まれています。なお、Document では Style 要素が定義されていますが、<styleUrl> 要素内で ListStyle を参照する必要もあります。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Point with TimeStamps</name> . . .
<Style id="check-hide-children"> <!-- define the style for the Document -->
<ListStyle>
<listItemType>checkHideChildren</listItemType>
</ListStyle>
</Style>
<styleUrl>#check-hide-children</styleUrl> <!-- add the style to the Document -->
<Placemark>
<TimeStamp>
<when>2007-01-12</when>
</TimeStamp>
<styleUrl>#hiker-icon</styleUrl>
<Point>
<coordinates>-122.536422,37.860303,0</coordinates>
</Point>
</Placemark> . . .
</Document>
</kml>

例: 地面オーバーレイのアニメーション

ポリゴンや地面オーバーレイをアニメーション表示する場合は一般に、次の例のように TimeSpan 要素を使用します。この KML ファイルには月ごとの GroundOverlay 画像が含まれており、アニメーションを再生することで季節ごとの景色の移り変わりを表示できます。1~3 月の景色を表示するコードの例を次に示します:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <!-- TimeSpan is recommended for GroundOverlays -->
<Folder>
<name>BMNG-12months</name>
<GroundOverlay>
<name>Blue Marble - Jan</name>
<TimeSpan>
<begin>2004-01</begin>
<end>2004-02</end>
</TimeSpan>
<Icon>
<href>http://mw1.google.com/mw-earth-vectordb/kml-samples/bmng12/files/BMNG-Jan.jpg</href>
</Icon>
<LatLonBox>
<north>90</north>
<south>-90</south>
<east>180</east>
<west>-180</west>
</LatLonBox>
</GroundOverlay>
<GroundOverlay>
<name>Blue Marble - Feb</name>
<TimeSpan>
<begin>2004-02</begin>
<end>2004-03</end>
</TimeSpan>
<Icon>
<href>http://mw1.google.com/mw-earth-vectordb/kml-samples/bmng12/files/BMNG-Feb.jpg</href>
</Icon>
<LatLonBox>
<north>90</north>
<south>-90</south>
<east>180</east>
<west>-180</west>
</LatLonBox>
</GroundOverlay>
<GroundOverlay>
<name>Blue Marble - Mar</name>
<TimeSpan>
<begin>2004-03</begin>
<end>2004-04</end>
</TimeSpan>
<Icon>
<href>http://mw1.google.com/mw-earth-vectordb/kml-samples/bmng12/files/BMNG-Mar.jpg</href>
</Icon>
<LatLonBox>
<north>90</north>
<south>-90</south>
<east>180</east>
<west>-180</west>
</LatLonBox>
</GroundOverlay> . . . </Folder> </kml>
KML アイコン TimeSpan_example.kml(データ提供: NASA)

次にこの例の画面キャプチャを示します:

トップへ戻る