Leggi i file GPX usando C#

Un file GPX contiene dati GPS salvati in GPS Exchange Format. È uno schema XML per descrivere informazioni geografiche come waypoint, tracce, rotte, ecc. Consente il trasferimento di dati GPS tra unità GPS e applicazioni software. Possiamo facilmente caricare il file GPX ed estrarre le informazioni GPS a livello di codice nelle applicazioni .NET. In questo articolo impareremo come leggere i file GPX usando C#.

L’articolo tratterà i seguenti argomenti:

API C# per leggere i file GPX

Per leggere le funzionalità dai file GPX, utilizzeremo l’API Aspose.GIS for .NET. Ti consente di eseguire il rendering di mappe e creare, leggere e convertire dati geografici senza software aggiuntivo. Ti consente anche di convertire i file KML in formato GPX e viceversa. Si prega di scaricare la DLL dell’API o installarla utilizzando NuGet.

PM> Install-Package Aspose.GIS

Leggi i waypoint dal file GPX in C#

Possiamo leggere i waypoint dal file GPX come Point Geometry seguendo i passaggi indicati di seguito:

  1. Innanzitutto, carica il file GPX utilizzando il metodo OpenLayer.
  2. Quindi, per ogni caratteristica nel livello, controlla se GeometryType è Point.
  3. Successivamente, ottieni la geometria della funzione come Punto.
  4. Infine, mostra i punti delle coordinate X e Y.

L’esempio di codice seguente mostra come leggere i waypoint da un file GPX usando C#.

// Questo esempio di codice mostra come leggere i waypoint dal file GPX
// Carica il file GPX
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\St_Louis_Zoo_sample.gpx");

foreach (var feature in layer)
{
    // Controlla la geometria del punto
    if (feature.Geometry.GeometryType == GeometryType.Point)
    {
        // Leggi punti
        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

Leggi i percorsi dal file GPX in C#

Possiamo leggere i percorsi dal file GPX come geometria Line String seguendo i passaggi indicati di seguito:

  1. Innanzitutto, carica il file GPX utilizzando il metodo OpenLayer.
  2. Quindi, per ogni caratteristica nel livello, controlla se GeometryType è LineString.
  3. Successivamente, ottieni la geometria della funzione come LineString.
  4. Infine, mostra i punti delle coordinate X, Y e Z.

L’esempio di codice seguente mostra come leggere i percorsi da un file GPX usando C#.

// Questo esempio di codice mostra come leggere i percorsi GPS dal file GPX
// Carica il file GPX
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\schiehallion.gpx");

foreach (var feature in layer)
{
    // Verificare la geometria LineString
    if (feature.Geometry.GeometryType == GeometryType.LineString)
    {
        // Leggi Rotte
        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
.
.
.

Estrai tracce dal file GPX in C#

Possiamo leggere le tracce dal file GPX come geometria MultiLineString seguendo i passaggi indicati di seguito:

  1. Innanzitutto, carica il file GPX utilizzando il metodo OpenLayer.
  2. Quindi, per ogni caratteristica nel livello, controlla se GeometryType è MultiLineString.
  3. Successivamente, ottieni la geometria della funzione come MultiLineString.
  4. Infine, mostra le tracce.

L’esempio di codice seguente mostra come leggere le tracce da un file GPX usando C#.

// Questo esempio di codice mostra come leggere le tracce dal file GPX
// Carica il file GPX
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\nested_data.gpx");

foreach (var feature in layer)
{
    // Verificare la geometria MultiLineString
    if (feature.Geometry.GeometryType == GeometryType.MultiLineString)
    {
        // Leggi traccia
        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)

Leggi gli attributi nidificati GPX in C#

Possiamo leggere le caratteristiche per ogni punto del segmento ed estrarre i valori degli attributi nidificati seguendo i passaggi indicati di seguito:

  1. Innanzitutto, crea un’istanza della classe GpxOptions.
  2. Quindi, imposta ReadNestedAttributes su true.
  3. Quindi, carica il file GPX utilizzando il metodo OpenLayer() con l’oggetto GpxOptions come argomento.
  4. Quindi, per ogni caratteristica nel livello, controlla se GeometryType è MultiLineString.
  5. Quindi, ottieni la geometria della funzione come MultiLineString.
  6. Successivamente, leggi il segmento come LineString da ogni MultiLineString.
  7. Infine, leggi i punti nel segmento e mostra i valori degli attributi.

L’esempio di codice seguente mostra come leggere gli attributi nidificati GPX da un file GPX usando C#.

// Questo esempio di codice mostra come leggere gli attributi nidificati GPX dal file GPX
// Specificare l'opzione GPX
GpxOptions options = new GpxOptions()
{
    ReadNestedAttributes = true
};


// Carica il file GPX e apri il livello per leggere le funzionalità
using (var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\nested_data.gpx", options))
{
    foreach (var feature in layer)
    {
        // Verificare la geometria MultiLineString
        if (feature.Geometry.GeometryType == GeometryType.MultiLineString)
        {
            // Leggi segmento
            var lines = (MultiLineString) feature.Geometry;
            for (int i = 0; i < lines.Count; i++)
            {
                Console.WriteLine($"....segment({i})......");
                var segment = (LineString)lines[i];

                // Leggi i punti nel segmento
                for (int j = 0; j < segment.Count; j++)
                {
                    // Cerca l'attributo
                    string attributeName = $"name__{i}__{j}";
                    if (layer.Attributes.Contains(attributeName) && feature.IsValueSet(attributeName))
                    {
                        // Stampa un punto e un attributo
                        var value = feature.GetValue<string>(attributeName);
                        Console.WriteLine($"{segment[j].AsText()} - {attributeName}: {value}, ");
                    }
                    else
                    {
                        // Stampa solo un punto
                        Console.WriteLine(segment[j].AsText());
                    }
                }
            }
            Console.WriteLine("..........");
        }
    }
}

Ottieni una licenza gratuita

Puoi ottenere una licenza temporanea gratuita per provare la libreria senza limitazioni di valutazione.

Conclusione

In questo articolo abbiamo imparato a:

  • carica un file GPX usando OpenLayer in C#;
  • leggere waypoint, rotte e tracce dal file GPX in modo programmatico;
  • leggere l’attributo nidificato da un file GPX utilizzando C#.

Inoltre, puoi saperne di più su Aspose.GIS per .NET API usando la documentazione. In caso di ambiguità, non esitare a contattarci sul forum.

Guarda anche