6

我正在考虑使用Timestamp元素创建 KML 地标。这本身很容易做到,但我不喜欢 Google 地球在最初加载 KML 时只显示一小段时间的行为。我希望它默认显示整个时间跨度(以及所有地标)。

有没有办法做到这一点?我在 Google 地球中没有看到任何设置,也没有在 KML 文档中看到任何相关设置。

我正在考虑的另一种方法是基本上复制每个地标,并在单独的文件夹中设置 1 个带时间戳和 1 个不带时间戳。文件夹将使用单选按钮选择功能。如果可能的话,我想避免这种情况,因为 KML 可能有数千个地标,并且复制节点似乎是一种浪费。

如果您想查看我所说的行为,这里有一个来自此来源的示例,其中包含带有地标的 KML。

更新:我看到的时间滑块未默认为包含的 KML 地标的整个跨度的行为似乎是因为该文件是通过网络链接加载到本地文件的。在这种情况下,我不确定如何控制时间滑块的行为。我可以让链接执行“刷新时飞来查看”,它可以正确设置时间滑块,但我不想将相机移动到纬度/经度,因为我每 4 秒刷新一次。

4

1 回答 1

7

默认情况下,Google 地球会显示 KML 的完整时间。但是,一种常见的情况是当多个 KML 文件打开/可见时,Google 地球默认显示所有KML 功能中最早和最晚时间的完整时间范围。此外,通过NetworkLinks加载 KML不会像直接在 Google 地球中打开它那样显示完整的时间范围

为了说明,首先取消选中您保存的位置以禁用其他 KML,然后加载此 KML 文件。您会注意到时间线显示 1787 到 1959 的全部范围。https://developers.google.com/kml/documentation/us_states.kml

如果您想预先定义一个时间范围,您可以显式添加一个限制时间视图的CameraLookAt 。例如,要将视图限制在前 100 年,您可以将<gx:TimeSpan>具有年份范围的元素添加到 KML 中的根级元素。请记住包含 lat/lon/range 元素,否则视图将默认为 lat=0、lon=0、range=0。

<?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>
    ....
    <LookAt>
            <gx:TimeSpan>
                    <begin>1787</begin>
                    <end>1887</end>
            </gx:TimeSpan>
            <longitude>-95.71</longitude>
            <latitude>37.09</latitude>
            <range>4119625</range>
            ...
    </LookAt>
    ...
</Document>
</kml>

如果您在地标或文件夹上单击鼠标右键,然后在 Google 地球中选择“快照视图”,并且计时器滑块可见,则时间范围将在保存的视图中捕获。

因此,您可以做任何您想做的事,而无需随时间复制地标,而是创建一些仅使用受时间范围约束的视图定义的地标。单击这些特殊地标中的每一个都会将时间滑块更改为您要显示的任何时间范围。

具有通过Networklinks检索的时间的 KML 要素具有不同的行为,并且在时间滑块中仅预先选择了一部分时间范围。您必须将flyToView添加到 NetworkLink 以使其行为与直接加载 KML 相同。

<NetworkLink>
  <flyToView>1</flyToView>
  <Link>
    <href>...</href>
  </Link>
</NetworkLink>

如果您在父 KML 文件中包含多个具有基于时间的功能的 NetworkLink,则最佳做法是<TimeSpan>向 NetworkLink 添加一个元素,包括该功能集合的完整时间范围,否则 Google 地球将在启动时自动加载整个文件.

<NetworkLink>
  <TimeSpan>
    <begin>1787</begin>
    <end>1887</end>
  </TimeSpan>
  <flyToView>1</flyToView>
  <Link>
    <href>...</href>
  </Link>
</NetworkLink>

参考:
https ://developers.google.com/kml/documentation/kmlreference#timespan
https://developers.google.com/kml/documentation/kmlreference#gxtimespan

于 2012-09-25T14:03:30.477 回答