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
- Leggi i waypoint dal file GPX
- Leggi i percorsi dal file GPX
- Estrai tracce dal file GPX
- Leggi gli attributi nidificati GPX
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:
- Innanzitutto, carica il file GPX utilizzando il metodo OpenLayer.
- Quindi, per ogni caratteristica nel livello, controlla se GeometryType è Point.
- Successivamente, ottieni la geometria della funzione come Punto.
- 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:
- Innanzitutto, carica il file GPX utilizzando il metodo OpenLayer.
- Quindi, per ogni caratteristica nel livello, controlla se GeometryType è LineString.
- Successivamente, ottieni la geometria della funzione come LineString.
- 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:
- Innanzitutto, carica il file GPX utilizzando il metodo OpenLayer.
- Quindi, per ogni caratteristica nel livello, controlla se GeometryType è MultiLineString.
- Successivamente, ottieni la geometria della funzione come MultiLineString.
- 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:
- Innanzitutto, crea un’istanza della classe GpxOptions.
- Quindi, imposta ReadNestedAttributes su true.
- Quindi, carica il file GPX utilizzando il metodo OpenLayer() con l’oggetto GpxOptions come argomento.
- Quindi, per ogni caratteristica nel livello, controlla se GeometryType è MultiLineString.
- Quindi, ottieni la geometria della funzione come MultiLineString.
- Successivamente, leggi il segmento come LineString da ogni MultiLineString.
- 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.