2014-03-26 25 views
2

我有一個相當大的KML文件,其中包含75000個GPS修正,作爲KML Placemark s,並且在Google Earth中顯示時,程序基本停止工作/變得無響應或痛苦地緩慢。我想一次繪製50萬個修復程序。KML可伸縮性:在KML中繪製成千上萬個GPS點

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的痕跡?

謝謝!

回答

2

有效擴展大型KML文件的功能的關鍵是使用NetworkLinksRegions以及一系列較小的KML文件。嵌套深度取決於功能的數量。

您不可能一次就在Google地球中顯示50萬個地標而不重構KML。您可以將數據拆分爲段並一次顯示子集。更高級的東西就是創建像特徵一樣的超級特徵,這些超級特徵代表給定區域內點的數量爲100或1000的附近點的給定顏色。放大某個區域可以使用NetworkLinks和Regions的組合來加載該區域的「原始」點。

這是一個discussion,當KML文件中存在大量功能時,它們都會一次加載,從而在Google地球中顯示KML問題。

你可能需要解析KML文件或更好,但使用的原始數據重新生成了一系列新的KML文件與數據的適當分組。

數據是基於時間的,所以如果數據在每個時間間隔內具有相對正常的「點數」分佈,那麼您可以簡單地根據時間間隔將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文件中定義。

<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> 
+0

謝謝你的徹底答案!我會看看它。與此同時,我發現了一個Google專用的KML功能,在我的情況下(gx:MultiTrack和gx:Track)實際上非常有用:http://googlegeodevelopers.blogspot.dk/2010/07/making-tracks-new- kml-extensions-in.html –

+1

gx:Track對於基於時間的特徵非常有用,但繪製超過75K-500K點仍需要對KML結構進行一些預先考慮。 – JasonM1

1

重新思考你的方法,通常只有一天一輛車的位置被導出/顯示爲kml。

Kml不適合海量數據顯示。

+0

感謝您的回答。確實如你所建議的那樣做是有道理的。 –

0

我結束了使用谷歌擴展gx:Trackgx:MultiTrack,其中每個gx:MultiTrack自己被放在一個Placemark,每天拆分。如果禁用每個地標的visibility,則Google地球可以整齊處理數百萬個點,如果您不一次顯示它們。