GPX 文件包含以 GPS 交換格式保存的 GPS 數據。它是一種 XML 模式,用於描述航路點、航跡、路線等地理信息。它允許在 GPS 單元和軟件應用程序之間傳輸 GPS 數據。我們可以輕鬆地加載 GPX 文件並在 .NET 應用程序中以編程方式提取 GPS 信息。在本文中,我們將學習如何使用 C# 讀取 GPX 文件。
文章應涵蓋以下主題:
用於讀取 GPX 文件的 C# API
為了從 GPX 文件中讀取特徵,我們將使用 Aspose.GIS for .NET API。它允許您渲染地圖,以及創建、讀取和轉換地理數據,而無需額外的軟件。它還使您能夠將 KML 文件轉換為 GPX 格式,反之亦然。請 下載 API 的 DLL 或使用 NuGet 安裝它。
PM> Install-Package Aspose.GIS
在 C# 中從 GPX 文件讀取航點
我們可以按照以下步驟從 GPX 文件中讀取航路點作為點幾何:
- 首先,使用 OpenLayer 方法加載 GPX 文件。
- 接下來,對於圖層中的每個要素,檢查 GeometryType 是否為 Point。
- 之後,將特徵的幾何形狀作為一個點。
- 最後,顯示 X 和 Y 坐標點。
以下代碼示例展示瞭如何使用 C# 從 GPX 文件中讀取航路點。
// 此代碼示例演示如何從 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
從 C# 中的 GPX 文件中讀取路由
我們可以按照以下步驟從 GPX 文件中讀取路線作為線串幾何圖形:
- 首先,使用 OpenLayer 方法加載 GPX 文件。
- 接下來,對於圖層中的每個要素,檢查 GeometryType 是否為 LineString。
- 之後,獲取要素的幾何形狀作為 LineString。
- 最後,顯示 X、Y 和 Z 坐標點。
以下代碼示例展示瞭如何使用 C# 從 GPX 文件中讀取路線。
// 此代碼示例演示如何從 GPX 文件讀取 GPS 路線
// 加載 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
.
.
.
在 C# 中從 GPX 文件中提取軌跡
我們可以按照以下步驟從 GPX 文件中讀取軌道作為 MultiLineString 幾何圖形:
- 首先,使用 OpenLayer 方法加載 GPX 文件。
- 接下來,對於圖層中的每個要素,檢查 GeometryType 是否為 MultiLineString。
- 之後,獲取要素的幾何形狀作為 MultiLineString。
- 最後,顯示軌道。
下面的代碼示例展示瞭如何使用 C# 從 GPX 文件中讀取軌跡。
// 此代碼示例演示如何從 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)
在 C# 中讀取 GPX 嵌套屬性
我們可以按照以下步驟讀取段中每個點的特徵並提取嵌套屬性值:
- 首先,創建 GpxOptions 類的一個實例。
- 接下來,將 ReadNestedAttributes 設置為 true。
- 然後,使用 OpenLayer() 方法以 GpxOptions 對像作為參數加載 GPX 文件。
- 接下來,對於圖層中的每個要素,檢查 GeometryType 是否為 MultiLineString。
- 然後,獲取要素的幾何形狀作為 MultiLineString。
- 之後,從每個 MultiLineString 中讀取作為 LineString 的段。
- 最後,讀取段中的點並顯示屬性值。
以下代碼示例展示瞭如何使用 C# 從 GPX 文件中讀取 GPX 嵌套屬性。
// 此代碼示例演示如何從 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("..........");
}
}
}
獲得免費許可證
您可以 獲得免費的臨時許可證 來試用該庫,而沒有評估限制。
結論
在本文中,我們學習瞭如何:
- 在 C# 中使用 OpenLayer 加載 GPX 文件;
- 以編程方式從 GPX 文件中讀取航路點、路線和軌跡;
- 使用 C# 從 GPX 文件中讀取嵌套屬性。
此外,您可以使用 文檔 了解有關 Aspose.GIS for .NET API 的更多信息。如有任何歧義,請隨時在論壇上與我們聯繫。