C#を使用してGPXファイルを読み取る

GPXファイルには、GPS交換フォーマットで保存されたGPSデータが含まれています。これは、ウェイポイント、トラック、ルートなどの地理情報を記述するためのXMLスキーマです。これにより、GPSユニットとソフトウェアアプリケーション間でGPSデータを転送できます。 GPXファイルを簡単にロードし、.NETアプリケーションでプログラムによってGPS情報を抽出できます。この記事では、C#を使用してGPXファイルを読み取る方法を学習します。

この記事は、次のトピックをカバーするものとします。

GPXファイルを読み取るためのC#API

GPXファイルから機能を読み取るには、Aspose.GIS for .NETAPIを使用します。追加のソフトウェアなしで、地図をレンダリングし、地理データを作成、読み取り、変換することができます。また、KMLファイルをGPX形式に、またはその逆に変換することもできます。 APIのDLLをダウンロードするか、NuGetを使用してインストールしてください。

PM> Install-Package Aspose.GIS

C#でGPXファイルからウェイポイントを読み取る

以下の手順に従って、GPXファイルからポイントジオメトリとしてウェイポイントを読み取ることができます。

  1. まず、OpenLayerメソッドを使用してGPXファイルをロードします。
  2. 次に、レイヤー内の各フィーチャについて、GeometryTypePointであるかどうかを確認します。
  3. その後、フィーチャのジオメトリをポイントとして取得します。
  4. 最後に、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ファイルからラインストリングジオメトリとしてルートを読み取ることができます。

  1. まず、OpenLayerメソッドを使用してGPXファイルをロードします。
  2. 次に、レイヤー内の各フィーチャについて、GeometryTypeLineStringであるかどうかを確認します。
  3. その後、フィーチャのジオメトリをLineStringとして取得します。
  4. 最後に、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ジオメトリとしてトラックを読み取ることができます。

  1. まず、OpenLayerメソッドを使用してGPXファイルをロードします。
  2. 次に、レイヤー内の各機能について、GeometryTypeMultiLineStringであるかどうかを確認します。
  3. その後、フィーチャのジオメトリをMultiLineStringとして取得します。
  4. 最後に、トラックを表示します。

次のコードサンプルは、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ネスト属性を読み取る

以下の手順に従って、セグメント内の各ポイントの特徴を読み取り、ネストされた属性値を抽出できます。

  1. まず、GpxOptionsクラスのインスタンスを作成します。
  2. 次に、ReadNestedAttributesをtrueに設定します。
  3. 次に、GpxOptionsオブジェクトを引数としてOpenLayer()メソッドを使用してGPXファイルをロードします。
  4. 次に、レイヤー内の各機能について、GeometryTypeMultiLineStringであるかどうかを確認します。
  5. 次に、フィーチャのジオメトリをMultiLineStringとして取得します。
  6. その後、各MultiLineStringからLineStringとしてセグメントを読み取ります。
  7. 最後に、セグメント内のポイントを読み取り、属性値を表示します。

次のコードサンプルは、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について詳しく知ることができます。ご不明な点がございましたら、フォーラムまでお気軽にお問い合わせください。

関連項目