[GDAL/OGR In CSharp] C#のOGRを使って図形の情報を読み取る(位置・属性)

前回までは、C#でGDAL/OGRを使ってシェープファイルを作図する記事を書いてまいりましたが、今回はシェープファイルの内容(ジオメトリ・属性)を読み取ってみたいと思います。

基本的には、Driver→DataSource→Layer→Feature→Geometryの順番に開いていき、ジオメトリや属性テーブルの内容を読み取っていきます。
早速ですが、サンプルコードを。

44・45行目がコメントアウトされていますが、ここを外すとポリゴンの重心を出力します。
ポリゴンは穴が空いていますが、穴が空いた状態の重心を出力しているようです。

このコードでは、ポリゴンを構成するリング(閉じた線)の座標をすべて読み取っています。
穴あきポリゴンのため、1つの地物にリングは二つあります。
この二つのリングを識別するためにCSVファイルではGeomNo(サンプルソースの変数名:i)を出力しています。

出力されたCSVファイル(冒頭)

もとのシェープファイルと、構成点位置・属性を出力したCSVファイルをQGISで図化したのが下図です。ここではGeomNo=0が赤、GeomNo=1が青になっています。

ポリゴンシェープファイルの読み取り結果

毎度のオマケ:OGR.Ogr.RegisterAll()で「System.TypeInitializationException」が出たときは、構成マネージャーでx68かx64に変更(64bit版GDALを入れていればx64、32bit版ならx86)すると幸せになれるでしょう。