KMZ 文件

什么是 KMZ 文件?

KMZ 文件包含主 KML 文件以及0个或多个用 ZIP 格式打包成一个单元的支持文件(称为归档)。然后,KMZ 文件就可以作为单个实体进行存储和通过电子邮件发送。NetworkLink 可从网络服务器提取 KMZ 文件。将 KMZ 文件解压缩后,主 .kml 文件及其支持文件便分离成其各自的原始格式和目录结构,以及原始文件名和扩展名。除了变成归档格式外,ZIP 格式也会受到压缩,因此归档只能包含一个大型 KML 文件。根据 KML 文件的内容,此过程通常会产生10:1的压缩。10千字节的 KML 文件可以用1千字节的 KMZ 文件来提供。

Google 地球和 Google 地图可以直接读取 KML 和 KMZ 文件,并可将文件保存为 KMZ 格式。默认情况下,主 KML 文件名为 doc.kml。

请注意:为明确起见,本页将 KMZ 归档中的主 KML 文件称为 doc.kml。主 KML 文件可以具有任意名称,只要该文件名以 .kml 结尾,并且只有一个 .kml 文件即可。

如果您的 doc.kml 文件大于10千字节,或者 doc.kml 文件引用了其他文件(图片、声音文件、模型、纹理),那么您应创建 KMZ 文件。

推荐的目录结构

本部分为 KML/KMZ 文件的创建者提供了一些简单推荐。本部分中使用的示例来自吉米·巴菲特 (Jimmy Buffett) 网站,该网站使用 KML 格式显示计划的巡回演唱会,并在 Google 地球上突出显示了相关位置。

下载包含此巡回演出的 KMZ 文件(经许可使用)。

请注意:Google 地球6.0在解析 KMZ 文件中的相对引用时会严格遵循以下准则(具体请参见以下列表中的第4项)。早期版本的 Google 地球在如何解析此类相对引用方面并没有这么严格。因此,Google 地球5.2及更低版本中使用的某些相对引用现在可能需要先进行修改,然后才能在版本6.0及更高版本中使用。

请在创建 KMZ 文件时遵循以下准则:

  1. 创建要包含 KMZ 文件内容的文件夹。为该文件夹提供一个描述性名称(例如 buffetthawaiitour)。
  2. 将默认 KML 文件(doc.kml 或您想要为该文件提供的任何名称)放在此文件夹的顶层。仅包含一个 .kml 文件(Google 地球在打开 KMZ 文件时会对文件进行扫描,搜寻此列表中的第一个 .kml 文件。Google 地球会忽略归档中第一个文件之后的所有 .kml 文件(如果有的话)。如果该归档包含多个 .kml 文件,那么您就无法确定会首先找到哪个文件,因此需要只加入一个文件)。
  3. 在主文件夹中加入一个或多个子文件夹,以收集图片、模型、纹理、声音文件或 doc.kml 文件中引用的其他资源。此目录结构的复杂程度取决于支持文件的数量以及您对组织结构的偏好设置。
  4. 使用相对引用。 有关详情,请参见对外部文件的引用。所有相对路径都从上面第1项中描述的根文件夹中开始。例如,如果 KMZ 文件 vacationJournal.kmz 位于桌面上,并且其 doc.kml 文件引用同样位于桌面上的文件 myFavoritePlace.jpg,那么 doc.kml 文件中的 <href> 就是 ../myFavoritePlace.jpg
  5. 请勿对 KMZ 文件中的任何子文件夹使用 .kmz 扩展名。.kmz 扩展名是为归档本身的名称保留的。

例如,以下是吉米·巴菲特 (Jimmy Buffett) 巡回演出的 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 文件中包含的文件,或者存储在网络上其他位置的文件。除了 <Model> 中的 <sourceHref> 元素以外,相对引用总是相对于 doc.kml 文件进行解析(如解析相对引用部分所述)。

绝对引用与相对引用

绝对引用包含链接文件的完整网址。它们对于发布在中央服务器上的文件非常有用,而且指向明确。但是,如果您对本地文件使用绝对引用,那么相应文件移动到新系统后,此类链接就会断开。相对引用可以避免这个问题。

以下是对存储在中央服务器上的文件进行绝对引用的一个示例:

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

解析相对引用

通常,相对引用是相对于 doc.kml 文件进行解析的。任何相对网址都是针对包含此文件的目录进行解析的,该目录被视为 KMZ 文件的根目录。在夏威夷巡回演出的示例中,基本网址与以下内容类似(具体情况取决于您下载 KMZ 文件的位置):

buffetthawaiitour.kmz

如果您想引用其他 KMZ 文件中的文件(例如,要引用 margaritavillealbum.kmz 中包含的 images/jimmyphoto.jpg,您需要使用“..”表示法在目录结构中提高一个层级,这会将您转出当前 KMZ 文件 (buffetthawaiitour.kmz):

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

请注意:KMZ 归档中相对引用的解析规则以用于解析网址的RFC 3986第5节标准为基础。基本网址由 doc.kml 文件的位置确定,而且所有相对网址都是相对于该基本网址进行解析的。

例外情况:<Model> 中的 <sourceHref>

<Model> 元素包含一个 <Link> 元素,该 <Link> 元素用于指定要加载到 Google 地球中的 collada 文件。collada 文件可指定3D对象,具有 .dae 文件扩展名。<Model> 元素还包含 <Alias> 元素,而 <Alias> 元素包含 <targetHref>(Google 地球要抓取的纹理文件)和 <sourceHref>(COLLADA.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 归档

使用 Windows Explorer 或 Mac Finder 创建 ZIP 归档。请选择包含 doc.kml 文件和相关资源的文件夹中的内容,然后选择一个选项,例如“WinZip > 添加到 Zip 文件…”。 Java JAR 库也包含可供用户通过编程方式创建和提取 ZIP 归档的 ZIP 库,而 Linux 则有可用于压缩和解压缩的命令行。

请注意:创建 ZIP 归档时,请务必选择包含 doc.kml 文件的文件夹中的内容,而不是该文件夹本身。

归档创建完成后,请将 .zip 文件扩展名更改为 .kmz。要从归档中提取文件,请将 .kmz 文件扩展名恢复为 .zip,然后用 ZIP 格式对归档进行解压缩。

Google 地球和 KMZ 归档

<iframe> 元素的用法

在 KML <description> 提示框中,Google 地球处理大多数 HTML 元素的方式与标准网络浏览器处理此类元素的方式相同。但是,说明提示框中的 <iframe> 被视为标准 HTML,这表示特殊 KML 地图项无法被识别。例如,<iframe> 无法显示 KMZ 资源,而且无法识别 <a href="#my feature;flyto"> 等本地锚链接。<iframe> 元素中的 <src> 元素不得指向磁盘上的本地文件和 KMZ 文件中的文件;它必须指向浏览器可访问的互联网上的网址。