构建大型KML文件

时间:2011-09-15 17:43:49

标签: kml partitioning google-earth kmz

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

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

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

2 个答案:

答案 0 :(得分:9)

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

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

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

  1. NetworkLinks
  2. Regions
  3. 文件夹收音机样式或显式可见性= 0
  4. <强> NetworkLink一起

    您可以将根KML文件中的任何级别的NetworkLinks从平面(具有Networklinks的单个KML文件到KMZ中的所有其他KML文件)深入(每个带有NetworkLink的KML文件到其他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 “,又在”kml“子文件夹中有一个NetworkLink到” sub3.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,则向NetworkLinks添加<TimeSpan>元素,包括该特征集合的全部时间,否则Google地球将在启动时自动加载整个文件。

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

    <强>地区

    A 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>
    

答案 1 :(得分:1)

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

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

  

网络链接包含带有(超文本)的元素   引用)加载文件。可以是本地文件   规范或绝对URL。尽管有这个名字,但&lt; NetworkLink&gt;   不一定从网络加载文件。 &lt; href&gt;在一个   link指定以下任何位置:

     

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

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

  

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

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