2015-03-02 42 views
3

我正在編寫一些代碼來輸出KML文件,並在ExtendedData節點中存儲了某些特定於應用程序的信息。作爲調試KML有效性的一種簡單方法,我使用Google地球時啓用了「顯示所有錯誤提示」選項(http://screencast.com/t/UDkJc6Nv5G4)。將自定義數據存儲在KML ExtendedData中

我試圖寫ExtendedData爲無類型的任意標籤,如記錄在KML參考下namespace_prefix:其他(參見:https://developers.google.com/kml/documentation/kmlreference?csw=1#extendeddata)的問題是,即使我複製他們的示例代碼精確,谷歌地球抱怨一個未知的元素:http://screencast.com/t/bCMgaDiDYdWt

下面是完整的KML:

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2"> 
<Document> 
    <name>Sample KML.kml</name> 
    <Placemark> 
     <name>Test KML</name> 
     <Point> 
      <coordinates>-118.405022621,33.943893977,0</coordinates> 
     </Point> 
     <ExtendedData xmlns:prefix="camp"> 
      <camp:number>14</camp:number> 
      <camp:parkingSpaces>2</camp:parkingSpaces> 
      <camp:tentSites>4</camp:tentSites> 
     </ExtendedData> 
    </Placemark> 
</Document> 
</kml> 

我知道有其他辦法包括專用數據(即<數據>,<SchemaData>等) - 但對於這個問題,我他們很想知道爲什麼谷歌自己的軟件報告這是無效的,直接來自他們自己的例子。我是否遺漏了KML中的其他內容,還是我誤解了文檔?

回答

4

該示例是正確的。但是,當在Google地球中啓用「顯示提示所有錯誤」選項時,擴展數據的任意名稱空間始終顯示爲錯誤。

這是2009年報告的問題,但尚未修復。 https://code.google.com/p/earth-issues/issues/detail?id=438

對擴展數據使用任意名稱空間是由KML 2.2規範定義的KML的有效用法,因此它不是真正的錯誤。 Google地球只是報告說,它不知道如何處理該元素,這是正確的,因爲adding arbitrary XML data to a Feature Google地球會保留這些數據但不處理它。應該將而不是報告爲錯誤。

下面是一個在KML中使用真實名稱空間擴展數據的示例。本例使用都柏林核心命名空間元數據,以KML: https://productforums.google.com/d/msg/maps/8pbTmPIbj18/J_w2mjRWyQoJ

如果要驗證任意命名空間中的KML不能使用谷歌地球的驗證。您需要一個支持XML Schema的驗證器,例如獨立註釋行工具XmlValidate。有關Google Earth驗證的進一步討論,請參閱here

+0

非常好,謝謝你的信息。這個問題在五年前被報道過,但這個問題仍然沒有得到解決。我想現在假設它永遠不會是安全的。恥辱,因爲通過在Google Earth中打開它(無需互聯網連接)就能夠驗證KML,這絕對是更加方便的。儘管謝謝你的徹底答案! :) – Metal450 2015-03-17 06:06:01

1

我剛剛得到了這一點 - upvotes的問題和答案。但我確實想補充說,您複製的XML在技術上不正確。你從有你的:

https://developers.google.com/kml/documentation/kmlreference#extendeddata

,而更好的解釋和正確的XML位於:

https://developers.google.com/kml/documentation/extendeddata

如上所述 - 它不會與這些錯誤的幫助。如果您的版本完全適用,那是因爲您直接使用了命名空間,而不是前綴。

這裏是從第二站點的例子:

<ExtendedData xmlns:camp="http://campsites.com"> 
    <camp:number>14</camp:number> 
    <camp:parkingSpaces>2</camp:parkingSpaces> 
    <camp:tentSites>4</camp:tentSites> 
</ExtendedData> 

注意「前綴」是符合實際的前綴(「營」)取代,並且命名空間用來定義前綴,但是,這不是」使用。

只是2c。

+0

我同意@GerardONeill。我觀察到來自Google地球的相同錯誤,即使使用了第二個站點的正確示例。 – 2017-02-02 23:06:01

相關問題