Um arquivo GPX contém dados GPS salvos no formato GPS Exchange. É um esquema XML para descrever informações geográficas como waypoints, trilhas, rotas, etc. Permite transferir dados GPS entre unidades GPS e aplicativos de software. Podemos facilmente carregar o arquivo GPX e extrair informações de GPS programaticamente em aplicativos .NET. Neste artigo, aprenderemos como ler arquivos GPX usando C#.
O artigo deve abordar os seguintes tópicos:
- API C# para ler arquivos GPX
- Leia Waypoints do arquivo GPX
- Ler rotas do arquivo GPX
- Extrair faixas do arquivo GPX
- Ler atributos aninhados GPX
API C# para ler arquivos GPX
Para ler recursos de arquivos GPX, usaremos a API Aspose.GIS for .NET. Ele permite renderizar mapas e criar, ler e converter dados geográficos sem software adicional. Também permite converter arquivos KML para o formato GPX e vice-versa. Por favor, baixe a DLL da API ou instale-a usando NuGet.
PM> Install-Package Aspose.GIS
Leia Waypoints do arquivo GPX em C#
Podemos ler waypoints do arquivo GPX como Point Geometry seguindo os passos abaixo:
- Primeiramente, carregue o arquivo GPX usando o método OpenLayer.
- Em seguida, para cada feição na camada, verifique se GeometryType é Point.
- Depois disso, pegue a geometria do recurso como um Point.
- Finalmente, mostre os pontos de coordenadas X e Y.
O exemplo de código a seguir mostra como ler waypoints de um arquivo GPX usando C#.
// Este exemplo de código demonstra como ler waypoints do arquivo GPX
// Carregar o arquivo GPX
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\St_Louis_Zoo_sample.gpx");
foreach (var feature in layer)
{
// Verifique a geometria do ponto
if (feature.Geometry.GeometryType == GeometryType.Point)
{
// Pontos de leitura
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
Leia as rotas do arquivo GPX em C#
Podemos ler as rotas do arquivo GPX como geometria Line String seguindo os passos abaixo:
- Primeiramente, carregue o arquivo GPX usando o método OpenLayer.
- Em seguida, para cada feição na camada, verifique se GeometryType é LineString.
- Depois disso, pegue a geometria do recurso como LineString.
- Finalmente, mostre os pontos de coordenadas X, Y e Z.
O exemplo de código a seguir mostra como ler rotas de um arquivo GPX usando C#.
// Este exemplo de código demonstra como ler as rotas GPS do arquivo GPX
// Carregar o arquivo GPX
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\schiehallion.gpx");
foreach (var feature in layer)
{
// Verifique a geometria LineString
if (feature.Geometry.GeometryType == GeometryType.LineString)
{
// Ler Rotas
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
.
.
.
Extraia faixas do arquivo GPX em C#
Podemos ler as faixas do arquivo GPX como geometria MultiLineString seguindo os passos abaixo:
- Primeiramente, carregue o arquivo GPX usando o método OpenLayer.
- Em seguida, para cada feição na camada, verifique se GeometryType é MultiLineString.
- Depois disso, pegue a geometria do recurso como MultiLineString.
- Por fim, mostre as faixas.
O exemplo de código a seguir mostra como ler faixas de um arquivo GPX usando C#.
// Este exemplo de código demonstra como ler trilhas do arquivo GPX
// Carregar o arquivo GPX
var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\nested_data.gpx");
foreach (var feature in layer)
{
// Verifique a geometria MultiLineString
if (feature.Geometry.GeometryType == GeometryType.MultiLineString)
{
// Ler faixa
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)
Ler atributos aninhados GPX em C#
Podemos ler recursos para cada ponto no segmento e extrair valores de atributos aninhados seguindo as etapas abaixo:
- Primeiramente, crie uma instância da classe GpxOptions.
- Em seguida, defina ReadNestedAttributes como true.
- Em seguida, carregue o arquivo GPX usando o método OpenLayer() com o objeto GpxOptions como argumento.
- Em seguida, para cada feição na camada, verifique se GeometryType é MultiLineString.
- Em seguida, obtenha a geometria do recurso como MultiLineString.
- Depois disso, leia o segmento como LineString de cada MultiLineString.
- Por fim, leia os pontos no segmento e mostre os valores dos atributos.
O exemplo de código a seguir mostra como ler atributos aninhados GPX de um arquivo GPX usando C#.
// Este exemplo de código demonstra como ler GPX Nested Attributes do arquivo GPX
// Especifique a opção GPX
GpxOptions options = new GpxOptions()
{
ReadNestedAttributes = true
};
// Carregue o arquivo GPX e abra a camada para ler os recursos
using (var layer = Drivers.Gpx.OpenLayer(@"D:\Files\GIS\nested_data.gpx", options))
{
foreach (var feature in layer)
{
// Verifique a geometria MultiLineString
if (feature.Geometry.GeometryType == GeometryType.MultiLineString)
{
// Ler segmento
var lines = (MultiLineString) feature.Geometry;
for (int i = 0; i < lines.Count; i++)
{
Console.WriteLine($"....segment({i})......");
var segment = (LineString)lines[i];
// Ler pontos no segmento
for (int j = 0; j < segment.Count; j++)
{
// Procure por atributo
string attributeName = $"name__{i}__{j}";
if (layer.Attributes.Contains(attributeName) && feature.IsValueSet(attributeName))
{
// Imprimir um ponto e atributo
var value = feature.GetValue<string>(attributeName);
Console.WriteLine($"{segment[j].AsText()} - {attributeName}: {value}, ");
}
else
{
// Imprimir apenas um ponto
Console.WriteLine(segment[j].AsText());
}
}
}
Console.WriteLine("..........");
}
}
}
Obtenha uma licença gratuita
Você pode obter uma licença temporária gratuita para experimentar a biblioteca sem limitações de avaliação.
Conclusão
Neste artigo, aprendemos como:
- carregar um arquivo GPX usando OpenLayer em C#;
- ler waypoints, rotas e trilhas do arquivo GPX programaticamente;
- leia o atributo aninhado de um arquivo GPX usando C#.
Além disso, você pode aprender mais sobre o Aspose.GIS for .NET API usando a documentação. Em caso de qualquer ambiguidade, não hesite em contactar-nos no fórum.