Czytaj pliki GPX za pomocą C#

Plik GPX zawiera dane GPS zapisane w formacie GPS Exchange. Jest to schemat XML opisujący informacje geograficzne, takie jak punkty, ślady, trasy itp. Umożliwia przesyłanie danych GPS między jednostkami GPS i aplikacjami. Możemy łatwo załadować plik GPX i programowo wyodrębnić informacje GPS w aplikacjach .NET. W tym artykule nauczymy się odczytywać pliki GPX za pomocą języka C#.

Artykuł obejmie następujące tematy:

C# API do odczytu plików GPX

Do odczytu obiektów z plików GPX będziemy używać API Aspose.GIS for .NET. Umożliwia renderowanie map oraz tworzenie, odczytywanie i konwertowanie danych geograficznych bez dodatkowego oprogramowania. Umożliwia także konwersję plików KML do formatu GPX i odwrotnie. Pobierz bibliotekę DLL interfejsu API lub zainstaluj ją za pomocą NuGet.

PM> Install-Package Aspose.GIS

Czytaj punkty trasy z pliku GPX w C#

Możemy odczytać punkty trasy z pliku GPX jako geometrię punktu, wykonując poniższe czynności:

  1. Najpierw załaduj plik GPX metodą OpenLayer.
  2. Następnie dla każdego obiektu w warstwie sprawdź, czy GeometryType to Point.
  3. Następnie uzyskaj geometrię funkcji jako punkt.
  4. Na koniec pokaż punkty współrzędnych X i Y.

Poniższy przykładowy kod pokazuje, jak odczytywać punkty trasy z pliku GPX przy użyciu języka C#.

// Ten przykład kodu demonstruje, jak odczytywać punkty trasy z pliku GPX
// Załaduj plik GPX
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\St_Louis_Zoo_sample.gpx");

foreach (var feature in layer)
{
    // Sprawdź geometrię punktu
    if (feature.Geometry.GeometryType == GeometryType.Point)
    {
        // Przeczytaj punkty
        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

Czytaj trasy z pliku GPX w C#

Możemy odczytać trasy z pliku GPX jako geometrię Line String, wykonując następujące czynności:

  1. Najpierw załaduj plik GPX metodą OpenLayer.
  2. Następnie dla każdego obiektu w warstwie sprawdź, czy GeometryType to LineString.
  3. Następnie uzyskaj geometrię funkcji jako LineString.
  4. Na koniec pokaż punkty współrzędnych X, Y i Z.

Poniższy przykładowy kod pokazuje, jak odczytywać trasy z pliku GPX przy użyciu języka C#.

// Ten przykład kodu pokazuje, jak odczytywać trasy GPS z pliku GPX
// Załaduj plik GPX
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\schiehallion.gpx");

foreach (var feature in layer)
{
    // Sprawdź geometrię LineString
    if (feature.Geometry.GeometryType == GeometryType.LineString)
    {
        // Przeczytaj Trasy
        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
.
.
.

Wyodrębnij ścieżki z pliku GPX w C#

Możemy odczytać ścieżki z pliku GPX jako geometrię MultiLineString, wykonując poniższe czynności:

  1. Najpierw załaduj plik GPX metodą OpenLayer.
  2. Następnie dla każdego obiektu w warstwie sprawdź, czy GeometryType to MultiLineString.
  3. Następnie uzyskaj geometrię funkcji jako MultiLineString.
  4. Na koniec pokaż ślady.

Poniższy przykładowy kod pokazuje, jak odczytywać ścieżki z pliku GPX przy użyciu języka C#.

// Ten przykładowy kod demonstruje, jak odczytać ścieżki z pliku GPX
// Załaduj plik GPX
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\nested_data.gpx");

foreach (var feature in layer)
{
    // Sprawdź geometrię MultiLineString
    if (feature.Geometry.GeometryType == GeometryType.MultiLineString)
    {
        // Przeczytaj utwó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)

Czytaj zagnieżdżone atrybuty GPX w C#

Możemy odczytać cechy dla każdego punktu w segmencie i wyodrębnić zagnieżdżone wartości atrybutów, wykonując poniższe czynności:

  1. Najpierw utwórz instancję klasy GpxOptions.
  2. Następnie ustaw ReadNestedAttributes na true.
  3. Następnie załaduj plik GPX za pomocą metody OpenLayer() z obiektem GpxOptions jako argumentem.
  4. Następnie dla każdego obiektu w warstwie sprawdź, czy GeometryType to MultiLineString.
  5. Następnie pobierz geometrię funkcji jako MultiLineString.
  6. Następnie przeczytaj segment jako LineString z każdego MultiLineString.
  7. Na koniec odczytaj punkty w segmencie i pokaż wartości atrybutów.

Poniższy przykładowy kod pokazuje, jak odczytywać zagnieżdżone atrybuty GPX z pliku GPX przy użyciu języka C#.

// Ten przykład kodu demonstruje, jak odczytać zagnieżdżone atrybuty GPX z pliku GPX
// Określ opcję GPX
GpxOptions options = new GpxOptions()
{
    ReadNestedAttributes = true
};


// Załaduj plik GPX i otwórz warstwę, aby odczytać obiekty
using (var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\nested_data.gpx", options))
{
    foreach (var feature in layer)
    {
        // Sprawdź geometrię MultiLineString
        if (feature.Geometry.GeometryType == GeometryType.MultiLineString)
        {
            // Przeczytaj segment
            var lines = (MultiLineString) feature.Geometry;
           for (int i = 0; i < lines.Count; i++)
            {
                Console.WriteLine($"....segment({i})......");
                var segment = (LineString)lines[i];

                // Przeczytaj punkty w segmencie
               for (int j = 0; j < segment.Count; j++)
                {
                    // Szukaj atrybutu
                    string attributeName = $"name__{i}__{j}";
                    if (layer.Attributes.Contains(attributeName) && feature.IsValueSet(attributeName))
                    {
                        // Wydrukuj punkt i atrybut
                        var value = feature.GetValue<string>(attributeName);
                        Console.WriteLine($"{segment[j].AsText()} - {attributeName}: {value}, ");
                    }
                    else
                    {
                        // Drukuj tylko punkt
                        Console.WriteLine(segment[j].AsText());
                    }
                }
            }
            Console.WriteLine("..........");
        }
    }
}

Uzyskaj bezpłatną licencję

Możesz uzyskać bezpłatną tymczasową licencję, aby wypróbować bibliotekę bez ograniczeń ewaluacyjnych.

Wniosek

W tym artykule dowiedzieliśmy się, jak:

  • załaduj plik GPX za pomocą OpenLayer w C#;
  • programowo odczytywać punkty trasy, trasy i ścieżki z pliku GPX;
  • odczytać zagnieżdżony atrybut z pliku GPX przy użyciu języka C#.

Poza tym możesz dowiedzieć się więcej o Aspose.GIS for .NET API korzystając z dokumentacji. W przypadku jakichkolwiek niejasności prosimy o kontakt na forum.

Zobacz też