Оглавление
- Введение
- Временные отметки и данные GPS
- Временные интервалы
- Анимация моделей
- Формат времени
- Временные данные в AbstractView Новый раздел
- Пример: движение точки по траектории
- Скрытие дочерних элементов анимации
- Пример: анимация наложения на земную поверхность
Введение
С любым компонентом KML можно связать временные данные, которые ограничивают отображение определенных сведений заданным интервалом или моментом. Хотя при передаче KML-файла в интерфейс Google Планеты Земля загружаются сразу все данные, то, какие из них показываются в определенные моменты, определяется с помощью ползунка времени.
В KML предусмотрены два элемента, связанные со временем (оба основаны на TimePrimitive):
- TimeStamp – определяет момент времени;
- TimeSpan – определяет интервал, ограниченный моментами начала (<begin>) и окончания (<end>).
В пространстве имен Google эти элементы имеют следующий вид:
- gx:TimeStamp
- gx:TimeSpan
В такой форме их можно включать в <AbstractView> в качестве дочерних элементов. Подробные сведения приведены в разделе Временные данные в AbstractViews ниже.
Когда в Google Планете Земля открывается KML-файл, содержащий компонент с элементом TimePrimitive, на экране появляется ползунок времени (моменты начала и окончания определяются записями о самом раннем и самым позднем времени, обнаруженными в компонентах KML в этом файле). Использование ползунка и кнопки воспроизведения позволяет просмотреть всю последовательность или отдельные интервалы.
Чтобы включить ползунок времени в Google Планете Земля, откройте меню "Вид > Показывать время" и выберите Автоматически или Всегда. По умолчанию установлено значение Автоматически. В примерах ниже предполагается, что флажок "Ограничить время выбранной в данный момент папкой" снят (по умолчанию он установлен).
Временные отметки и данные GPS
Временная отметка (элемент TimeStamp), как правило, связана с меткой. Последовательное отображение метки в каждой точке траектории создает эффект анимации. Этот способ может пригодиться при отображении данных, импортированных с GPS-устройства. Для лучшего эффекта задайте равные интервалы между временными отметками.
Временные отметки обычно используются в небольших наборах данных, которые необходимо отображать в разных местоположениях (например, при движении метки по траектории). Как правило, в этом случае несколько компонентов одновременно находятся в области просмотра и отображаются в разных местах в разное время. Ползунок времени в Google Планете Земля содержит окно, в котором можно выбрать определенный интервал и воспроизвести его с начала до конца.
Именно этой техникой воспользовались исследователи из сингапурской школы GESS. Они прикрепили к телу белой акулы (которую ласково назвали Шредером) GPS-датчик и несколько месяцев следили за ее перемещениями в водах Индийского океана. Информация о путешествии Шредера содержатся в KMZ-файлах, которые можно загрузить с сайта исследовательской группы и открыть в Google Планете Земля.
В этом KML-файле движение Шредера обозначено красной линией (до тех пор, пока исследовательская группа не потеряла сигнал). Желтые точки (значки меток) поочередно отображаются на траектории в соответствии с временной шкалой вверху экрана. Синие стрелки – это наложение на земную поверхность. Они указывают направление движения волн. Исследователи считают, что Шредер внезапно изменил направление именно из-за волн, которые отнесли планктон – его основную пищу.
В этом примере метки содержат элементы <TimeStamp>. Красная линия (LineString) и синие стрелки (GroundOverlay) отображаются всегда, поэтому с ними не связаны данные времени.
whale_shark.kml (используется с разрешения исследовательской команды школы GESS)Временные интервалы
Можно запрограммировать переходы изображений (многоугольников и графических наложений), определив для них время начала и окончания с помощью объекта TimeSpan. Этот способ обычно используется для демонстрации изменений во времени, например сокращения ледяного покрова, распространения вулканического пепла или вырубки лесов.
Временные интервалы (элементы TimeSpan) применяются, когда в области просмотра присутствует только один компонент и необходимо реализовать переход от одного изображения к другому. Следите за тем, чтобы временные интервалы были непрерывны и не перекрывались. Для наборов данных с элементами TimeSpan на ползунке времени предусмотрен указатель, который плавно движется от начала к концу временного интервала. Переходы от одного компонента к другому выполняются моментально.
Брайан Флад создал интересную KML-презентацию, показывающую присоединение новых штатов к Союзу во время Гражданской войны 1861–1865 годов. В представленном файле объекты TimeSpan содержат только моменты начала; таким образом, добавленный штат (многоугольник) остается на карте до конца презентации.
us_states.kml (используется с разрешения Брайана Флада)Анимация моделей
Другой пример использования элемента TimeSpan – анимация "Лондонского глаза", созданная Джеймсом Стэффордом, в которой участвует трехмерная модель гигантского колеса обозрения. Ссылки на модель содержатся в целом ряде меток, в каждой из которых запрограммирован незначительный поворот, а временной интервал указывает, как долго следует отображать каждую метку.
london_eye.kmz (используется с разрешения Джеймса Стэффорда)Формат времени
Формат времени dateTime основан на формате, который принят в схеме XML. Подробные сведения приведены в документе Схема XML, часть 2: типы данных (второе издание). Значение можно записать как гггг-мм-ддTчч:мм:ссzzzzzz, где T – отделитель между датой и временем, а часовой пояс обозначается как Z (в случае UTC) или как zzzzzz, что представляет смещение относительно UTC. Кроме того, можно указать только дату (без времени). Примеры приведены в описании элемента <TimeStamp> в Справке по KML 2.2.
Временные данные в AbstractView
Google Планета Земля 5.0 поддерживает пространство имен расширений Google, включая элементы <gx:TimeSpan>
и <gx:TimeStamp>
. Это дубликаты <TimeSpan>
и <TimeStamp>
, которые можно использовать для добавления временных данных в элементы <LookAt>
и <Camera>
.
Добавление временных данных в элементы AbstractView влияет на отображаемые компоненты, солнечный свет и исторические изображения. Использование <gx:TimeSpan>
или <gx:TimeStamp>
в AbstractView позволяет перемещаться в заданное место и время в Google Планете Земля.
Если задано время, Google Планета Земля учитывает его при выборе исторических изображений, компонентов и солнечного света для отображения, пока не будет указано другое время. В KML не поддерживается понятие "сейчас", поэтому, чтобы вернуться к текущему времени в Google Планете Земля, необходимо указать в элементе <gx:TimeStamp>
значение <when>2999</when>
(или любую другую дату в будущем).
Чтобы использовать элементы пространства имен расширений Google, добавьте в открывающий тег <kml>
KML-файла нужный URI пространства имен:
<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) используется для изображения движения метки по траектории. Во время воспроизведения 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"> <!-- определяет стиль документа -->
<ListStyle>
<listItemType>checkHideChildren</listItemType>
</ListStyle>
</Style>
<styleUrl>#check-hide-children</styleUrl> <!-- добавляет стиль в документ -->
<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-файле содержатся изображения наложений, отвечающие каждому месяцу, поэтому при воспроизведении анимации можно видеть, как местность меняется со приходом каждого времени года. Ниже показан фрагмент кода для января, февраля и марта.
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <!-- с элементами GroundOverlay рекомендуется использовать TimeSpan -->
<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>
А так выглядит скриншот для этого кода: