2011-09-15 109 views
3

我生成的KML文件可能包含50,000個地標或更多,它們基於特定於域的分組排列在文件夾中。 KML文件使用打包到KMZ文件中的自定義圖像。構建大型KML文件

我正在尋找分解單個KML文件到多個文件,基於分組進行分區,因此,而不是有1個大文件與文件夾,我會有一個根/索引KML文件與文件夾鏈接到較小的KML文件。

雖然這可能嗎?我認爲KMZ文件只能包含1個KML文件,無論它位於何處或其名稱位於zip中。此外,我不確定KML文件如何鏈接到另一個KML文件。將其作爲<NetworkLink>添加到本地文件的唯一方法是? <NetworkLink>可以鏈接到同一KMZ中的本地文件嗎?

回答

1

是的,你可以使用網絡鏈接來實現這一點,並據我所知,這是做你要求的唯一方法。是的,你可以參考本地文件的網絡鏈接

見:http://code.google.com/intl/nl-NL/apis/kml/documentation/kml_tut.html(搜索「網絡鏈接」),它說:

網絡鏈接中包含有(超文本 參考)一個元素加載一個文件。可以是本地文件 規範或絕對URL。儘管名稱不同,<NetworkLink> 不一定會從網絡加載文件。在 鏈接的<HREF>指定的以下任一位置:

•圖標樣式,地面覆蓋所用圖標的圖像文件,並且屏幕疊加
•模型文件中的元素使用
•由網絡鏈接加載的KML或KMZ文件

否您不能在kmz內引用另一個文件。爲KMZ只能包含1個KML文件(它可以包含其他類型的文件雖然)你可以找到的KMZ文件的佈局和可放在他們here特別注意以下部分:

2.Put的默認的KML文件(doc.kml,或任何你想給它的名字 它)在這個文件夾的頂層。只包含一個.kml文件。 (當谷歌地球打開KMZ文件時,它會掃描該文件,尋找 此列表中的第一個.KML文件,它會忽略所有後續.KML 文件,如果有的話,在歸檔中。如果壓縮文件包含多個.KML 文件,你不能確定哪一個將被首先發現的,所以你需要 唯一一個包括。)

最後再說一句的是,如果你需要這些50.000標爲脫機您的問題不說什麼或不是。如果你能爲他們服務動態,你可以使用基於區域的聯繫,其中GE會告訴你客戶端的觀看區域,所以你可以返回航點(只有那些其內部的用戶觀看)的一小部分欲瞭解更多信息this是點擊鏈接。

+0

謝謝艾迪。意圖是讓所有東西都離線 –

+1

上面的語句「A kmz只能包含1 kml文件」是不正確的。問題是,這沒有清楚地記錄在任何地方。 – JasonM1

9

通過設計,您可以在一個KMZ文件中包含多個KML文件。這樣,您可以將許多KML文件捆綁到一個KMZ文件中,該KMZ文件可以通過電子郵件發送或脫機訪問。

如果要素被拆分爲多個KML文件,並且定義了KML以使所有子KML文件都可以在一個KMZ文件中擴展爲大量的功能(50,000或更大)不會立即顯示。 KML提供了使用時間,地區或高度級別過濾來控制顯示哪些功能或子KML文件的機制。

大型KML文件可以擴展使用任何下列技術:

  1. NetworkLinks
  2. Regions
  3. 文件夾收音機的風格或顯式可視性= 0

NetworkLink一起

您可以將任何級別的NetworkLinks從您的根KML文件中的平面(單個KML文件與Networklinks到KMZ中的所有其他KML文件)深入到一起(每個KML文件都帶有一個NetworkLink到其他每個KML文件都帶有自己的NetworkLink )。取決於您需要如何構建KML以及數據量有多大。

關鍵在於Google地球選擇第一個KML作爲根KML文件,因此您必須確保第一個文件(通常名爲doc.kml)是通過網絡鏈接加載其他KML文件的根KML文件。一個常見的結構是在「kml」子文件夾中包含額外的KML文件,以將其與根KML文件區分開來。

這裏的一個KMZ例如用4文件條目:根KML文件包含一個網絡鏈接(對於doc.kml)爲 「KML/sub1.kml」,另一個爲 「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文件基於時間的功能最佳實踐在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> 

地區

一個Region 影響地標幾何或重疊的圖像的可見性。與NetworkLinks結合使用的區域可以訪問KML文件中的海量數據。一個地區可以選擇有高度水平過濾的最小和最大高度。

有關詳細信息,這裏的一對地區的教程在KML
https://developers.google.com/kml/documentation/regions

廣播文件夾

可以進一步限制什麼用radio folders在給定時間顯示。

下面是一個radio文件夾示例,允許用戶一次只選擇一個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>