Время и анимация

Оглавление

Введение

С любым компонентом 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) отображаются всегда, поэтому с ними не связаны данные времени.

Значок KML whale_shark.kml (используется с разрешения исследовательской команды школы GESS)

Временные интервалы

Можно запрограммировать переходы изображений (многоугольников и графических наложений), определив для них время начала и окончания с помощью объекта TimeSpan. Этот способ обычно используется для демонстрации изменений во времени, например сокращения ледяного покрова, распространения вулканического пепла или вырубки лесов.

Временные интервалы (элементы TimeSpan) применяются, когда в области просмотра присутствует только один компонент и необходимо реализовать переход от одного изображения к другому. Следите за тем, чтобы временные интервалы были непрерывны и не перекрывались. Для наборов данных с элементами TimeSpan на ползунке времени предусмотрен указатель, который плавно движется от начала к концу временного интервала. Переходы от одного компонента к другому выполняются моментально.

Брайан Флад создал интересную KML-презентацию, показывающую присоединение новых штатов к Союзу во время Гражданской войны 1861–1865 годов. В представленном файле объекты TimeSpan содержат только моменты начала; таким образом, добавленный штат (многоугольник) остается на карте до конца презентации.

Значок KML us_states.kml (используется с разрешения Брайана Флада)

Анимация моделей

Другой пример использования элемента TimeSpan – анимация "Лондонского глаза", созданная Джеймсом Стэффордом, в которой участвует трехмерная модель гигантского колеса обозрения. Ссылки на модель содержатся в целом ряде меток, в каждой из которых запрограммирован незначительный поворот, а временной интервал указывает, как долго следует отображать каждую метку.

Значок KML 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 их поддержка предусмотрена).

Пример

Значок KML 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-файла происходит сверка с временными отметками, и значок движется по траектории.

Значок 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>
Значок KML TimeSpan_example.kml (данные предоставлены NASA)

А так выглядит скриншот для этого кода:

Наверх