构建大型KML文件

问题描述 投票:3回答:2

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

我正在寻找将单个KML文件分解为多个文件,根据分组进行分区,因此我没有一个包含文件夹的大文档,而是有一个根/索引KML文件,文件夹链接到较小的KML文件。

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

kml partitioning google-earth kmz
2个回答
1
投票

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

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

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

•图标样式,地面叠加层和屏幕叠加层中的图标使用的图像文件 •元素中使用的模型文件 •由Network Link加载的KML或KMZ文件

不,你不能引用kmz内的另一个文件。 kmz只能包含1 kml文件(它可以包含其他类型的文件)你可以找到kmz文件的布局以及可能放在其中的内容here具体说明以下部分:

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

最后一句话是,如果您需要这些50.000个地标作为脱机文件,那么您的问题不会告诉任何内容。如果您可以动态地为它们提供服务,您可以使用基于区域的链接,GE将告诉您客户端的查看区域,这样您就可以返回一小部分路径点(只有用户视图中的路径点)更多信息this是点击链接。


9
投票

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

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

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

  1. NetworkLinks
  2. Regions
  3. 文件夹无线电样式或显式可见性= 0

NetworkLink一起

您可以从根KML文件中将任何级别的NetworkLinks从平面(具有Networklinks的单个KML文件到KMZ中的所有其他KML文件)深入(每个KML文件带有NetworkLink到其他KML文件,每个文件都有自己的NetworkLink) 。取决于您需要如何构建KML以及数据的大小。

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

这是一个包含4个文件条目的KMZ示例:根KML文件(doc.kml),其中包含NetworkLink到“kml / sub1.kml”,另一个包含“kml / sub2.kml”,后者又有一个NetworkLink到“sub3”。 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>元素,包括该集合功能的全部时间,否则Google地球将自动加载整个文件启动。

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

地区

Region会影响地标的几何图形或叠加图像的可见性。与NetworkLinks结合使用的区域可以访问KML文件中的大量数据。区域可以可选地具有用于高度水平过滤的最小和最大高度。

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

无线电文件夹

您可以使用radio folders进一步限制在给定时间显示的内容。

这是一个无线电文件夹示例,允许用户一次只选择一个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>
© www.soinside.com 2019 - 2024. All rights reserved.