[OGR/GDAL]空間解析 Geometry.Method(Geometry)

GISの主要な機能の空間解析は、OGR/GDALにも実装されているので試してみました。
様々な空間解析のうち、今回は表題のとおりジオメトリクラスのメソッドで、(別の)ジオメトリを引数とするメソッドについて紹介します。

//この前にデータソース・レイヤを開く必要があります
// 参考→https://www.kobiwa.jp/category/gis/ogr/
//入力図形A・Bを取得
OGR.Geometry pgA = lyA.GetFeature(0).GetGeometryRef(); //入力図形A
OGR.Geometry pgB = lyB.GetFeature(0).GetGeometryRef(); //入力図形B

//空間解析本番(Unionの場合)
OGR.Geometry pgOut = pgA.Union(pgB); 
//Unionのほか、Intersection・SymmetricDifference・Differenceがある
//それぞれの挙動は以降を参照ください。

基本的な書き方は上記の通り1)この前にデータソース・レイヤを開く必要があります。詳しくは、以前の記事をご参照ください。で、8行目の「Union」の部分がイロイロと変わります。
ここで、下記のように2つの図形(PgAとPgB)があった場合に、PgAのメソッドで空間解析を実施した場合について、その出力結果を見てみます。

空間解析に用いる入力図形

1.Intersection(交差、PgA AND PgB)
まずは、Intersectionメソッドです。
二つの図形の重なりある部分が出力されますので、論理演算でいえばANDに相当します。
Arc GISだとクリップ(Clip)に相当します。

Intersection

2.Union(融合、PgA OR PgB)
次に、Unionメソッドです。
二つの図形を融合した図形が出力され、論理演算でいえばORに相当します。

Union

3.SymmetricDifference(対称差、PgA XOR PgB)
SymmetricDifferenceメソッドでは対称差が出力されます。
論理演算でいえばXORに相当する部分です。
なお、「SymDifferenceメソッド」と同じ結果が出力されました。OGRのドキュメントを見ても、どちらとも「Compute symmetric difference」と書かれているので挙動は同じだと思います。

SymmetricDifference

4.Difference(差分、PgA – PgB)
Differenceメソッドでは、二つの図形の差分が出力されます。
これまでのIntersection・Union・SymmetricDifferenceはPgB.メソッド(PgA)のように入れ替えても結果は変わりませんが、Differenceメソッドは順番を入れ替えると結果が変わります。
AからBを引きたい場合はA.Difference(B)、BからAを引きたい場合はB.Difference(A)とします。
下記の図形は「PgA.Difference(PgB)」の例ですので、くれぐれも順番にはお気をつけください。

Difference

今回は、二つの図形を用いた空間解析の例について、紹介してみました。
これらの空間解析を用いることによって「○○市のうち××地点から10km以内の面積」のような空間解析をすることができます。
空間解析自体は、GISソフト(QGISやArc GISなど)で実行することが出来ますが、例えば250mメッシュなどのように大量の図形を処理する場合には、何らかのプログラムを書かないと現実的には処理が不可能になります。

そんなときの、少しでも参考になれば幸いです。

脚注

脚注
1 この前にデータソース・レイヤを開く必要があります。詳しくは、以前の記事をご参照ください。