我必须编写一个工具来将我们的网络地图导出为KML,因为许多用户需要这样做,最初我们使用的服务版本只是向服务器发出图像请求,但我们的用户需要下载实际的矢量。
因此,我们最终得到了包含超过3万个地标的20mb +的KML文件,google earth根本无法处理它,它在任何一台计算机中都完全无法使用。
在将其作为矢量数据(我们的服务地图的硬拷贝本地副本)维护时,我能做些什么吗?
答案 0 :(得分:1)
具有30,000个地标的KML文件通常不会太大,Google地球无法处理。例如,此tool生成一个KMZ文件,其中包含多达25,000个地标用于测试。在Google地球中使用多达100,000个地标创建的KML文件仍然可以轻松降低性能。您的一个KML文件样本和/或其中的一个名义示例可以帮助您确定您所看到的主要问题。无论如何,在KML的设计中可以采用许多技术来扩展到大数。
如果将功能拆分为多个KML文件并且定义了KML使得所有子KML文件都不是KML,则Google地球可以扩展为大量功能(50,000或更大)立即显示。 KML提供了使用时间,区域或高度级别过滤来控制显示哪些要素或子KML文件的机制。
大型KML文件可以使用以下任何技术进行扩展:
<强> NetworkLink一起强>
NetworkLink使用相对文件引用或绝对URL提供对另一个KML文件的引用。您可以将根KML文件中的任何级别的NetworkLink从平面(具有许多网络链接的单个KML文件到所有其他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 “,又在”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>
<强>地区强>
Region会影响地标的几何图形或叠加图像的可见性。区域与NetworkLinks相结合,可以访问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>