【问题标题】:Possible to show all placemarks with Timestamps in Google Earth by default?默认情况下可以在 Google 地球中显示所有带有时间戳的地标吗?
【发布时间】:2012-09-17 12:18:37
【问题描述】:

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

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

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

如果您想查看我所说的行为,这是来自 source 的 example 带有地标的 KML。

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

【问题讨论】:

    标签: timestamp kml google-earth


    【解决方案1】:

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

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

    如果您想预定义时间范围,可以显式添加限制时间视图的Camera 或LookAt。例如,要将视图限制在前 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,则最佳做法是向 NetworkLink 添加一个 &lt;TimeSpan&gt; 元素,包括该功能集合的完整时间范围,否则 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

    【讨论】:

    • 我刚刚在没有任何已启用保存地点的干净 Google 地球中加载了您链接的美国 KML。我不认为我在我尝试过的另一台机器上保存了任何感兴趣的地方。您能否解释一下:“Google 地球默认显示所有 KML 功能中最早和最晚时间的完整时间范围。”你说的是时间跨度,而不是时间戳?
    • 另外,正如我的 OP 中所述,我使用了 TimeStamp 节点。您将我链接到使用 TimeSpan 的美国州示例,只有一个 Begin 元素。也许这是让 GE 默认显示所有元素的关键,但也可能与加载的其他 kmls 相关。
    • 哦,我想你的意思是,如果你有 1910 - 1920 年的文件 A 和 1940 - 1950 年的文件 b,那么你是说 google earth 将默认为 1910 - 1950 . 这并不是我所看到的,因为我认为它似乎只是显示了前 10% 的时间跨度。现在不在那台机器前看。
    • 你说得对 - 如果你有一个 KML 时间从 1910 年到 1920 年,另一个 KML 时间从 1940 年到 1950 年,那么从 Windows 运行的 GE 至少 6.2.2 它显示了 1910 年到 1950 年的全部范围。如果您双击给定的 KML,它会将时间范围缩短到该文件的范围,如我所述,可以将其覆盖。此外,TimeSpan 或 TimeStamp 无关紧要 - TimeStamp 基本上被视为具有相同开始和结束时间的跨度。
    • 你是对的。如果您通过 NetworkLink 加载 URL,它只会显示一部分时间。加载 URL 直接显示整个时间范围。不一致的行为。这是一个错误。请参阅code.google.com/p/earth-issues/issues/detail?id=1466 但是,如果将 gx:timeSpan 添加到 NetworkLink,那么您将获得完整的时间范围......不要忘记 gx: 命名空间声明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多