处理太多数据时如何提高kml性能?

时间:2017-11-30 16:59:56

标签: google-maps kml arcgis-server kmz

我必须编写一个工具来将我们的网络地图导出为KML,因为许多用户需要这样做,最初我们使用的服务版本只是向服务器发出图像请求,但我们的用户需要下载实际的矢量。

因此,我们最终得到了包含超过3万个地标的20mb +的KML文件,google earth根本无法处理它,它在任何一台计算机中都完全无法使用。

在将其作为矢量数据(我们的服务地图的硬拷贝本地副本)维护时,我能做些什么吗?

1 个答案:

答案 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文件可以使用以下任何技术进行扩展:

  1. NetworkLink一起
  2. 地区文件夹
  3. 无线电样式或显式可见性= 0
  4. <强> 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>