Читання файлів GPX за допомогою C#

Файл GPX – це файл даних GPS, який містить дані GPS, збережені у форматі обміну GPS. Це XML-схема для опису географічної інформації, такої як шляхові точки, треки, маршрути тощо. Вона дозволяє передавати дані GPS між пристроями GPS і програмними програмами. Ми можемо легко завантажити файл GPX і отримати інформацію GPS програмним шляхом у програмах .NET. У цій статті ми навчимося читати файли GPX за допомогою C#.

Стаття повинна охоплювати такі теми:

  1. Що таке файл GPX
  2. C# API для читання файлів GPX
  3. Читання маршрутних точок із файлу GPX
  4. Читання маршрутів із файлу GPX
  5. Видобути треки з файлу GPX
  6. Читання вкладених атрибутів GPX

Що таке файл GPX

GPX або формат обміну GPS — це формат файлів, який дозволяє обмінюватися даними GPS між різними пристроями та програмами. Файли GPX — це просто файли XML, які містять дані GPS, і їх можна створювати та редагувати за допомогою будь-якого текстового редактора. Файли GPX можуть містити шляхові точки, треки та маршрути, і їх можна використовувати, щоб планувати свої подорожі та ділитися ними з іншими. Шляхові точки – це просто місця, які ви хочете запам’ятати, наприклад ваше поточне місцезнаходження або місцезнаходження певного пункту призначення. Доріжки – це серія точок, які представляють ваш рух у часі, і їх можна використовувати, щоб повторити ваші кроки або відстежувати ваш прогрес у довшій подорожі. Маршрути — це серія маршрутних точок, які представляють заплановану подорож і можуть використовуватися для навігації від однієї точки до іншої. Файли GPX є чудовим способом обміну даними GPS з іншими, і їх можна використовувати багатьма пристроями GPS і програмним забезпеченням.

C# API для читання файлів GPX

Для читання функцій із файлів GPX ми будемо використовувати Aspose.GIS for .NET API. Це дозволяє відтворювати карти, створювати, читати та конвертувати географічні дані без додаткового програмного забезпечення. Він також дає змогу конвертувати файли KML у формат GPX і навпаки.

Завантажте DLL API або встановіть його за допомогою NuGet.

PM> Install-Package Aspose.GIS

Читання шляхових точок із файлу GPX у C#

Ми можемо зчитувати маршрутні точки з файлу GPX як геометрію точки, виконавши наведені нижче кроки:

  1. Спочатку завантажте файл GPX за допомогою методу OpenLayer.
  2. Далі перевірте, чи GeometryType має значення Point для кожного об’єкта в шарі.
  3. Після цього отримайте геометрію об’єкта як точку.
  4. Нарешті, покажіть точки координат X і Y.

У наведеному нижче прикладі коду показано, як читати маршрутні точки з файлу GPX за допомогою C#.

// Цей приклад коду демонструє, як читати маршрутні точки з файлу GPX
// Завантажте файл GPX
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\St_Louis_Zoo_sample.gpx");

foreach (var feature in layer)
{
    // Перевірте геометрію точки
    if (feature.Geometry.GeometryType == GeometryType.Point)
    {
        // Прочитайте пункти
        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

Читання маршрутів із файлу GPX у C#

Ми можемо зчитувати маршрути з файлу GPX як геометрію лінійних рядків, виконавши наведені нижче кроки:

  1. Спочатку завантажте файл GPX за допомогою методу OpenLayer.
  2. Далі перевірте, чи GeometryType є LineString для кожного об’єкта в шарі.
  3. Після цього отримайте геометрію об’єкта як LineString.
  4. Нарешті, покажіть точки координат X, Y і Z.

У наступному прикладі коду показано, як читати маршрути з файлу GPX за допомогою C#.

// Цей приклад коду демонструє, як читати маршрути GPS із файлу GPX
// Завантажте файл GPX
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\schiehallion.gpx");

foreach (var feature in layer)
{
    // Перевірте геометрію LineString
    if (feature.Geometry.GeometryType == GeometryType.LineString)
    {
        // Читайте маршрути
        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
.
.
.

Витяг доріжок із файлу GPX у C#

Ми можемо прочитати доріжки з файлу GPX як геометрію MultiLineString, виконавши наведені нижче кроки:

  1. Спочатку завантажте файл GPX за допомогою методу OpenLayer.
  2. Далі перевірте, чи GeometryType є MultiLineString для кожного об’єкта в шарі.
  3. Після цього отримайте геометрію об’єкта як MultiLineString.
  4. Нарешті, покажіть доріжки.

У наступному прикладі коду показано, як читати треки з файлу GPX за допомогою C#.

// Цей приклад коду демонструє, як читати треки з файлу GPX
// Завантажте файл GPX
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\nested_data.gpx");

foreach (var feature in layer)
{
    // Перевірте геометрію MultiLineString
    if (feature.Geometry.GeometryType == GeometryType.MultiLineString)
    {
        // Прочитати трек
        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)

Читання вкладених атрибутів GPX у C#

Ми можемо зчитувати характеристики для кожної точки сегмента та витягувати значення вкладених атрибутів, виконавши наведені нижче кроки:

  1. По-перше, створіть екземпляр класу GpxOptions.
  2. Далі встановіть для ReadNestedAttributes значення true.
  3. Потім завантажте файл GPX за допомогою методу OpenLayer() з об’єктом GpxOptions як аргументом.
  4. Далі перевірте, чи GeometryType є MultiLineString для кожного об’єкта в шарі.
  5. Потім отримайте геометрію об’єкта як MultiLineString.
  6. Після цього прочитайте сегмент як LineString з кожного MultiLineString.
  7. Нарешті, прочитайте точки на сегменті та покажіть значення атрибутів.

У наступному прикладі коду показано, як читати вкладені атрибути GPX із файлу GPX за допомогою C#.

// Цей приклад коду демонструє, як читати вкладені атрибути GPX із файлу GPX
// Вкажіть параметр GPX
GpxOptions options = new GpxOptions()
{
    ReadNestedAttributes = true
};


// Завантажте файл GPX і відкрийте шар, щоб прочитати функції
using (var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\nested_data.gpx", options))
{
    foreach (var feature in layer)
    {
        // Перевірте геометрію MultiLineString
        if (feature.Geometry.GeometryType == GeometryType.MultiLineString)
        {
            // Прочитайте сегмент
            var lines = (MultiLineString) feature.Geometry;
           for (int i = 0; i < lines.Count; i++)
            {
                Console.WriteLine($"....segment({i})......");
                var segment = (LineString)lines[i];

                // Прочитайте точки на відрізку
               for (int j = 0; j < segment.Count; j++)
                {
                    // Шукайте атрибут
                    string attributeName = $"name__{i}__{j}";
                    if (layer.Attributes.Contains(attributeName) && feature.IsValueSet(attributeName))
                    {
                        // Надрукуйте точку та атрибут
                        var value = feature.GetValue<string>(attributeName);
                        Console.WriteLine($"{segment[j].AsText()} - {attributeName}: {value}, ");
                    }
                    else
                    {
                        // Надрукувати лише точку
                        Console.WriteLine(segment[j].AsText());
                    }
                }
            }
            Console.WriteLine("..........");
        }
    }
}

Отримайте безкоштовну ліцензію

Ви можете отримати безкоштовну тимчасову ліцензію, щоб спробувати бібліотеку без оціночних обмежень.

Висновок

У цій статті ми дізналися, як:

  • завантажити файл GPX за допомогою OpenLayer на C#;
  • читати маршрутні точки, маршрути та треки з файлу GPX програмно;
  • читати вкладений атрибут із файлу GPX за допомогою C#.

Окрім читання файлів GPX у C#, ви можете дізнатися більше про Aspose.GIS for .NET API за допомогою документації. У разі будь-яких неясностей зв’яжіться з нами на нашому безкоштовному форумі підтримки.

Дивись також