Läs GPX-filer med C#

En GPX-fil är en GPS-datafil som innehåller GPS-data som sparats i GPS Exchange Format. Det är ett XML-schema för att beskriva geografisk information såsom waypoints, spår, rutter, etc. Det tillåter överföring av GPS-data mellan GPS-enheter och mjukvaruapplikationer. Vi kan enkelt ladda GPX-filen och extrahera GPS-information programmatiskt i .NET-applikationer. I den här artikeln kommer vi att lära oss hur man läser GPX-filer med C#.

Artikeln ska täcka följande ämnen:

  1. Vad är en GPX-fil
  2. C# API för att läsa GPX-filer
  3. Läs waypoints från GPX-filen
  4. Läs rutter från GPX-filen
  5. Extrahera spår från GPX-fil
  6. Read GPX Nested Attributes

Vad är en GPX-fil

GPX, eller GPS Exchange Format, är ett filformat som låter dig utbyta GPS-data mellan olika enheter och program. GPX-filer är bara XML-filer som innehåller GPS-data och kan skapas och redigeras med vilken textredigerare som helst. GPX-filer kan innehålla waypoints, spår och rutter och kan användas för att planera och dela dina resor med andra. Waypoints är helt enkelt platser som du vill komma ihåg, till exempel din nuvarande plats eller platsen för en specifik destination. Spår är en serie punkter som representerar din rörelse över tid och kan användas för att spåra dina steg eller spåra dina framsteg på en längre resa. Rutter är en serie waypoints som representerar en planerad resa och kan användas för att navigera från en punkt till en annan. GPX-filer är ett utmärkt sätt att dela din GPS-data med andra och kan användas av många GPS-enheter och program.

C# API för att läsa GPX-filer

För att läsa funktioner från GPX-filer kommer vi att använda Aspose.GIS for .NET API. Det låter dig rendera kartor och skapa, läsa och konvertera geografiska data utan extra programvara. Det låter dig också konvertera KML-filer till GPX-format och vice versa.

Vänligen antingen ladda ned API:ets DLL eller installera den med NuGet.

PM> Install-Package Aspose.GIS

Läs waypoints från GPX-filen i C#

Vi kan läsa waypoints från GPX-filen som Point Geometry genom att följa stegen nedan:

  1. Ladda först GPX-filen med metoden OpenLayer.
  2. Därefter, för varje funktion i lagret, kontrollera om GeometryType är Point.
  3. Efter det får du geometrin för funktionen som en punkt.
  4. Visa slutligen X- och Y-koordinatpunkter.

Följande kodexempel visar hur man läser waypoints från en GPX-fil med C#.

// Detta kodexempel visar hur man läser waypoints från GPX-fil
// Ladda GPX-filen
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\St_Louis_Zoo_sample.gpx");

foreach (var feature in layer)
{
    // Kontrollera för punktgeometri
    if (feature.Geometry.GeometryType == GeometryType.Point)
    {
        // Läs poäng
        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

Läs rutter från GPX-filen i C#

Vi kan läsa rutter från GPX-filen som Line String-geometri genom att följa stegen nedan:

  1. Ladda först GPX-filen med metoden OpenLayer.
  2. Därefter, för varje funktion i lagret, kontrollera om GeometryType är LineString.
  3. Efter det får du geometrin för funktionen som LineString.
  4. Visa slutligen X-, Y- och Z-koordinatpunkter.

Följande kodexempel visar hur man läser rutter från en GPX-fil med C#.

// Detta kodexempel visar hur man läser GPS-rutter från GPX-fil
// Ladda GPX-filen
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\schiehallion.gpx");

foreach (var feature in layer)
{
    // Kontrollera om det finns LineString-geometri
    if (feature.Geometry.GeometryType == GeometryType.LineString)
    {
        // Läs Routs
        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
.
.
.

Extrahera spår från GPX-filen i C#

Vi kan läsa spår från GPX-filen som MultiLineString-geometri genom att följa stegen nedan:

  1. Ladda först GPX-filen med metoden OpenLayer.
  2. Därefter, för varje funktion i lagret, kontrollera om GeometryType är MultiLineString.
  3. Efter det får du geometrin för funktionen som MultiLineString.
  4. Till sist, visa spåren.

Följande kodexempel visar hur man läser spår från en GPX-fil med C#.

// Detta kodexempel visar hur man läser spår från GPX-fil
// Ladda GPX-filen
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\nested_data.gpx");

foreach (var feature in layer)
{
    // Kontrollera om MultiLineString geometri
    if (feature.Geometry.GeometryType == GeometryType.MultiLineString)
    {
        // Läs spår
        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)

Läs GPX Nested Attributes i C#

Vi kan läsa funktioner för varje punkt i segmentet och extrahera kapslade attributvärden genom att följa stegen nedan:

  1. Skapa först en instans av klassen GpxOptions.
  2. Ställ sedan in ReadNestedAttributes till true.
  3. Ladda sedan GPX-filen med metoden OpenLayer() med GpxOptions-objektet som argument.
  4. Därefter, för varje funktion i lagret, kontrollera om GeometryType är MultiLineString.
  5. Få sedan geometrin för funktionen som MultiLineString.
  6. Efter det läser du segmentet som LineString från varje MultiLineString.
  7. Läs slutligen av punkter i segmentet och visa attributvärdena.

Följande kodexempel visar hur man läser GPX kapslade attribut från en GPX-fil med C#.

// Detta kodexempel visar hur man läser GPX-kapslade attribut från GPX-fil
// Ange GPX-alternativ
GpxOptions options = new GpxOptions()
{
    ReadNestedAttributes = true
};


// Ladda GPX-filen och öppna lagret för att läsa funktioner
using (var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\nested_data.gpx", options))
{
    foreach (var feature in layer)
    {
        // Kontrollera om MultiLineString geometri
        if (feature.Geometry.GeometryType == GeometryType.MultiLineString)
        {
            // Läs avsnitt
            var lines = (MultiLineString) feature.Geometry;
           for (int i = 0; i < lines.Count; i++)
            {
                Console.WriteLine($"....segment({i})......");
                var segment = (LineString)lines[i];

                // Läs punkter i segment
               for (int j = 0; j < segment.Count; j++)
                {
                    // Leta efter attribut
                    string attributeName = $"name__{i}__{j}";
                    if (layer.Attributes.Contains(attributeName) && feature.IsValueSet(attributeName))
                    {
                        // Skriv ut en punkt och ett attribut
                        var value = feature.GetValue<string>(attributeName);
                        Console.WriteLine($"{segment[j].AsText()} - {attributeName}: {value}, ");
                    }
                    else
                    {
                        // Skriv bara ut en punkt
                        Console.WriteLine(segment[j].AsText());
                    }
                }
            }
            Console.WriteLine("..........");
        }
    }
}

Skaffa en gratis licens

Du kan få en gratis tillfällig licens för att prova biblioteket utan utvärderingsbegränsningar.

Slutsats

I den här artikeln har vi lärt oss hur man:

  • ladda en GPX-fil med OpenLayer i C#;
  • läsa waypoints, rutter och spår från GPX-filen programmatiskt;
  • läs det kapslade attributet från en GPX-fil med C#.

Förutom att läsa GPX-filer i C# kan du lära dig mer om Aspose.GIS för .NET API med hjälp av dokumentationen. I händelse av oklarheter är du välkommen att kontakta oss på vårt gratis supportforum.

Se även