GPX-Dateien mit C# lesen

Eine GPX-Datei enthält GPS-Daten, die im GPS-Austauschformat gespeichert sind. Es ist ein XML-Schema zur Beschreibung geografischer Informationen wie Wegpunkte, Tracks, Routen usw. Es ermöglicht die Übertragung von GPS-Daten zwischen GPS-Geräten und Softwareanwendungen. Wir können die GPX-Datei einfach laden und GPS-Informationen programmgesteuert in .NET-Anwendungen extrahieren. In diesem Artikel lernen wir, wie man GPX-Dateien mit C# liest.

Der Artikel soll folgende Themen behandeln:

C#-API zum Lesen von GPX-Dateien

Zum Lesen von Merkmalen aus GPX-Dateien verwenden wir die API Aspose.GIS for .NET. Sie können Karten rendern und geografische Daten ohne zusätzliche Software erstellen, lesen und konvertieren. Es ermöglicht Ihnen auch, KML-Dateien in das GPX-Format zu konvertieren und umgekehrt. Bitte downloaden Sie die DLL der API oder installieren Sie sie mit NuGet.

PM> Install-Package Aspose.GIS

Lesen Sie Wegpunkte aus der GPX-Datei in C#

Wir können Wegpunkte aus der GPX-Datei als Punktgeometrie lesen, indem wir die folgenden Schritte ausführen:

  1. Laden Sie zunächst die GPX-Datei mit der Methode OpenLayer.
  2. Überprüfen Sie als Nächstes für jedes Feature im Layer, ob GeometryType gleich Point ist.
  3. Rufen Sie danach die Geometrie des Features als Punkt ab.
  4. Zeigen Sie schließlich die X- und Y-Koordinatenpunkte an.

Das folgende Codebeispiel zeigt, wie Wegpunkte aus einer GPX-Datei mit C# gelesen werden.

// Dieses Codebeispiel zeigt, wie Wegpunkte aus einer GPX-Datei gelesen werden
// Laden Sie die GPX-Datei
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\St_Louis_Zoo_sample.gpx");

foreach (var feature in layer)
{
    // Suchen Sie nach Punktgeometrie
    if (feature.Geometry.GeometryType == GeometryType.Point)
    {
        // Punkte lesen
        Point point = (Point)feature.Geometry;
        Console.WriteLine(point.AsText() + " X: " + point.X + " Y: " + point.Y);
    }
}
POINT (-90.29408 38.63473) X: -90.29408 Y: 38.63473
POINT (-90.28679 38.63368) X: -90.28679 Y: 38.63368
POINT (-90.29323 38.63408) X: -90.29323 Y: 38.63408
POINT (-90.29019 38.63533) X: -90.29019 Y: 38.63533
POINT (-90.28976 38.63677) X: -90.28976 Y: 38.63677
POINT (-90.28948 38.63496) X: -90.28948 Y: 38.63496
POINT (-90.29458 38.63421) X: -90.29458 Y: 38.63421
POINT (-90.29083 38.63633) X: -90.29083 Y: 38.63633
POINT (-90.28715 38.63395) X: -90.28715 Y: 38.63395
POINT (-90.28769 38.63347) X: -90.28769 Y: 38.63347

Lesen Sie Routen aus der GPX-Datei in C#

Wir können Routen aus der GPX-Datei als Line String-Geometrie lesen, indem wir die folgenden Schritte ausführen:

  1. Laden Sie zunächst die GPX-Datei mit der Methode OpenLayer.
  2. Überprüfen Sie als Nächstes für jedes Feature im Layer, ob GeometryType gleich LineString ist.
  3. Rufen Sie danach die Geometrie des Features als LineString ab.
  4. Zeigen Sie schließlich X-, Y- und Z-Koordinatenpunkte an.

Das folgende Codebeispiel zeigt, wie Routen aus einer GPX-Datei mit C# gelesen werden.

// Dieses Codebeispiel zeigt, wie GPS-Routen aus einer GPX-Datei gelesen werden
// Laden Sie die GPX-Datei
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\schiehallion.gpx");

foreach (var feature in layer)
{
    // Suchen Sie nach LineString-Geometrie
    if (feature.Geometry.GeometryType == GeometryType.LineString)
    {
        // Lesen Sie Routen
        LineString ls = (LineString)feature.Geometry;

        foreach (var point in ls)
        {
            Console.WriteLine(" X: " + point.X + " Y: " + point.Y + " Z: " + point.Z);
        }
    }
}
=====================================================
 X: -4.03601769647726 Y: 56.6758328268945 Z: 351.247702398777
 X: -4.03583038137853 Y: 56.6753865835736 Z: 344.690721458414
 X: -4.03614000315429 Y: 56.6735618299578 Z: 349.066837113628
 X: -4.03711323311608 Y: 56.6726922276694 Z: 352.76479861559
 X: -4.03921535478461 Y: 56.6708156570976 Z: 358.078238232484
 X: -4.04184722532733 Y: 56.668930361342 Z: 371.315914270806
 X: -4.04446052766014 Y: 56.668213511889 Z: 372.334546538997
 X: -4.04552528394144 Y: 56.6682858833434 Z: 398.610199355698
 X: -4.04660281552745 Y: 56.6678413316366 Z: 439.24188764472
 X: -4.04765411258453 Y: 56.6661616045966 Z: 430.695575764036
.
.
.

Tracks aus der GPX-Datei in C# extrahieren

Wir können Tracks aus der GPX-Datei als MultiLineString-Geometrie lesen, indem wir die folgenden Schritte ausführen:

  1. Laden Sie zunächst die GPX-Datei mit der Methode OpenLayer.
  2. Überprüfen Sie als Nächstes für jedes Feature im Layer, ob GeometryType gleich MultiLineString ist.
  3. Rufen Sie danach die Geometrie des Features als MultiLineString ab.
  4. Zum Schluss zeigen Sie die Spuren.

Das folgende Codebeispiel zeigt, wie Tracks aus einer GPX-Datei mit C# gelesen werden.

// Dieses Codebeispiel zeigt, wie Tracks aus einer GPX-Datei gelesen werden
// Laden Sie die GPX-Datei
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\nested_data.gpx");

foreach (var feature in layer)
{
    // Suchen Sie nach MultiLineString-Geometrie
    if (feature.Geometry.GeometryType == GeometryType.MultiLineString)
    {
        // Spur lesen
        var lines = (MultiLineString)feature.Geometry;
        foreach(var line in lines)
        {
            Console.WriteLine(line.AsText());
        }
    }
}
LINESTRING (0 0, 1 1, 2 2, 3 3)
LINESTRING EMPTY
LINESTRING EMPTY
LINESTRING (10 10, 11 11, 12 12, 13 13)

Geschachtelte GPX-Attribute in C# lesen

Wir können Merkmale für jeden Punkt im Segment lesen und verschachtelte Attributwerte extrahieren, indem wir die folgenden Schritte ausführen:

  1. Erstellen Sie zunächst eine Instanz der Klasse GpxOptions.
  2. Legen Sie als Nächstes ReadNestedAttributes auf true fest.
  3. Laden Sie dann die GPX-Datei mit der Methode OpenLayer() mit dem GpxOptions-Objekt als Argument.
  4. Überprüfen Sie als Nächstes für jedes Feature im Layer, ob GeometryType gleich MultiLineString ist.
  5. Rufen Sie dann die Geometrie des Features als MultiLineString ab.
  6. Lesen Sie danach das Segment als LineString aus jedem MultiLineString.
  7. Lesen Sie schließlich Punkte im Segment und zeigen Sie die Attributwerte an.

Das folgende Codebeispiel zeigt, wie Sie mit C# verschachtelte GPX-Attribute aus einer GPX-Datei lesen.

// Dieses Codebeispiel zeigt, wie verschachtelte GPX-Attribute aus der GPX-Datei gelesen werden
// Geben Sie die GPX-Option an
GpxOptions options = new GpxOptions()
{
    ReadNestedAttributes = true
};


// Laden Sie die GPX-Datei und öffnen Sie den Layer, um Features zu lesen
using (var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\nested_data.gpx", options))
{
    foreach (var feature in layer)
    {
        // Suchen Sie nach MultiLineString-Geometrie
        if (feature.Geometry.GeometryType == GeometryType.MultiLineString)
        {
            // Segment lesen
            var lines = (MultiLineString) feature.Geometry;
            for (int i = 0; i < lines.Count; i++)
            {
                Console.WriteLine($"....segment({i})......");
                var segment = (LineString)lines[i];

                // Punkte im Segment lesen
                for (int j = 0; j < segment.Count; j++)
                {
                    // Attribut suchen
                    string attributeName = $"name__{i}__{j}";
                    if (layer.Attributes.Contains(attributeName) && feature.IsValueSet(attributeName))
                    {
                        // Drucken Sie einen Punkt und ein Attribut
                        var value = feature.GetValue<string>(attributeName);
                        Console.WriteLine($"{segment[j].AsText()} - {attributeName}: {value}, ");
                    }
                    else
                    {
                        // Drucken Sie nur einen Punkt
                        Console.WriteLine(segment[j].AsText());
                    }
                }
            }
            Console.WriteLine("..........");
        }
    }
}

Holen Sie sich eine kostenlose Lizenz

Sie können eine kostenlose temporäre Lizenz erhalten, um die Bibliothek ohne Evaluierungseinschränkungen zu testen.

Fazit

In diesem Artikel haben wir gelernt, wie man:

  • Laden Sie eine GPX-Datei mit OpenLayer in C#;
  • Wegpunkte, Routen und Tracks programmgesteuert aus der GPX-Datei lesen;
  • Lesen Sie das verschachtelte Attribut aus einer GPX-Datei mit C#.

Außerdem können Sie mithilfe der Dokumentation mehr über Aspose.GIS for .NET API erfahren. Bei Unklarheiten können Sie uns gerne im Forum kontaktieren.

Siehe auch