我生成的KML文件可能包含50,000个或更多地点,根据特定于域的分组排列在文件夹中。 KML文件使用打包到KMZ文件中的自定义图像。
我正在寻找将单个KML文件分解为多个文件,根据分组进行分区,因此我没有一个包含文件夹的大文档,而是有一个根/索引KML文件,文件夹链接到较小的文件夹KML文件。
这可能吗?我认为KMZ文件在zip中只能包含1个KML文件,无论它位于何处或其名称。此外,我不确定KML文件如何链接到另一个KML文件。是将它作为<NetworkLink>
本地文件的唯一方法吗? <NetworkLink>
可以链接到同一个KMZ中的本地文件吗?
答案 0 :(得分:9)
按照设计,您可以在一个KMZ文件中包含多个KML文件。这样,您就可以将许多KML文件捆绑在单个KMZ文件中,该文件通过电子邮件发送或离线访问。
如果将功能拆分为多个KML文件并定义KML使得所有子设备都可以在单个KMZ文件中扩展到大量功能(50,000或更大) -KML文件不会立即显示。 KML提供了使用时间,区域或高度级别过滤来控制显示哪些要素或子KML文件的机制。
大型KML文件可以使用以下任何技术进行扩展:
<强> 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}}是点击的链接。