KML可扩展性:用KML绘制成千上万的GPS点

时间:2014-03-26 14:52:49

标签: gps kml google-earth

我有一个相当大的KML文件,其中75000 GPS修复程序为KML Placemark,并且在Google地球中显示该程序后,该程序基本上停止工作/变得反应迟钝或痛苦地缓慢。我希望一次最多可以修复50万个修复。

KML文件看起来像这样(遵循https://developers.google.com/kml/documentation/time#example1的样式):

    ...
    <Folder>
        <name>2014-03-17T08:47:15+01:00 to 2014-03-26T13:59:49+01:00</name>
        <Placemark>
            <TimeStamp>
                <when>2014-03-17T08:47:15+01:00</when>
            </TimeStamp>
            <styleUrl>#MarkerStyle</styleUrl>
            <Point>
                <coordinates>10.198022417724133,60.01997647900134</coordinates>
            </Point>
        </Placemark>
        <Placemark>
            <TimeStamp>
                <when>2014-03-17T08:47:16+01:00</when>
            </TimeStamp>
            <styleUrl>#MarkerStyle</styleUrl>
            <Point>
                <coordinates>10.19811805523932,60.020018765702844</coordinates>
            </Point>
        </Placemark>
        ...

我的问题是:是否有更有效地显示此跟踪的KML功能?我不能只使用Path,因为我需要动画的时间信息。

或者,是否有更好的工具可以显示随时间变化的大型GPS迹线?

谢谢!

3 个答案:

答案 0 :(得分:2)

有效扩展大型KML文件的大量功能的关键是使用NetworkLinksRegions以及一组较小的KML文件。嵌套深度取决于特征的数量。

您可能无法在Google地球中同时显示50万个地标而无需重组KML。您可以将数据分解为段并一次显示一个子集。更先进的是创建热图,如超特征,代表100或1000个附近点,给定区域中的点数具有给定颜色。缩放到一个给定的区域可以加载&#34; raw&#34;使用NetworkLinks和Regions结合使用该区域的点。

以下是discussion,当KML文件中有大量功能同时加载时,会显示Google地球中KML的问题。

您可能需要解析KML文件或更好地使用原始数据来重新生成一系列具有适当数据分组的新KML文件。

数据是基于时间的,所以如果数据具有相对正常的分布点数&#34;每个时间间隔,您可以根据时间间隔将KML文件分成几组,以便将10-50K位置添加到每个KML文件中。如果数据覆盖了大的地理区域,那么您可以将数据分解为区域中的常规间隔单元格和/或时间。

主根KML文件将具有一系列NetworkLink并引用每个子文件。要防止Google地球一次性加载所有文件,您需要在每个NetworkLink上设置TimeSpan,并在根KML文件中的最外层文档上设置较小的初始间隔。

根KML看起来像这样:

<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
    <name>Parent Document</name>
    <open>1</open>
    <!-- use interval for first time span as initial period to load -->
    <TimeSpan>
            <begin>2012-08-12T01:00:00Z</begin>
            <end>2012-08-12T01:59:59Z</end>
    </TimeSpan>

    <NetworkLink>
      <name>Group #1</name>
      <TimeSpan>
            <begin>2012-08-12T01:00:00Z</begin>
            <end>2012-08-12T01:59:59Z</end>
      </TimeSpan>
      <Link>
        <href>group_0100.kml</href>
      </Link>
    </NetworkLink>

    <NetworkLink>
      <name>Group #2</name>
      <TimeSpan>
            <begin>2012-08-12T02:00:00Z</begin>
            <end>2012-08-12T02:59:59Z</end>
      </TimeSpan>
      <Link>
        <href>group_0200.kml</href>
      </Link>
    </NetworkLink>
    ...
</Document>
</kml>

为了保持一致性,组kml文件应具有与父KML文件中NetworkLink中定义的跨度相匹配的相同时间跨度。

<kml xmlns="http://www.opengis.net/kml/2.2">
 <Document>
  <name>Group #1</name>
  <TimeSpan>
        <begin>2012-08-12T01:00:00Z</begin>
        <end>2012-08-12T01:59:59Z</end>
  </TimeSpan>

  <Placemark>
      <TimeStamp>
        <when>2012-08-12T01:00:00Z</begin>
      </TimeStamp>
  </Placemark>
  ...
 </Document>
</kml>

答案 1 :(得分:1)

重新考虑您的方法,通常只将一天车辆的位置导出/显示为kml。

Kml不适合海量数据显示。

答案 2 :(得分:0)

我最终使用了Google扩展程序gx:Trackgx:MultiTrack,其中每个gx:MultiTrack自行放入Placemark,每天拆分。如果每个地标的visibility被停用,那么Google地球可以整齐地处理数百万个积分,如果您不立即全部展示它们。