到期

默认情况下,数据只会通过链接加载到 Google 地球中一次。为避免 KML 数据过时,您可以针对由 <href> 元素(在 Link 元素或 Icon 元素中)加载的任何数据将 refreshMode 指定为 onExpire。默认情况下,HTTP 到期标头会指定到期时间。现在,您还可以在 KML 的 NetworkLinkControl 中指定到期时间。该时间以 XML dateTime 形式表示(参见 XML 架构第二部分:数据类型第二版)。如果同时指定了 HTTP 标头和 KML 到期时间,则 KML 到期时间的优先级更高。

示例1:使用 HTTP 服务器到期时间示例

该示例仅用于演示。示例中显示了一个带有图标的 GroundOverlay,该图标会将 refreshMode 设置为 onExpire。由于未设置 KML 到期时间,因此该示例会使用 HTTP 服务器到期时间。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>refreshMode onExpire</name>
<Snippet maxLines="10">
Image automatically reloads according to http
server expiration.
</Snippet>
<GroundOverlay>
<Icon>
<href>http://www.someserver.com/image.jpeg</href>
<refreshMode>onExpire</refreshMode>
</Icon>
<LatLonBox>
<!-- from edit session in earth -->
<!-- The roof of a building in the Presidio -->
<north>37.80385180177469</north>
<east>-122.4558710620651</east>
<south>37.80337403503347</south>
<west>-122.4564295653771</west>
</LatLonBox>
</GroundOverlay>
</Document>
</kml>

示例2:使用 KML 到期时间示例

以下示例在随机选择的坐标位置提供地标。该示例包含一个 refreshMode 为 onExpire 的 Link。在这种情况下,到期日期/时间是由新的 KML <expires> 元素指定的(在 Python 脚本中提供)。该 KML 到期时间优先于 HTTP 标头中可能已指定的任何时间。

以下 KML NetworkLink 包含具有 <href> 和 <refreshMode> 元素的 Link:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<NetworkLink>
<Link>
<href>http://dev.someserver.com/cgi-bin/expires.py</href>
<refreshMode>onExpire</refreshMode>
</Link>
</NetworkLink>
</Document>
</kml>

以下 Python 脚本将到期时间设置为 [当前时间 + 11秒],并刷新地标的坐标:

#!/usr/bin/python

import random
import time
lat = random.random() * 180. - 90.
lon = random.random() * 360. - 180.
now = time.time()
future = time.gmtime(now + 11)
y = future[0]
mo = future[1]
d = future[2]
h = future[3]
mi = future[4]
s = future[5]
iso8601 = '%04d-%02d-%02dT%02d:%02d:%02dZ' % (y,mo,d,h,mi,s)
print 'Content-type: application/vnd.google-earth.kml+xml'
print
print '<?xml version=\"1.0\" encoding=\"UTF-8\"?>'
print '<kml xmlns=\"http://www.opengis.net/kml/2.2\">'
# must be child of <kml>
print '<NetworkLinkControl>'
print '<expires>%s</expires>' % iso8601
print '</NetworkLinkControl>'
print '<Placemark>'
print '<name>placemark expires %s</name>' % iso8601
print '<Point>'
print '<coordinates>%f,%f,0</coordinates>' % (lon,lat)
print '</Point>'
print '</Placemark>'
print '</kml>'

返回页首