目录
简介
KML 中的所有地图项均可以与时间数据相关联。该时间数据具有用给定时间段或时间点限制数据集可见性的作用。虽然加载 KML 文件时获取了完整的数据集,但可用 Google 地球界面中的时间滑块控制数据的哪些部分是可见的。
KML 有以下两个派生自 TimePrimitive 的时间元素:
- TimeStamp - 为给定地图项指定一个时刻
- TimeSpan - 为给定地图项指定 <begin> 和 <end> 时间
这些元素也复制到 Google 扩展元素命名空间,如下所示:
- gx:TimeStamp
- gx:TimeSpan
这样可将它们作为 AbstractView 元素的子元素加入。有关详情,请参见下文中的使用 AbstractView 指定时间部分。
当打开的 KML 文件包含具有 TimePrimitive 元素的地图项时,Google 地球会显示一个时间滑块(Google 地球根据特定文件的 KML 地图项中的最早和最晚时间,自动选择时间滑块的开始和结束时间单位)。使用滑块和播放按钮,用户可以“播放”整个序列,也可以选择要显示的单个时间段。
要启用 Google 地球中的时间滑块,请依次转到“查看”>“显示时间”,然后选择“自动”或“始终”(默认值为“自动”)。这些示例均假定选项“限制当前所选文件夹对应的时间”处于关闭状态(默认值)。
时间戳和 GPS 数据
TimeStamp 通常与点地标相关联。在路径沿途的各个位置简要显示地标图标,可使地标具有动画效果。此技术在创建 KML 以显示从 GPS 跟踪设备导入的数据时特别有用。为取得最佳效果,应定期提取给定数据集的 TimeStamp。
TimeStamp 通常用于在多个地点显示的轻量级数据集(例如,沿路径移动的地标)。在这种情况下,当在不同时间不同地点显示多个地图项时,这些地图项常常同时可见。Google 地球用户界面时间滑块包含一个时间窗口,该窗口选取时间滑块的“一部分”,从时间段的开头移到结尾。
借助此技术,German European School Singapore 对一条昵称为“Schroeder”的鲸鲨鱼加了标签,并使用 GPS 设备跟踪这条鲨鱼在数个月内从印度洋游往非洲大陆的过程。感兴趣的查看者可以通过 Google 地球查看研究论坛网站上发布的 KMZ 文件,其中包含 Schroeder 的游动过程。
在此 KML 文件中,红色路径显示 Schroeder 与鲨鱼群失去联系之前的旅程。黄点(地标图标)根据屏幕顶部显示的时间轴沿着此路径进行动画展示。蓝色箭头是地面叠加层的一部分,显示波型的方向。研究人员相信 Schroeder 突然改变方向是受到了波型的影响,波型指示浮游生物的流动方向,而浮游生物是 Schroeder 的主要营养源。
在此示例中,点地标包含 <TimeStamp> 元素。红色 LineString 和蓝色 GroundOverlay 没有与时间元素相关联(它们始终出现)。
whale_shark.kml(经 German European School Singapore 的 Seeadlerpost 小组的许可使用)时间跨度
要显示立即转换的多边形和图像叠加层,您可以使用 TimeSpan 对象指定时间段的开始和结束。此技术通常用于显示地面叠加层等多边形和图片中的变化,例如显示冰河消退的路径,火山灰烬的弥漫以及多年来伐木作业的范围。
当给定时间内只有一个地图项可见,并且您想从一张图片立即转换到另一张图片时,可以使用 TimeSpan。请确保 TimeSpan 连续且不重叠。对于具有 TimeSpan 的数据集,Google 地球用户界面时间滑块包含一个指针,该指针可沿时间滑块平缓地从时间段开头移到结尾。从一个地图项到下一个地图项的转换过程是即时的。
布莱恩·福拉多 (Brian Flood) 创建了一个有趣的 KML 演示,展示了美国随更多州加入联盟而不断成长的历程。此处显示的 KML 文件只使用了包含起点的 TimeSpan 对象,因此州(多边形)在添加后便处于显示状态。
us_states.kml(经布莱恩·福拉多 (Brian Flood) 的许可使用)动画展示模型
另一个使用 TimeSpan 元素的示例是由詹姆士 斯坦福 (James Stafford) 创建的伦敦眼动画。此处显示的是使用伦敦眼巨大观览车的模型。一系列地标均引用此模型,其中每个地标对模型使用不同的增量旋转,以及用于指示相应地标的显示时长的 TimeSpan。
london_eye.kmz(经詹姆士·斯坦福 (James Stafford) 的许可使用)如何指定时间
dateTime 是根据 XML 架构时间定义的(参见 XML 架构第二部分:数据类型第二版)。该值可以表示为“yyyy-mm-dd”T“hh:mm:ss”zzzzzz,其中 T 是日期和时间之间的分隔符,时区是 Z(适用于世界协调时间)或 zzzzzz,后者表示相对于世界协调时间 ±hh:mm。此外,该值可只表示为日期。有关示例,请参见KML 2.2参考中的 <TimeStamp> 元素。
使用 AbstractView 指定时间
Google 地球5.0支持包含 <gx:TimeSpan>
和 <gx:TimeStamp>
元素的 Google 扩展元素命名空间。这些是 <TimeSpan>
和 <TimeStamp>
元素的副本,可用于向 <LookAt>
和 <Camera>
元素添加时间信息。
在 AbstractView 中包含时间信息会对显示的地图项、光照和历史图像产生影响。在 AbstractView 内使用 <gx:TimeSpan>
或 <gx:TimeStamp>
可以在 Google 地球中跨空间和时间飞到特定地点。
指定时间后,Google 地球会在决定显示哪些图像、地图项和光照时继续使用该时间,直到指定其他时间为止。KML 不支持“现在”概念,所以要返回 Google 地球中的当前时间,您应在 <gx:TimeStamp>
内指定 <when>2999</when>
(或未来的其他任何日期)。
使用 Google 扩展元素命名空间中的元素时,您必须先将正确的命名空间 URI 添加到您的 KML 文件中开放的 <kml>
元素:
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
请注意,某些地理浏览器可能不支持具有 gx 前缀的扩展元素命名空间。Google 地球5.0支持此类命名空间。
示例
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 元素显示地标沿路径的移动。由于已对 TimeStamp 进行了紧密采样,因此当播放 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>
隐藏动画的子元素
通常,在此类示例中,可在文档中包含 ListStyle 元素,并指定 checkHideChildren
以便列表视图中不出现单个地标。以下代码包含此附加元素。请注意,虽然文档定义了 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 图片,因此您可以播放该动画并观看四季间该景观的变化。以下是显示一年头三个月的代码摘录:
<?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>
以下是该示例的屏幕截图: