2012-01-11 45 views
2

我試圖在C#中讀取KML文件。我需要閱讀這些信息以獲取信息並對其進行處理。是否有一個庫可以讀取KML以回饋數據結構中的信息?如果不是,您如何閱讀KML文件?它是否像讀取XML文件?在c#項目中讀取kml文件以回饋信息

回答

3

我找到了解決方案。問題是新的XSD文件有多個命名空間,所以要轉換爲使用XSD.EXE我需要兩個文件中的類:atom-author-link.xsdxal.xsd

後,我用XSD.EXE使用此命令行:xsd.exe /c ogckml22.xsd atom-author-link.xsd xal.xsd

最後,我有來自xsd文件的類。

其他信息:

我剛剛發現了這個庫(http://sharpkml.codeplex.com/)讀/寫KML 2.2文件。這是一個更新的libkml

0

Google提供了一個包含KML文件模式的XSD文件,您可以在下面的位置找到它。

http://code.google.com/apis/kml/schema/kml22gx.xsd

下面是KML格式的文檔:

http://code.google.com/apis/kml/documentation/kmlreference.html

你可以使用Microsoft XSD工具來生成從架構類:

http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=VS.100).aspx

+0

但是,我需要一個kml 2.2。我嘗試使用XSD工具在類中轉換xsd,但是出現此錯誤: 模式驗證警告:無se ha聲明爲el elemento'http://www.w3.org/200 5/Atom:author'。 Line 311,position 12. Schema validation warning:No se ha declarado el elemento'http://www.w3.org/200 5/Atom:link'。第312行,第12位。 模式驗證警告:無聲明聲明元素'urn:oasis:名稱:tc:ci q:xsdschema:xAL:2.0:AddressDetails'。行314,位置12. 警告:架構無法驗證。班級生成可能失敗或可能產生錯誤的結果。 – 2012-01-11 16:49:30

+0

我更新了XSD文件的鏈接,但未使用XSD.exe進行驗證。我沒有嘗試過,但有一個庫http://code.google.com/p/kml-library/ – msmucker0527 2012-01-11 18:10:40

2

這是我解析KML文件以獲得座標o的方法f對象:

string elementToFind = "example"; 
System.IO.Stream kmlFile = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("objects.kml"); 
Xml.Linq.XDocument xDoc = System.Xml.Linq.XDocument.Load(kmlFile); 
string xNs = "{" + xDoc.Root.Name.Namespace.ToString() + "}"; 

var coordsStr = 
(from f in xDoc.Descendants(xNs + "Placemark") 
where elementToFind.Contains(f.Parent.Element(xNs + "name").Value + f.Element(xNs + "name").Value) 
select f.Element(xNs + "LineString").Element(xNs + "coordinates")).FirstOrDefault(); 

解析它像一個普通的XML文件搜索您需要的數據。我希望這對你有所幫助。