Устаревание данных

По умолчанию данные загружаются по ссылкам в Google Планету Земля только один раз. Чтобы предотвратить устаревание данных, загруженных с помощью тега <href> (внутри элемента Link или Icon) используется атрибут refreshMode элемента onExpire. По умолчанию время устаревания указывается в соответствующих HTTP-заголовках, но его также можно определить с помощью элемента expires компонента NetworkLinkControl. Время записывается в XML-формате dateTime (см. документ Схема XML, ч. 2. Типы данных, вторая редакция). Если время устаревания задано как в HTTP-заголовках, так и в 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>
<!-- На основе сеанса редактирования в Планете Земля -->
<!-- Крыша здания в 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. В данном случае дата и время устаревания данных определяются элементом KML <expires> (с помощью скрипта Python). Заданное таким образом время устаревания имеет приоритет перед информацией, которая передается в HTTP-заголовках.

Ниже показан KML-код для компонента NetworkLink с элементом <Link>, содержащим <href> и <refreshMode>.

<?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\">'
# дочерний элемент <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>'

Наверх