我正在考虑使用Timestamp元素创建KML地标。这本身很容易做到,但我不喜欢Google Earth的行为只显示最初加载KML时的一小段时间。我希望默认显示整个时间范围(以及所有地标)。
有没有办法做到这一点?我没有在Google地球中看到任何设置,也没有看到KML文档中的任何设置。
我考虑的另一种选择是基本上复制每个地标,并且在单独的文件夹中有1个设置有时间戳,1个没有。文件夹将使用单选按钮选择功能。如果可能的话,我想避免这种情况,因为KML可能有数千个地标,并且似乎是浪费复制节点。
如果您希望了解我所说的行为,那么这个example中的source就会带有带地标的KML。
更新:我看到的时间滑块没有默认为包含的KML地标的完整范围的行为似乎是因为文件是通过网络链接加载到本地的文件。在这种情况下,我不确定如何控制时间滑块的行为。我可以让链接执行"飞行查看刷新",它正确设置时间滑块,但我不想将相机移动到纬度/经度,因为我每个人都在刷新4秒。
答案 0 :(得分:7)
默认情况下,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,则向NetworkLinks添加<TimeSpan>
元素,包括该特征集合的全部时间,否则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