KML 中的游览

目录

简介

游览是 Google 地球5.0中的新功能,可通过地理空间数据控制飞行,包括:

  • 各地点之间的特定飞行时长
  • 各地点之间平稳无停顿飞行
  • 游览期间在预定时间播放声音文件
  • 在游览范围内临时对 KML 地图项进行更新

有关从 Google 地球客户端视点游览的详情,请参考 Google 地球用户指南

Google 的扩展元素命名空间

用于定义游览的 KML 元素使用 gx 前缀,包含在 OGC KML 标准的扩展元素集内。要使用它们,必须在 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 地球5.0支持游览,但其他地理浏览器可能不支持游览。如果您的浏览器不支持特定的扩展元素,那么应默认忽略这些扩展元素中的数据,而且应正确无误地加载 KML 文件的其余部分。

术语

游览基元:用于定义游览中操作的一组元素之一。游览基元的一个示例是 FlyTo,由 <gx:FlyTo> 元素及其子元素定义。

播放列表:游览基元(用于定义游览)列表的容器。播放列表可以根据时间轴显示(有关详情,请参见游览时间轴)。

游览的结构

游览是通过将特定元素按顺序放入 KML 文件中构建的。KML 文件可以在游览过程中包含其他任何合法的 KML 元素。

下面的示例显示了一次完整的游览,以及包括许多地标的 Folder。游览从新西兰的南岛开始,经过塔拉纳基山向北飞行之前,显示 smoothbounce 的 flyToMode,以及打开说明提示框的 <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://developers.google.com/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),当出现连续型基元时,无法开始其他任何 SoundCue 或 AnimatedUpdate。

并行出现的基元

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

这些基元在播放列表中是列队出现的。基元开始后,播放列表会立即移至下一个基元,而不会等待 SoundCue 或 AnimatedUpdate 完成播放。这意味着:

  • 任何数量的 SoundCue 和/或 AnimatedUpdate 都可以通过逐个排在播放列表中而同时出现
  • SoundCue 和/或 AnimatedUpdate 可以在连续型基元播放时出现(尽管当连续型基元播放时它们不能开始)

下图说明了这种行为。点击图片可获得更详细的视图,其中包括定义了播放列表中每个基元的 KML 内容。


 

本图显示每个 FlyTo 均需要一定的时间(在其 <gx:duration> 元素中指定)完成。只有这段时间过去后,才会开始下一个基元。

另一方面,SoundCue 会并行出现。主时间轴中的下一个基元会在声音文件开始播放的同时立即出现。声音文件会继续播放到文件末尾或者游览结束,以两者中时间较早的为准。如果游览在声音文件停止之前结束,声音文件会停止播放。可以同时播放任意数量的声音文件,只要每个声音文件都被加载到其时间轴中即可。

以相同的方式进行持续更新。如果地标的图标设置为超过5秒时长后增大尺寸,那么当主时间轴中的下一个基元出现时也会执行此操作。

FlyTo 和 flyToMode

游览会从一个地点转到另一个地点,每个地点均使用 <gx:FlyTo> 元素指定。其中包含用于定义 Google 地球中查看地点、角度和海拔的 AbstractView(<Camera><LookAt>)。

此外,可以指定 flyToMode,以告知浏览器如何接近点。引入 <gx:Tour> 之前,“游览”是通过从一个地标跳至另一个地标而在浏览器中播放的,飞行速度(由浏览器定义)会在浏览器接近地标时降低,继续前往下一个地标之前速度会降为0。使用 <gx:flyToMode>bounce</gx:flyToMode> 元素属性仍可在游览中指定该行为。

smooth flyToMode 允许跨空间进行平稳且受控制的飞行。点之间的速度由包含的 <gx:duration> 元素控制,该元素用于定义浏览器从当前点行至下一个定义视图所用的时间。不间断的飞行由一系列包含 smooth flyToMode 的 FlyTo 组成,地球浏览器改变了点之间的速度和曲线路径,以便在 KML 中指定的精确时间到达每个地标。与 bounce flyToMode 不同,此模式中的速度永远不会为0,除非因以下任何事件中断飞行:

  • 游览结束,
  • 具有 bounce flyToMode 的点,或
  • 等待。

暂停持续更新声音队列不会中断飞行。

初始 FlyTo

播放列表内包含的第一个 <gx:FlyTo>,就是 Google 地球中要从查看者当前位置飞往的位置。由于必须遵守时长,因此飞行到第一个点的速度会有很大差异,具体取决于游览开始时查看者在 Google 地球中的位置。建议该初始 FlyTo 包含的时长为5秒或更长,并且采用 bounce 模式,以便获得最佳观看体验。

如果第一个 FlyTo 的 <gx:flyToMode> 设为 smooth,并且后面也都是 smooth FlyTo,那么查看者的初始位置将被认为平滑曲线中的一个点,并且影响第一个点和随后点之间路径的曲线。也就是说,初始的 smooth FlyTo 系列对于每个查看者来说会有所不同,具体取决于游览开始时查看者在 Google 地球客户端观看的内容。如果初始点仍然需要 smooth FlyTo,可以在第一个 FlyTo 后将 <gx:Wait> 插入游览代码。这会将初始位置与游览的其他部分隔开。

示例

以下示例显示了 bounce flyToMode 和 smooth flyToMode 之间的差异。每个游览都会访问相同的地标,但使用的 flyToMode 不同。要播放 Google 地球中的游览,请点击每个代码段上方的链接,然后从 Google 地球中您的位置面板双击游览名称。

 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 地球中游览控件的播放按钮时,游览才会继续进行。

等待

该元素只会影响镜头。它用于指定镜头保持静止的时长。当前播放的任何声音文件和/或持续更新都不受影响,并且会在等待过程中继续播放。在下一个 FlyTo 开始或游览结束前,可以使用等待来预留声音文件或更新完成的时间。

<gx:Wait>
    <gx:duration>10.0</gx:duration>   <!-- wait time in seconds -->
</gx:Wait>

等待时长由 <gx:duration> 元素指定(以秒为单位)。指定时间过后,游览会继续进行播放列表中下一个指定操作。等待会中断平稳飞行路径,以便无论 flyToMode 为哪种模式,镜头移动速度都可在等待之前的任何点上迅速降为0。

暂停

用户控制的暂停用 <gx:TourControl> 及其子元素 <gx:playMode> 指定。后者只允许有一个值:暂停。调用此操作与用户点击 Google 地球中的暂停按钮类似,游览会在该点上暂停,并会在点击播放按钮之前一直暂停。暂停期间,用户可以在 Google 地球环境中随意移动。点击播放后,用户会返回到游览中设置暂停的点上。

暂停不会中断平稳飞行路径,因此暂停两头的点之间的速度由浏览器计算,就像没有暂停一样。

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

示例

下面是等待的示例。声音文件排在队列中,其中包括十秒的介绍言论。声音文件播放后立即插入了十秒的等待,以保证言论结束后才会出现后面的 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>   <!-- 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>

以下示例演示了如何使用暂停。查看者“飞”向 Google 地球中的特定地点,然后游览暂停。用户可以在 Google 地球环境中移动任意长的时间。当用户准备好恢复游览时,他们必须从游览控件中选择播放,Google 地球就会跳回游览的上一个地点并继续播放。

 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>

更新

游览期间可以修改、更改或创建 Google 地球环境中的 KML 地图项,包括大小、样式、地标地点、其他地面叠加层、几何图形等。有关更新 KML 的详情,请参见《开发者指南》更新部分。

游览期间可以使用 <gx:AnimatedUpdate> 元素对 KML 进行更新。游览期间的更新行为不同于 NetworkLink 中的更新行为,具体如下所示:

  • 退出游览时系统会返回 KML 更新,以及
  • 保存当前状态时,不包括 KML 更新。

此外,任何导致发生变化的更改(即包含中间状态的更改,例如大小更改)都可在指定时长内进行。不含中间步骤的更改(例如说明提示框的打开或关闭)只在指定时长结束时更新。如果没有指定时长,更新会立即进行(<gx:duration> 的默认值为0.0)。

除上文列出的不同外,<gx:AnimatedUpdate> 元素内的更新与 <NetworkLinkControl> 内的更新在方式上是相同的。更新可用于更改标记大小、地点和外观,添加地面叠加层或模型,以及使用 <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秒的等待时间。通过与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 id="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://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> <!-- 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 地球会将多个文件混合在一起,从而可同时播放许多声音文件。如果游览开始时加载了背景音乐文件,并且游览期间特定点上提供了画外音,此功能就很有用。

允许在下一个基元播放前完成声音文件

如果您希望声音文件播放时游览处于等待状态,则请紧跟在 <gx:SoundCue> 基元后面加入 <gx:Wait> 元素。<gx:Wait> 可指定在继续播放下一个基元之前,游览应该等待的时间(以秒为单位)。

游览结束后,不能继续播放声音文件。当声音文件播放完后,可以使用等待来延长游览时间。

示例

以下游览示例时长15秒,由 <gx:FlyTo><gx:Wait> 时长共同定义。第一个声音剪辑持续15秒,并且播放时间占据整个游览时长。第二个文件在5秒处插入,与第一个文件混合播放了10秒。此时,需要使用 <gx:Wait> 来延长游览时间,以便声音剪辑有足够的时间完成播放。

 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>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 地球客户端没有完全遵守 KML 中的游览规范。下面列出了一些已知问题;这些问题可能会在即将发布的版本中得到解决。

  • <gx:AnimatedUpdate><gx:TourControl> 元素会中断由一系列 smooth FlyTo 创建的曲线。这些元素两侧的 FlyTo 点均会与线性路径连接在一起。
  • 通过 <gx:SoundCue> 加载的声音文件会在 <gx:TourControl> 触发的暂停期间继续播放。当游览恢复时,Google 地球会跳回声音文件中触发暂停的点。
  • 当使用海拔模式而不是完全模式时,FlyTo 之间的路径可能会随着镜头不断接近某个点而上下跳动。这是由加载到客户端的更新地形数据造成的,镜头越接近某个点,该点的相关信息就越详细。因此,系统可能会更新该点下的地面海拔,要求修正到该点的路径。

    因此,Google 地球中的记录机制会为所有 FlyTo 指定绝对海拔模式。如果这些路径修正妨碍了您的游览,您也应将海拔值转换为绝对值。