Shapefile形式は、地理情報を表示するために使用される地理空間ベクトルデータ形式です。ポイント、ライン、ポリゴンフィーチャの位置、ジオメトリ、属性をシェープファイルに保存できます。この記事では、C#でシェープファイルを作成して読み取る方法を学習します。
この記事では、次のトピックについて説明します。
- シェープファイルとは
- シェープファイルの使用方法
- シェープファイルを作成および読み取るためのC#API –.NETGISライブラリ
- C#を使用してシェープファイルを作成する
- C#で既存のシェープファイルに機能を追加する
- C#を使用してシェープファイルを読み取る
シェープファイルとは
シェープファイルは、GISアプリケーションで使用されるベクトルデータの形式で地理空間情報を表します。これは、ESRIと他のソフトウェア製品との相互運用性を促進するためのオープン仕様としてESRIによって開発されました。これには、マップ上にポイント、ライン、またはポリゴンを描画するジオメトリデータとデータ属性が含まれています。シェープファイルは、ArcGISやQGISなどのいくつかのGISソフトウェアプログラムで直接読み取ることができます。
シェープファイルの使用方法
スタンドアロンのシェープファイル(.shp)は、ソフトウェアアプリケーションでは使用できません。ただし、GISソフトウェアで使用できる有効なシェープファイルには、次の追加の必須ファイルが含まれている必要があります。
- 形状インデックスファイル(.shx) - a positional index of the feature geometry;
- dBase属性ファイル(.dbf) - a dBASE file that stores all the attributes of the shapes;
- コードページファイル(.cpg)-文字エンコードを識別するためのファイル。
シェープファイルを作成して読み取るためのC#API –.NETGISライブラリ
シェープファイルを作成または読み取るには、Aspose.GIS for .NETAPIを使用します。追加のソフトウェアなしで、地図のレンダリング、地理データの作成、読み取り、変換を行うことができます。他のいくつかのサポートされているファイル形式とともにシェープファイルの操作をサポートします。
APIのVectorLayerクラスは、ベクターレイヤーを表します。ファイルに保存されている地理的特徴のコレクションを操作するためのさまざまなプロパティとメソッドを提供します。このクラスのCreate()メソッドを使用すると、サポートされているベクターレイヤーを作成できます。 Driversクラスは、サポートされているすべての形式のドライバーを提供します。 APIのFeatureクラスは、ジオメトリとユーザー定義の属性で構成される地理的特徴を表します。
APIのDLLをダウンロードするか、NuGetを使用してインストールしてください。
PM> Install-Package Aspose.GIS
C#を使用してシェープファイルを作成する
以下の手順に従って、プログラムでシェープファイルを簡単に作成できます。
- まず、VectorLayer.Create()メソッドを使用してレイヤーを作成します。
- 次に、FeatureAttributesをレイヤーの属性のコレクションに追加します。
- 次に、ConstructFeature()メソッドを使用してFeatureクラスのインスタンスを作成します。
- その後、異なる属性の値を設定します。
- 最後に、Add()メソッドを使用して機能を追加します。
次のコードサンプルは、C#でシェープファイルを作成する方法を示しています。
// このコード例は、新しいシェープファイルを作成する方法を示しています。
// 新しいシェープファイルを作成します
using (VectorLayer layer = VectorLayer.Create(@"C:\Files\GIS\NewShapeFile_out.shp", Drivers.Shapefile))
{
// 機能を追加する前に属性を追加する
layer.Attributes.Add(new FeatureAttribute("name", AttributeDataType.String));
layer.Attributes.Add(new FeatureAttribute("age", AttributeDataType.Integer));
layer.Attributes.Add(new FeatureAttribute("dob", AttributeDataType.DateTime));
// 機能を追加して値を設定する
Feature firstFeature = layer.ConstructFeature();
firstFeature.Geometry = new Point(33.97, -118.25);
firstFeature.SetValue("name", "John");
firstFeature.SetValue("age", 23);
firstFeature.SetValue("dob", new DateTime(1982, 2, 5, 16, 30, 0));
layer.Add(firstFeature);
// 別の機能を追加して値を設定する
Feature secondFeature = layer.ConstructFeature();
secondFeature.Geometry = new Point(35.81, -96.28);
secondFeature.SetValue("name", "Mary");
secondFeature.SetValue("age", 54);
secondFeature.SetValue("dob", new DateTime(1984, 12, 15, 15, 30, 0));
layer.Add(secondFeature);
}
C#を使用して既存のShapeFileに機能を追加する
以下の手順に従って、既存のシェープファイルに新しい機能を追加することもできます。
- まず、Drivers.Shapefile.EditLayer()メソッドを使用してシェープファイルをロードします。
- 次に、ConstructFeature()メソッドを使用してFeatureクラスのインスタンスを作成します。
- その後、異なる属性の値を設定します。
- 最後に、Add()メソッドを使用して機能を追加します。
次のコードサンプルは、C#を使用して既存のシェープファイルに機能を追加する方法を示しています。
// このコード例は、シェープファイルを編集する方法を示しています。
// ファイルパス
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");
// シェープファイルレイヤーを編集する
using (var layer = Drivers.Shapefile.EditLayer(path))
{
// 機能を追加
var feature = layer.ConstructFeature();
feature.Geometry = new Point(34.81, -92.28);
object[] data = new object[3] { "Alex", 25, new DateTime(1989, 4, 15, 15, 30, 0) };
feature.SetValues(data);
layer.Add(feature);
}
C#を使用してシェープファイルを読み取る
以下の手順に従って、シェープファイルから属性を読み取ることができます。
- まず、Drivers.Shapefile.OpenLayer()メソッドを使用してシェープファイルをロードします。
- レイヤー内の各機能をループします。
- 属性をループして、属性の詳細を表示します。
- 最後に、ポイントのジオメトリを確認し、ポイントを読み取ります。
次のコードサンプルは、C#を使用してシェープファイルを読み取る方法を示しています。
// このコード例は、新しいシェープファイルを読み取る方法を示しています。
// ファイルパス
string path = Path.Combine(dataDir, "NewShapeFile_out.shp");
// レイヤーを開く
var layer = Drivers.Shapefile.OpenLayer(path);
foreach (Feature feature in layer)
{
foreach (var attribute in layer.Attributes)
{
// 属性の詳細を表示
Console.WriteLine(attribute.Name + " : " + feature.GetValue(attribute.Name));
}
// ポイントジオメトリを確認します
if (feature.Geometry.GeometryType == GeometryType.Point)
{
// 読み取りポイント
Point point = (Point)feature.Geometry;
Console.WriteLine(point.AsText() + " X: " + point.X + " Y: " + point.Y);
Console.WriteLine("---------------------");
}
}
name : John
age : 23
dob : 1982-02-05T16:30:00
POINT (33.97 -118.25) X: 33.97 Y: -118.25
---------------------
name : Mary
age : 54
dob : 1984-12-15T15:30:00
POINT (35.81 -96.28) X: 35.81 Y: -96.28
---------------------
name : Alex
age : 25
dob : 04/15/1989 15:30:00
POINT (34.81 -92.28) X: 34.81 Y: -92.28
無料ライセンスを取得する
無料の一時ライセンスを取得して、評価の制限なしにライブラリを試すことができます。
結論
この記事では、
- プログラムで新しいシェープファイルを作成します。
- シェープファイルに新しい機能を追加します。
- シェープファイルレイヤーを編集します。
- シェープファイルレイヤーを開き、C#を使用して属性を読み取ります。
さらに、ドキュメントを使用して、他のいくつかのGISファイル形式を操作する方法を調べたり、Aspose.GIS for.NETAPIについて詳しく知ることができます。あいまいな点がある場合は、フォーラムまでお気軽にお問い合わせください。