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
- Lesen Sie Wegpunkte aus der GPX-Datei
- Lesen Sie Routen aus der GPX-Datei
- Tracks aus GPX-Datei extrahieren
- Lesen Sie GPX-verschachtelte Attribute
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:
- Laden Sie zunächst die GPX-Datei mit der Methode OpenLayer.
- Überprüfen Sie als Nächstes für jedes Feature im Layer, ob GeometryType gleich Point ist.
- Rufen Sie danach die Geometrie des Features als Punkt ab.
- 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:
- Laden Sie zunächst die GPX-Datei mit der Methode OpenLayer.
- Überprüfen Sie als Nächstes für jedes Feature im Layer, ob GeometryType gleich LineString ist.
- Rufen Sie danach die Geometrie des Features als LineString ab.
- 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:
- Laden Sie zunächst die GPX-Datei mit der Methode OpenLayer.
- Überprüfen Sie als Nächstes für jedes Feature im Layer, ob GeometryType gleich MultiLineString ist.
- Rufen Sie danach die Geometrie des Features als MultiLineString ab.
- 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:
- Erstellen Sie zunächst eine Instanz der Klasse GpxOptions.
- Legen Sie als Nächstes ReadNestedAttributes auf true fest.
- Laden Sie dann die GPX-Datei mit der Methode OpenLayer() mit dem GpxOptions-Objekt als Argument.
- Überprüfen Sie als Nächstes für jedes Feature im Layer, ob GeometryType gleich MultiLineString ist.
- Rufen Sie dann die Geometrie des Features als MultiLineString ab.
- Lesen Sie danach das Segment als LineString aus jedem MultiLineString.
- 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.