Leer archivos GPX usando C#

Un archivo GPX contiene datos de GPS guardados en formato de intercambio de GPS. Es un esquema XML para describir información geográfica como waypoints, tracks, rutas, etc. Permite transferir datos GPS entre unidades GPS y aplicaciones de software. Podemos cargar fácilmente el archivo GPX y extraer información GPS mediante programación en aplicaciones .NET. En este artículo, aprenderemos a leer archivos GPX usando C#.

El artículo cubrirá los siguientes temas:

API de C# para leer archivos GPX

Para leer características de archivos GPX, usaremos la API Aspose.GIS for .NET. Le permite representar mapas y crear, leer y convertir datos geográficos sin software adicional. También le permite convertir archivos KML a formato GPX y viceversa. Descargue la DLL de la API o instálela usando NuGet.

PM> Install-Package Aspose.GIS

Leer puntos de referencia del archivo GPX en C#

Podemos leer waypoints del archivo GPX como geometría de puntos siguiendo los pasos que se indican a continuación:

  1. En primer lugar, cargue el archivo GPX utilizando el método OpenLayer.
  2. A continuación, para cada entidad de la capa, compruebe si GeometryType es Point.
  3. Después de eso, obtenga la geometría de la entidad como un Punto.
  4. Finalmente, muestre los puntos de coordenadas X e Y.

El siguiente ejemplo de código muestra cómo leer waypoints desde un archivo GPX usando C#.

// Este ejemplo de código demuestra cómo leer waypoints desde un archivo GPX
// Cargue el archivo GPX
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\St_Louis_Zoo_sample.gpx");

foreach (var feature in layer)
{
    // Compruebe la geometría de punto
    if (feature.Geometry.GeometryType == GeometryType.Point)
    {
        // Leer puntos
        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

Leer rutas del archivo GPX en C#

Podemos leer rutas del archivo GPX como geometría Line String siguiendo los pasos que se indican a continuación:

  1. En primer lugar, cargue el archivo GPX utilizando el método OpenLayer.
  2. A continuación, para cada entidad de la capa, compruebe si GeometryType es LineString.
  3. Después de eso, obtenga la geometría de la entidad como LineString.
  4. Finalmente, muestre los puntos de coordenadas X, Y y Z.

El siguiente ejemplo de código muestra cómo leer rutas desde un archivo GPX usando C#.

// Este ejemplo de código demuestra cómo leer rutas GPS desde un archivo GPX
// Cargue el archivo GPX
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\schiehallion.gpx");

foreach (var feature in layer)
{
    // Comprobar la geometría de LineString
    if (feature.Geometry.GeometryType == GeometryType.LineString)
    {
        // Leer Rutas
        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
.
.
.

Extraer pistas del archivo GPX en C#

Podemos leer pistas del archivo GPX como geometría MultiLineString siguiendo los pasos que se indican a continuación:

  1. En primer lugar, cargue el archivo GPX utilizando el método OpenLayer.
  2. A continuación, para cada entidad de la capa, compruebe si GeometryType es MultiLineString.
  3. Después de eso, obtenga la geometría de la característica como MultiLineString.
  4. Finalmente, muestra las pistas.

El siguiente ejemplo de código muestra cómo leer pistas de un archivo GPX usando C#.

// Este ejemplo de código demuestra cómo leer pistas desde un archivo GPX
// Cargue el archivo GPX
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\nested_data.gpx");

foreach (var feature in layer)
{
    // Comprobar la geometría MultiLineString
    if (feature.Geometry.GeometryType == GeometryType.MultiLineString)
    {
        // Leer pista
        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)

Leer atributos anidados de GPX en C#

Podemos leer características para cada punto en el segmento y extraer valores de atributos anidados siguiendo los pasos que se detallan a continuación:

  1. En primer lugar, cree una instancia de la clase GpxOptions.
  2. A continuación, establezca ReadNestedAttributes en verdadero.
  3. Luego, cargue el archivo GPX usando el método OpenLayer() con el objeto GpxOptions como argumento.
  4. A continuación, para cada entidad de la capa, compruebe si GeometryType es MultiLineString.
  5. Luego, obtenga la geometría de la entidad como MultiLineString.
  6. Después de eso, lea el segmento como LineString de cada MultiLineString.
  7. Finalmente, lea los puntos en el segmento y muestre los valores de los atributos.

El siguiente ejemplo de código muestra cómo leer atributos anidados GPX de un archivo GPX usando C#.

// Este ejemplo de código demuestra cómo leer atributos anidados GPX desde un archivo GPX
// Especifique la opción GPX
GpxOptions options = new GpxOptions()
{
    ReadNestedAttributes = true
};


// Cargue el archivo GPX y abra la capa para leer las características
using (var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\nested_data.gpx", options))
{
    foreach (var feature in layer)
    {
        // Comprobar la geometría MultiLineString
        if (feature.Geometry.GeometryType == GeometryType.MultiLineString)
        {
            // Leer segmento
            var lines = (MultiLineString) feature.Geometry;
            for (int i = 0; i < lines.Count; i++)
            {
                Console.WriteLine($"....segment({i})......");
                var segment = (LineString)lines[i];

                // Leer puntos en segmento
                for (int j = 0; j < segment.Count; j++)
                {
                    // buscar atributo
                    string attributeName = $"name__{i}__{j}";
                    if (layer.Attributes.Contains(attributeName) && feature.IsValueSet(attributeName))
                    {
                        // Imprimir un punto y atributo
                        var value = feature.GetValue<string>(attributeName);
                        Console.WriteLine($"{segment[j].AsText()} - {attributeName}: {value}, ");
                    }
                    else
                    {
                        // Imprime solo un punto
                        Console.WriteLine(segment[j].AsText());
                    }
                }
            }
            Console.WriteLine("..........");
        }
    }
}

Obtenga una licencia gratis

Puede obtener una licencia temporal gratuita para probar la biblioteca sin limitaciones de evaluación.

Conclusión

En este artículo, hemos aprendido a:

  • cargar un archivo GPX usando OpenLayer en C#;
  • lea waypoints, rutas y pistas del archivo GPX mediante programación;
  • lea el atributo anidado de un archivo GPX usando C#.

Además, puede obtener más información sobre Aspose.GIS for .NET API utilizando la documentación. En caso de cualquier ambigüedad, no dude en contactarnos en el foro.

Ver también