2016-06-19 6 views
0

GPXファイルをC#データテーブルにインポートする方法があるかどうか、誰かに教えていただきます。 私はそれを何度も見つけましたが無駄でした。GPXファイルからC#でデータテーブルを作成する

+0

どのような種類のデータベースを作成したいのですか、SQLですか? – galacticfan

+0

これはデータベースではなく、**これらのデータを使用してシェイプファイルを作成するためにデータテーブルにデータを挿入するだけです** – geocoder

答えて

1

これにアプローチする1つの方法は、XMLをオブジェクトにデシリアライズして、望みどおりにナビゲートして使用できるオブジェクトにすることです。

<gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" creator="Oregon 400t" version="1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd"> 
    <metadata> 
    <link href="http://www.garmin.com"> 
     <text>Garmin International</text> 
    </link> 
    <time>2009-10-17T22:58:43Z</time> 
    </metadata> 
    <trk> 
    <name>Example GPX Document</name> 
    <trkseg> 
     <trkpt lat="47.644548" lon="-122.326897"> 
     <ele>4.46</ele> 
     <time>2009-10-17T18:37:26Z</time> 
     </trkpt> 
     <trkpt lat="47.644548" lon="-122.326897"> 
     <ele>4.94</ele> 
     <time>2009-10-17T18:37:31Z</time> 
     </trkpt> 
     <trkpt lat="47.644548" lon="-122.326897"> 
     <ele>6.87</ele> 
     <time>2009-10-17T18:37:34Z</time> 
     </trkpt> 
    </trkseg> 
    </trk> 
</gpx> 

あなたがXMLのデシリアライゼーションのために使用することができ、いくつかのカスタムクラスを作成することができます。:

[Serializable()] 
[System.Xml.Serialization.XmlRoot("gpx")] 
public class gpx { 
    [System.Xml.Serialization.XmlElement("metadata")] 
    public Metadata mData { get; set; } 

    [System.Xml.Serialization.XmlElement("trk")] 
    public TrackCollection tCollection { get; set; } 
} 

[Serializable()] 
public class Metadata { 
    /// Fill in metadata elements here 
} 

[Serializable()] 
public class TrackCollection { 
    [System.Xml.Serialization.XmlElement("name")] 
    public string name { get; set; } 

    [XmlArray("trkseg")] 
    [XmlArrayItem("trkpt", typeof(TrackPart))] 
    public TrackPart[] tPart { get; set; } 
} 

[Serializable()] 
public class TrackPart { 
    [System.Xml.Serialization.XmlElementAttribute("lat")] 
    public double lattitude { get; set; } 
    [System.Xml.Serialization.XmlElementAttribute("lon")] 
    public double longitude { get; set; } 

    [System.Xml.Serialization.XmlElement("ele")] 
    public int elapsed { get; set; } 

    [System.Xml.Serialization.XmlElement("time")] 
    public DateTime dateTime { get; set; } 
} 

Iの避難所」を例としてGarmin Oregon 400Tから生成されたXMLデータを使用して

この例をダブルチェックすると慎重に使用してください。代わりに、.NET XML Readerライブラリを使用して、各オブジェクトのプロパティを手動で設定することもできます。

XML herehereのデシリアライズの詳細についても読むことができます。

次に、新しく作成されたオブジェクトを使用してDataTableを入力するケースに過ぎません。 DataTableの入力方法は次のとおりです。

gpx myObject = deserialseGPXFile(); // example 
DataTable table = new DataTable(); 

table.Columns.Add("lat", typeof(double)); 
table.Columns.Add("lon", typeof(double)); 

foreach (TrackPart tPart in myObject.TrackCollection) 
{ 
    table.Rows.Add(tPart.lattitude, tPart.longitude); 
} 
+0

ありがとうございます。しかし、抽出されたデータを使用してデータテーブルを作成する方法はまだ分かりません。 – geocoder

+0

@geocoder私は例で私の答えを更新しました。 – galacticfan

+0

ありがとう、私はそれをテストします – geocoder

関連する問題