Файл GPX содержит данные GPS, сохраненные в формате обмена GPS. Это XML-схема для описания географической информации, такой как путевые точки, треки, маршруты и т. д. Она позволяет передавать данные GPS между устройствами GPS и программными приложениями. Мы можем легко загрузить файл GPX и программно извлечь информацию GPS в приложениях .NET. В этой статье мы узнаем, как читать файлы GPX с помощью C#.
Статья должна охватывать следующие темы:
- C# API для чтения файлов GPX
- Чтение путевых точек из файла GPX
- Чтение маршрутов из файла GPX
- Извлечение треков из файла GPX
- Чтение вложенных атрибутов GPX
C# API для чтения файлов GPX
Для чтения объектов из файлов GPX мы будем использовать API Aspose.GIS for .NET. Он позволяет отображать карты, а также создавать, читать и преобразовывать географические данные без дополнительного программного обеспечения. Он также позволяет конвертировать файлы KML в формат GPX и наоборот. Пожалуйста, загрузите DLL API или установите его с помощью NuGet.
PM> Install-Package Aspose.GIS
Чтение путевых точек из файла GPX на C#
Мы можем прочитать путевые точки из файла GPX как точечную геометрию, выполнив следующие шаги:
- Во-первых, загрузите файл GPX, используя метод OpenLayer.
- Затем для каждого объекта в слое проверьте, соответствует ли GeometryType Point.
- После этого получите геометрию объекта как точку.
- Наконец, покажите точки координат 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 в виде геометрии Line String, выполнив следующие шаги:
- Во-первых, загрузите файл GPX, используя метод OpenLayer.
- Затем для каждого объекта в слое проверьте, соответствует ли GeometryType LineString.
- После этого получите геометрию объекта в виде LineString.
- Наконец, покажите точки координат 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, выполнив следующие шаги:
- Во-первых, загрузите файл GPX, используя метод OpenLayer.
- Затем для каждого объекта в слое проверьте, соответствует ли GeometryType MultiLineString.
- После этого получите геометрию объекта как MultiLineString.
- Наконец, покажите треки.
В следующем примере кода показано, как читать дорожки из файла 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#
Мы можем прочитать функции для каждой точки в сегменте и извлечь значения вложенных атрибутов, выполнив шаги, указанные ниже:
- Во-первых, создайте экземпляр класса GpxOptions.
- Затем установите для ReadNestedAttributes значение true.
- Затем загрузите файл GPX с помощью метода OpenLayer() с объектом GpxOptions в качестве аргумента.
- Затем для каждого объекта в слое проверьте, соответствует ли GeometryType MultiLineString.
- Затем получите геометрию объекта как MultiLineString.
- После этого прочитайте сегмент как LineString из каждой MultiLineString.
- Наконец, прочитайте точки в сегменте и покажите значения атрибутов.
В следующем примере кода показано, как читать вложенные атрибуты 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#.
Кроме того, вы можете узнать больше об Aspose.GIS for .NET API, используя документацию. В случае возникновения каких-либо неясностей, пожалуйста, свяжитесь с нами на форуме.