4

我生成可能有 50,000 个或更多地标的 KML 文件,这些文件根据特定于域的分组排列在文件夹中。KML 文件使用打包到 KMZ 文件中的自定义图像。

我希望将单个 KML 文件分解为多个文件,并根据分组进行分区,因此我将拥有一个根/索引 KML 文件,其中包含链接到较小 KML 文件的文件夹,而不是 1 个带有文件夹的大文档。

这可能吗?我认为一个 KMZ 文件在 zip 中只能包含 1 个 KML 文件,无论它位于何处或名称如何。此外,我不确定 KML 文件如何链接到另一个 KML 文件。将其作为<NetworkLink>本地文件的唯一方法是什么?可以<NetworkLink>链接到同一 KMZ 中的本地文件吗?

4

2 回答 2

11

根据设计,您可以在单个 KMZ 文件中包含多个 KML 文件。这样,您可以将多个 KML 文件捆绑在一个 KMZ 文件中,该文件可以下载、通过电子邮件发送或离线访问。

如果要素被拆分为多个 KML 文件并且 KML 被定义为不会同时显示所有子 KML 文件,则Google 地球可以扩展到单个 KMZ 文件中的大量要素(50,000 或更多)。KML 提供了使用时间、区域或海拔级别过滤来控制显示哪些要素或子 KML 文件的机制。

大型 KML 文件可以使用以下任何技术进行缩放:

  1. 网络链接
  2. 地区
  3. 文件夹单选样式或显式可见性=0
  4. 每个特征的点数和几何简化

网络链接

您可以在根 KML 文件中拥有任何级别的网络链接,从平面(具有网络链接的单个 KML 文件到 KMZ 中的所有其他 KML 文件)到深度(每个 KML 文件都有一个 NetworkLink 到其他 KML 文件,每个文件都有自己的 NetworkLink) . 取决于您需要如何构建 KML 以及数据有多大。

关键是 Google 地球选择第一个 KML 作为根 KML 文件,因此您必须确保第一个文件(通常命名为 doc.kml)是通过网络链接加载其他 KML 文件的根 KML 文件。一种常见的结构是在“kml”子文件夹中包含其他 KML 文件,以将其与根 KML 文件区分开来。

这是一个包含 4 个文件条目的 KMZ 示例:根 KML 文件 (doc.kml),其中包含一个指向“kml/sub1.kml”的 NetworkLink 另一个指向“ kml/sub2.kml ”,后者又具有一个指向“ sub3.x”的 NetworkLink。 kml ”也在“kml”子文件夹中。

== test.kmz ==

+doc.kml
   NetworkLink > kml/sub1.kml
   NetworkLink > kml/sub2.kml
+kml/sub1.kml
+kml/sub2.kml
   NetworkLink > sub3.kml
+kml/sub3.kml

这是这样一个doc.kml文件的结构:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document>
    <NetworkLink>
        <name>NetworkLinked sub-item</name>
        <Link>
          <href> kml/sub1.kml </href>
        </Link>
    </NetworkLink>
    <NetworkLink>
        <name>NetworkLinked sub-item</name>
        <Link>
          <href> kml/sub2.kml </href>
        </Link>
    </NetworkLink>
    ...
  </Document>
</kml>

如果您在父 KML 文件中包含多个具有基于时间的功能的 NetworkLink,则最佳做法是<TimeSpan>向 NetworkLink 添加一个元素,包括该功能集合的完整时间范围,否则 Google 地球将在启动时自动加载整个文件.

<NetworkLink>
  <TimeSpan>
    <begin>2007-01-14T01:00:00Z</begin>
    <end>2007-01-14T02:00:00Z</end>
  </TimeSpan>
  <Link>
    <href>...</href>
  </Link>
</NetworkLink>

地区

区域 会影响地标几何图形或覆盖图图像的可见性。区域与 NetworkLink 相结合,可以访问 KML 文件中的大量数据。区域可以选择具有用于高度级别过滤的最小和最大高度。

有关更多详细信息,请参阅 KML 中的区域教程
https://developers.google.com/kml/documentation/regions

收音机文件夹

您可以使用单选文件夹进一步限制在给定时间显示的内容。

这是一个单选文件夹示例,允许用户一次只选择一个 NetworkLink。当内容互斥并且在任何给定时间只应出现一组功能时使用此选项。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
    <Document>
        <Style id="rf">
            <ListStyle>
                <listItemType>radioFolder</listItemType>
            </ListStyle>
        </Style>
        
        <Folder>        
            <name>One at a time example</name>
            <open>1</open>
            <description>Link 1 visible by default</description>
            <styleUrl>#rf</styleUrl>
            
            <NetworkLink>
                <name>NetworkLinked sub-item-1</name>
                <Link>
                    <href> kml/sub1.kml </href>
                </Link>
            </NetworkLink>
            
            <NetworkLink>
                <name>NetworkLinked sub-item-2</name>
                <visibility>0</visibility>
                <Link>
                    <href> kml/sub2.kml </href>
                </Link>
            </NetworkLink>
            
        </Folder>
    </Document>
</kml>

每个特征的点数和几何简化

KML 文件的大小和要素数量并不是唯一需要考虑的问题。具有 350K 点和 7000 个内孔的单个高分辨率多边形的 KML 文件可能会导致 Google 地球性能问题。这种几何形状需要简化并减少点的数量。您可以使用QGIS打开 KML 文件,然后在多边形上应用简化算法。在 QGIS 中,选择 Vector menu -> Geometry tools -> Simplify 然后保存结果。

于 2012-10-12T03:16:57.957 回答
1

是的,您可以使用网络链接来完成此操作,据我所知,这是完成您所要求的唯一方法。是的,您可以在网络链接中引用本地文件

请参阅:http ://code.google.com/intl/nl-NL/apis/kml/documentation/kml_tut.html (搜索“网络链接”),其中显示:

网络链接包含一个带有(超文本引用)加载文件的元素。可以是本地文件规范或绝对 URL。尽管有这个名字,<NetworkLink> 并不一定要从网络加载文件。链接中的 <href> 指定以下任何内容的位置:

• 图标样式、地面覆盖和屏幕覆盖中的图标使用的图像文件
• 元素中使用的模型文件
• 网络链接加载的 KML 或 KMZ 文件

不,您不能引用 kmz 中的另一个文件。一个 kmz 只能包含 1 个 kml 文件(但它可以包含其他类型的文件)您可以在此处找到 kmz 文件的布局以及可能放入其中的内容特别注意以下部分:

2. 将默认 KML 文件(doc.kml,或您想给它的任何名称)放在此文件夹的顶层。仅包含一个 .kml 文件。(当 Google 地球打开 KMZ 文件时,它会扫描该文件,查找此列表中的第一个 .kml 文件。它会忽略存档中的所有后续 .kml 文件(如果有)。如果存档包含多个 .kml 文件,您不能确定哪个会先找到,所以你只需要包括一个。)

最后一点是,如果您需要将这 50.000 个地标作为离线文件,您的问题并不能说明任何问题。如果您可以动态地为它们提供服务,您可以使用基于区域的链接,GE 将在该链接中告诉您客户端的查看区域,以便您可以返回一小部分航路点(仅在用户视图内的航路点)有关更多信息,这是要点击的链接。

于 2011-09-16T23:49:02.717 回答