2016-06-19 10 views
0

Ich werde dankbar sein, dass mir jemand sagt, ob es eine Möglichkeit gibt, eine GPX-Datei in eine C# -Datatable zu importieren. Ich googelte es oft, aber vergebens.Füllen Sie die Datentabelle in C# aus der GPX-Datei

+0

Welche Art von Datenbank suchen Sie zu füllen, SQL? – galacticfan

+0

Es ist keine Datenbank, ich möchte nur ** eine Datentabelle füllen **, um diese Daten zu verwenden, um ein Shapefile zu erstellen – geocoder

Antwort

1

Eine Möglichkeit, dies zu erreichen, wäre die XML-Deserialisierung in ein Objekt, das Sie dann navigieren und verwenden können, wie Sie es wünschen.

Unter Verwendung der generierten XML-Daten aus einem Garmin Oregon 400T als Beispiel:

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

Sie konnten einige benutzerdefinierte Klassen erstellen, die für Deserialisation der XML verwendet werden könnten:

[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 haven‘ t Überprüfen Sie dieses Beispiel, also verwenden Sie es bitte mit Vorsicht. Sie können alternativ die .NET XML Reader-Bibliotheken verwenden und jede der Objekteigenschaften manuell festlegen.

Sie können auch mehr über Deserialisierung von XML here und here lesen.

Dann ist es nur ein Fall der Verwendung Ihres neu erstellten Objekts, um Ihre DataTable zu füllen. Es liegt Ihnen, wie Sie füllen Ihre DataTable, aber man könnte zum Beispiel so tun:

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

Danke, aber ich verstehe immer noch nicht, wie man eine Datentabelle mit den extrahierten Daten bevölkert. – geocoder

+0

@geocoder Ich habe meine Antwort mit einem Beispiel aktualisiert. – galacticfan

+0

Danke, ich werde es testen – geocoder

Verwandte Themen