KMZ-архивы

Что такое KMZ-файл?

В KMZ-файл входит основной KML-файл и, как правило, связанные с ним ресурсы, сжатые с помощью архиватора в единый архив. KMZ-архив можно хранить на диске или отправлять по почте как единый файл. По сетевой ссылке KMZ-файл можно получить с веб-сервера. Перед сжатием основной KML-документ и связанные с ним ресурсы представляют с собой отдельные файлы с собственными именами и расширениями, организованные по каталогам. Формат KMZ служит не только для архивирования, но и для сжатия, поэтому в архив можно включить только один большой KML-файл. Размер файла обычно удается сократить в десять раз (в зависимости от содержания). Таким образом, KML-файл размером 10 КБ можно превратить в KMZ-файл размером 1 КБ.

Google Планета Земля и Google Карты распознают форматы KML и KMZ, а также поддерживают сохранение KMZ-файлов. По умолчанию основному KML-файлу присваивается имя doc.kml.

Примечание. Для ясности мы также будем называть основной KML-файл в KMZ-архиве doc.kml. В реальности он может называться как угодно, главное – он должен иметь расширение KML и быть единым KML-файлом в архиве.

Если размер файла doc.kml превышает 10 КБ или если в нем содержатся ссылки на другие ресурсы (картинки, звуковые фрагменты, модели или текстуры), необходимо создать KMZ-архив.

Рекомендуемая структура каталогов

В этом разделе содержится несколько советов по созданию KML- и KMZ-файлов. Пример, который мы используем, заимствован с сайта Джимми Баффета, где формат KML используется для отображения гастрольных маршрутов и связанной с ними информации в Google Планете Земля.

Загрузите KMZ-файл с информацией об этом турне (используется с разрешения владельца).

Примечание. Чтобы относительные ссылки на KMZ-файлы правильно обрабатывались Google Планетой Земля 6.0, необходимо соблюсти все приведенные ниже инструкции (обратите особое внимание на пункт 4). В более ранних версиях геобраузера правила обработки относительных ссылок были менее строги, поэтому некоторые ссылки, которые работали в Google Планете Земля до версии 5.2 включительно, могут не работать в версии 6.0 и более поздних.

Чтобы создать KMZ-файл, выполните указанные ниже действия.

  1. Создайте папку с файлами, которые требуется включить в KMZ-архив, и присвойте ей описательное имя (например, buffetthawaiitour).
  2. Поместите в корень этой папки KML-файл (который мы для простоты называем doc.kml). KLM-файл должен быть всего один. Когда KMZ-архив открывается в Google Планете Земля, используется только первый найденный KLM-файл, а все остальные игнорируются. Таким образом, если в архив включено несколько KML-файлов, сложно предугадать, какой из них будет найдет первым.)
  3. Добавьте на корневой уровень одну или несколько папок с картинками, моделями, текстурами, звуковыми файлами и другими ресурсами, ссылки на которые есть в файле doc.kml. Количество подпапок и их структура зависит от того, сколько у вас дополнительных файлов и как вы предпочитаете их упорядочить.
  4. Указывайте относительные ссылки. (Подробные сведения приведены в разделе Ссылки на внешние файлы.) Пути всех относительных ссылок начинаются с корневой папки, описанной в пункте 1. Например, если KMZ-файл vacationJournal.kmz сохранен на рабочем столе, а в doc.kml есть ссылка на файл myFavoritePlace.jpg, который также находится на рабочем столе, ссылка <href> в файле doc.kml имеет вид ../myFavoritePlace.jpg.
  5. Не присваивайте расширение KMZ папкам внутри KMZ-файла; оно зарезервировано для самого архива.

В примере ниже показана структура папок в KMZ-архиве гастрольного тура Джимми Баффета.

Так как дополнительных файлов всего пять, все они объединены в подпапку files. Если загрузить файл в Google Планету Земля, а затем скопировать и вставить его содержание в текстовый редактор, будет видно, что во всех элементах <href> используются относительные ссылки на дополнительные ресурсы (значки, наложения на экране, звуковые файлы).

Так выглядит KML-код ссылки на один из значков:

<IconStyle>
  <scale>1.1</scale>
  <Icon>
    <href>files/icon_surfing.png</href>
  </Icon>
</IconStyle>

А это – KML-код ссылки на звуковой файл:

<gx:SoundCue>
  <href>files/Margaritaville.mp3</href>
</gx:SoundCue>

Ссылки на внешние файлы

В файле doc.kml обычно содержатся ссылки на другие файлы: картинки, значки, модели, текстуры и звуковые фрагменты. Они включаются в атрибут href (или в элемент <href>), который может находиться внутри следующих элементов KML:

Ссылки на внешние файлы могут быть абсолютными или относительными – этому посвящен следующий раздел. Они могут указывать на файлы внутри того же KMZ-архива, внутри других KMZ-архивов или на внешних веб-серверах. Относительные ссылки всегда определяются исходя из расположения файла doc.kml, как описано в разделе Обработка относительных ссылок. Исключением является только <sourceHref> внутри элемента <Model>.

Абсолютные и относительные ссылки

Абсолютная ссылка содержит URL файла целиком. Такие ссылки однозначны и, как правило, указывают на файлы, которые хранятся на внешних серверах. Абсолютная ссылка на локально сохраненный файл перестанет работать после того, как он будет перемещен в другую систему. Чтобы этого избежать, рекомендуется пользоваться относительными ссылками.

Ниже приведен пример абсолютной ссылки на файл, хранящийся на внешнем сервере.

<Icon>
  <href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
</Icon>

Обработка относительных ссылок

Относительные ссылки обрабатываются исходя из расположения файла doc.kml, т. е. любой относительный путь начинается в корневой папке KMZ-архива. В примере выше основной URL имеет следующий вид (он может отличаться в зависимости от того, откуда вы загрузили KMZ-архив):

buffetthawaiitour.kmz

Чтобы сослаться на файл, находящийся в другом KMZ-архиве (например, images/jimmyphoto.jpg в margaritavillealbum.kmz) используется обозначение "..", соответствующее переходу на один уровень вверх (выходу из текущего KMZ-архива (buffetthawaiitour.kmz).

<href>../margaritavillealbum.kmz/images/jimmyphoto.jpg"</href>

Примечание. Правила обработки относительных ссылок в KMZ-архиве основаны на требованиях стандарта RFC 3986 (Раздел 5). Основной URL определяется расположением файла doc.kml, а все относительные URL обрабатываются на его основе.

Исключение: <sourceHref> внутри элемента <Model>

Элемент <Model> включает элемент <Link>, указывающий на файл COLLADA, который необходимо загрузить в Google Планету Земля. Файлы COLLADA содержат трехмерные модели и имеют расширение DAE. Элемент <Model> также включает элемент <Alias>, который связывает <targetHref> (файл текстуры, передаваемый в Google Планету Земля) и <sourceHref> (путь к файлу текстуры внутри DAE-файла). Если в элементе <sourceHref> указана относительная ссылка, Google Планета Земля обрабатывает ее на основе расположения DAE-файла, а не doc.kml, как это происходит во всех остальных случаях. Рассмотрим пример.

<Model>
.
.
.
  <Link>
    <href>MackyBldg.kmz/files/CU Macky.dae</href>
  </Link>
  <ResourceMap>
    <Alias>
      <sourceHref>../files/StairsnoCulling.jpg</sourceHref>
      <targetHref>../files/StairsnoCulling.jpg</targetHref>
    </Alias>
    <Alias>
      <sourceHref>../files/sideturretnoCulling.jpg</sourceHref>
      <targetHref>../files/sideturretnoCulling.jpg</targetHref>
	</Alias>
.
.
.
</Model>

Создание KMZ-архива

Чтобы создать ZIP-архив, воспользуйтесь приложением Windows Explorer или Mac Finder. Выделите содержание папки, в которой расположен файл doc.kml и связанные с ним ресурсы, и нажмите WinZip > Добавить в ZIP-файл. Библиотека Java в формате JAR также содержит ZIP-библиотеку для создания и извлечения ZIP-архивов, а в Linux предусмотрены соответствующие инструкции командной строки.

Примечание. При создании ZIP-архива необходимо выделить содержание папки с файлом doc.kml, а не саму папку.

Измените расширение созданного архива с ZIP на KMZ. Если потребуется извлечь файлы, достаточно снова изменить расширение на ZIP, после чего можно будет воспользоваться стандартной программой для распаковки ZIP-архивов.

KMZ-архивы в Google Планете Земля

Использование элемента <iframe>

Большинство HTML-элементов во всплывающих окнах с описанием в KML обрабатывается в Google Планете Земля точно так же, как в стандартных веб-браузерах. Тем не менее, если в <description> включен элемент <iframe>, он обрабатывается как обычный HTML, т. е. специальные функции KML не поддерживаются. Например, в <iframe> не будут распознаны ресурсы KMZ-архива и ссылки на другие разделы того же файла, такие как <a href="#my feature;flyto">. Элемент <src> внутри <iframe> не может указывать ни на локально сохраненный файл, ни на файл внутри KMZ-архива. Он должен содержать внешний URL, доступный браузеру.