KML 常见问题解答


什么是 KML?

KML 是一种文件格式,用于在地球浏览器(例如 Google 地球、Google 地图和 Google 地图移动版)中显示地理数据。您可以创建 KML 文件以精确定位地点,添加图像叠加层并以各种全新方式展示丰富数据。KML 是由开放地理空间联盟(Open Geospatial Consortium, Inc.,简称 OGC)维护的国际标准。

哪些人使用 KML?

KML 社区广泛多样,正如您在访问 Google 地球社区论坛时看到的一样。临时用户创建 KML 文件来标记家庭住址、记录行程、计划跨国徒步游览和骑车探险。科学家使用 KML 来提供资源、模型和趋势(例如,火山爆发、天气形势、地震活动和矿藏)的详细绘图。房地产专业人员、建筑师和城市开发代理商使用 KML 对建筑提出建议并直观展示方案。学生和教师使用 KML 研究古今人物、地点和事件。《国家地理》杂志社、联合国教科文组织和史密森尼博物馆等组织都使用 KML 来展示所收集的大量全球数据。

如何创建 KML 文件?

有三种主要工具可创建 KML 文件。

  • Google 地球。这是用来创建 KML 文件的最重要工具。使用 Google 地球,您可以创建
    • 地标
    • 路径
    • 多边形
    • 图像叠加层
    • 网络链接
    • 位置模型
    • 以上所有对象的文件夹
    • PhotoOverlay
  • 创建了其中一个对象后,在“位置”面板中右键点击该对象,并选择“复制”。然后,您可以将该对象粘贴到文本编辑器或 XML 编辑器,开始对其进行编辑。

  • 文本编辑器。在 Google 地球中创建对象后,将其粘贴到文本编辑器,开始对其进行编辑。
  • XML 编辑器。KML 是一种用于描述地理内容的 XML 语言。XML 编辑器是个奇妙的文本编辑器,它提供了许多用于创建 XML 文档的工具,例如可确保您用正确的闭合标签闭合 KML 元素的标签完成程序。

还有许多由 Google 地球社区中的用户创建的工具。查看 KML 开发者支持 Google 网上论坛。

如何打开 KMZ 文件?

KMZ 文件是可在 Google 地球中查看的一个或多个文件的压缩集。这些文件使用 ZIP 格式压缩,并可使用任何常用 ZIP 工具打开,例如“WinZip”、“7-Zip”或 Windows 的默认 Windows XP 压缩文件夹工具、Mac OS 的“Stuffit”、Mac OS 或 Linux 的“ZIP”。您可能需要将文件扩展名从 .kmz 改为 .zip,这样 ZIP 工具才能识别该文件。再次使用该文件之前,请记得将文件扩展名改回 .kmz。

如何为天文学数据创建 KML?

KML 可以用于表示天文学数据,并可加载到 Google 星空或 Microsoft 的世界望远镜。有关详情,请查看 KML 中的星空数据一文。

Google 地球支持哪些 KML 标签?

Google 地球支持所有 KML 标签。有关所有标签的列表,请参见 KML 规范

Google 地图支持哪些 KML 标签?

Google 地图支持 KML 标签的子集。请点击此处查看列表。

在哪里可以找到《开发者指南》?

《开发者指南》位于 https://developers.google.com/kml/documentation/topicsinkml.html


为什么我的线会消失?

LineString 设有 clampToGround 时,就一定会沿着球体曲线绘制。不过,如果设为“relativeToGround”,您可能需要添加更多的点,否则它会穿过球体或地形以直线路径画出更长的线。

例如,该 LineString 会穿过地球,彻底消失:

<kml xmlns="http://www.opengis.net/kml/2.2">
  <Placemark>
    <name>Untitled Path</name>
    <LineString>
      <tessellate>0</tessellate>
      <altitudeMode>absolute</altitudeMode>
      <coordinates>-115.415105,40.669016 -37.752364,34.879979</coordinates>
    </LineString>
  </Placemark>
</kml>

添加更多的点会减少位于地下的线的数量。<tessellate> 的值应该也是“1”,以确保线沿着地形绘制。

<Placemark>
  <name>Untitled Path</name>
  <LineString>
    <tessellate>1</tessellate>
    <altitudeMode>relativeToGround</altitudeMode>
    <coordinates>
      -134.148103,37.752967 -128.917074,38.803008
      -125.166954,39.583592 -122.137625,39.656880
      -120.421783,40.036311 -118.298157,40.235316
      -114.348386,40.631532 -112.670431,40.761033
      -111.916045,40.681939 -110.177711,40.653055
      -109.544331,40.619327 -107.155697,40.642007
      -105.410526,40.421505 -103.192299,40.430138
      -102.853712,40.427904 -98.168302,40.363524
      -97.093391,40.308754 -94.831304,40.479175
      -93.760070,40.395392 -84.913828,39.466651
      -84.414888,39.387332 -81.380660,39.188551
      -80.276261,38.977744 -77.811560,38.872542
      -75.062267,38.521146 -72.006956,38.101733
      -66.67819,37.664687
    </coordinates>
  </LineString>
</Placemark>
能否在 KML 内画圆圈?

KML 中没有圆圈几何图形,但您可以使用具有许多紧密坐标的 LineString 来创建非常类似于圆圈的图形。下面提供了一个示例

能否将 LineString 改为虚线或带箭头?

<LineStyle> 可让您更改线的颜色、透明度和尺寸。但是,目前不支持在 KML 中更改线的类型。

如何隐藏地标的标签?

在 Google 地球中,地标旁边显示的标签取决于 <name> 元素。将 LabelStyle 中的 scale 元素设置为0,即可隐藏该标签。

<Style id="hideLabel">
  <LabelStyle>
    <scale>0</scale>
  </LabelStyle>
</Style>
为什么会收到解析错误?

导致解析错误的主要原因有两个:

  1. 字母大小写问题:KML 与所有 XML 语言一样,是区分大小写的。它要求所有元素名称的大小写均正确无误。例如:应使用 <Placemark>、<href>、<Link>,而非 <PLACEMARK>、<Href>、<lInk>
  2. 标签不完整:各元素必须以相同的标签开始和结束。有时人们会忘记闭合标签,或遗漏了尖括号(< 或 >)

    例如:
    <name>Atlanta</name> 是正确的
    <name>Atlanta 是错误的
    <nameAtlanta</name> 是错误的
    <nameAtlanta<name> 是错误的
如何知道自己编写的 KML 文件是否为有效的 KML 文件?

KML 是一种 XML 标记语言。您可以用以下某种方法进行验证:

  • 您可以获取 XML 编辑器(例如 OxygenNetbeans),并使用这些编辑器来验证文档。用您选择的 XML 编辑器检查文档。进行验证还需要使用 KML 架构
  • 您可以使用在线验证程序(例如 FeedValidator.org 或 Galdos 的 KML 验证程序)进行检查,这些验证程序会显示您的所有错误并提供一些样式建议。
  • 您可以使用某些文本编辑器来验证 XML。例如,您可以使用 jEdit 验证 KML。请通过 Google 地球推广小组查看该教程
是否有方法控制屏幕上的显示内容,以便用户离地球表面越近,看到的细节越多?

区域标签用于控制您要向用户显示哪些地图项。要了解有关区域的详情,请参见以下最佳资源:

能否为 MultiGeometry 元素中的不同几何图形指定不同的颜色/样式?

MultiGeometry 元素将几何图形分组集中在同一个 Placemark 元素中。这可让几何图形共享相同的样式设置,并在列表(例如 Google 地球中的“我的位置”面板)中显示为一个项。

样式可在地标级别使用 styleUrl 元素或 Style 元素进行设置。因此,该地标内的单个几何图形不能具有不同的样式。

常用的方法是为每个几何图形创建单独的地标,从而为每个几何图形设置不同的样式。为防止列表中的项扩散,将这些项放入具有 ListStyle(包含 listItemType 和 checkHideChildren)的 Folder 中。例如,在 Google 地球中,此方法会将所有地标放在“我的位置”的同一 folder 元素中,从而防止用户在打开时看到大量元素。


打开 KML 文件时能否打开提示框?

目前,KML 不支持在打开 KML 文件时打开提示框。不过,如果您使用了地图项锚点,则可以在将打开第二个 KML 文件的提示框中创建链接或创建其他提示框。

NetworkLink 刷新时能否一直开启提示框?

目前,KML 不支持 NetworkLink 刷新时仍保留提示框状态。

能否查看我的用户创建的 KML?

目前,您不能使用 NetworkLink 捕捉用户在 Google 地球或 Google 地图中创建的 KML。但您可以将 Earth API 或 Google Maps API 用作 KML 创建工具并将该信息捕捉回服务器。有关示例,请访问 GeoDataStore

能否从 KML 中控制时间滑块?

具有 TimeStamp 或 TimeSpan 元素的 KML 文件打开时,KML 中的时间滑块就会立即打开。时间滑块会查找所有当前选定的 TimeStamp 和 TimeSpan 元素,并进行调整以显示所有日期。目前,KML 不支持对时间滑块进行更多控制(例如设置当前选定的时间或选择显示的时间范围)。有关使用时间滑块的详情,请查看时间和动画一文。

如何构建与 KML 的交互操作?能否将表单放入 KML 说明提示框的 HTML 中?

目前,Google 地球的 KML 只支持说明演示(而非互动)的 HTML 子集。带有表单的 KML 可在 Google 地图内使用。

但是,您可以在 Google 地球使用的 KML 内构建 Flash 表单。要执行此操作,请将 Flash 应用嵌入 KML 说明提示框内的 HTML。上述方法不适用于 Google 地图。


能否从电子表格自动创建 KML?

下面是执行此操作的几个基本方法。

  • 您可以自己以编程方式执行此操作,使用自己的应用解析 CSV 文件并根据它创建 KML。有关示例,请查看将 CSV 文件转换为 KML
  • 使用在线电子表格。例如,Google 地球推广小组根据 Google 电子表格创建了电子表格制图程序
  • 将某个 Excel 应用到 KML 创建工具,例如 [link to tek's thread] 这个工具
  • 使用 Google 地球增强版或专业版加载文件,然后将文件另存为 KML 或 KMZ 文件
为什么 KML 文件没有从我的网络服务器正确下载?

您需要告知网络服务器它们所提供的文件的类型。某些浏览器(例如 Firefox)会猜测文件类型。其他浏览器(例如 Internet Explorer)则依赖网络服务器的 MIME 类型设置进行判断。

对于 Apache 服务器,您需要在 httpd.conf 中加入以下两行:

AddType application/vnd.google-earth.kml+xml .kml
AddType application/vnd.google-earth.kmz .kmz

对于 Microsoft 的 Internet Information Server,您需要遵循以下指示:

IIS 6.0版:

http://support.microsoft.com/kb/326965

IIS 4.0和5.0版:

http://www.microsoft.com/technet/prodtechnol/windows2000serv/technologies/iis/maintain/featusability/mimeiis.mspx

如果您的网络服务器由您自己管理,那么您必须更改自己的配置。否则,请与您的网站托管服务方联系,要求该方做出以上更改。


为什么我的提示框内容显示其使用的图片网址可能格式错误?

Google 地球最近做出一项更改,改变了地图项提示框中内容的链接处理方法,从而使之前未指定的行为变得更加清楚。因此,当用户点击具有无效链接结构的 KMZ 中的链接时,系统将转到一个显示“将您转到此处的链接可能格式错误。请点击以下链接,尝试使用传统模式。”的页面。如果您看到此讯息,应更改 KML/KMZ 内容的结构,以确保能够完全兼容 Google 地球的新版本。

有关详情(包括如何正确重构 KMZ 内容的详情),请参见本文

哪些内容会受到新相对路径规则的影响?

目前,只有地图项提示框内容中的链接(网址的链接)会受到此更改的影响。其中包括 <BallonStyles> 中的 <description> 和 <text> 标签。不过,Google 地球的新版本可能具有更强的一致性,因此应始终避免将父目录用作 KMZ 内容中相对链接的基本网址。


Google 地球的“我的位置”中的 KML 是否会发送到 Google 服务器?

不会。用户在 Google 地球中创建的 KML 或加载到 Google 地球中的 KML 不会发送到 Google。关于该数据的所有处理和存储活动都在本机上完成。

返回页首