QGISで凸包(convex hull)を使ってみる。凸包とは何か?
今回は、QGISで凸包(convex hull)を作成してみたいと思います。
凸包とは?
まず、凸包とは何か簡単に説明していきたいと思います。
凸包(convex hull) とは、与えられた点をすべて包含する最小の凸多角形(凸多角形)凸多角形とは、内部や境界にある2点間を結んだ線分がその多角形の底に出ることがない多角形をいう。
簡単にいうと対象となる点などの集合の、どこの2点間を結んでもその中に収まる最小の多角形をその集合の凸包というという感じです。
QGISで凸包を作成する。
点、ライン、ポリゴンでそれぞれ凸包を作成していきたいと思います。
凸包(convex hull)のツールの場所は、のツールの場所は「ベクタ」タブ→「空間演算ツール」→「凸包(convex hull)」で作成することができます。
「ベクタ」タブ→「空間演算ツール」→「凸包(convex hull)」
入力レイヤ
凸包を作成したい点、ライン、ポリゴンを選択
選択した地物のみ
選択したデータのみ凸包したい場合は、こちらのチェックボックスをオンにします。
出力レイヤ
一時レイヤでも作成できますが、右のボックスを選択して保存先、ファイル名を指定します。
アルゴリズムの終了後に出力ファイルを開く
終了後にレイヤに結果が追加されます。
点の凸包を作成
まずは点を作成します。下のような点レイヤを作成しました。
点は1点ごとシングルパートで作成されるため、凸包する際はマルチパート(いくつかの点を1つにまとめる)ことが必要です。
シングルパートをマルチパートに変換
この、作成したばかりの点レイヤだとシングルパートのためマルチパートに変換します。
シングルパートからマルチパートへの変換は、「ベクタ」タブ→「ジオメトリツール」→「シングルパートをマルチパートに集約」で行います。
「ベクタ」タブ→「ジオメトリツール」→「シングルパートをマルチパートに集約」
設定画面はこのような感じになっています。
入力レイヤ
シングルパートをマルチパートに変換するレイヤを選択。プロジェクト内にあるレイヤが選択できます。右のボックスを選択するとプロジェクト内にないデータも選択できます。
選択した地物のみ
入力レイヤで選択しているデータ(デフォルトだと黄色マークされている)のみシングルパートをマルチパートに変換したい場合は、こちらのチェックボックスをオンにします。
属性(フィールド)
選択した属性フィールドの値ごとにマルチパートフューチャとなります。
出力レイヤ
一時レイヤでも作成できますが、右のボックスを選択して保存先を指定します。
アルゴリズムの終了後に出力ファイルを開く
終了後にレイヤに結果が追加されます。
マルチパートに変換したところで、先ほどの点レイヤを凸包(convex hull)してみました。
ラインの凸包を作成
次はラインで作成します。下のようなラインレイヤを作成しました。
ラインは始点と終点のみの直線のラインだと面として作成できないため、始点と終点以外にも点があるラインを作成することが必要です(直線ではなく折れている線)。いくつかのラインを凸包する際はマルチパート(いくつかのラインを1つにまとめる)ことが必要です。
上のラインをシングルパートのまま凸包(convex hull)した場合はこんな感じです。始点と終点のみのラインはエラーで作成されません。
ラインレイヤ全体をシングルパートからマルチパートにした場合はこんな感じです。全てのラインが包まれた最小の多角形ができます。
ポリゴンの凸包を作成
最後にポリゴンで作成します。下のようなポリゴンレイヤを作成しました。
ポリゴンは凸集合と非凸集合に別れており、シングルパートで凸包(convex hull)を行うと、そのままのポリゴンとなる場合もある。非凸集合(ギザギザしているようなポリゴン)のみ凸集合となるポリゴンが作成される。
上のポリゴンをシングルパートのまま凸包(convex hull)した場合はこんな感じです。右側の図形以外は凸包されたポリゴンとなっており、右側のポリゴンのみ形の違う凸包のポリゴンが作成されました。
ポリゴンレイヤ全体をシングルパートからマルチパートにした場合はこんな感じです。全てのポリゴンが包まれた最小のポリゴンが作成されます。
最後にまとめ
- 凸包(convex hull)とは、与えられた点をすべて包含する最小の凸多角形(凸多角形)凸多角形とは、内部や境界にある2点間を結んだ線分がその多角形の底に出ることがない多角形
- 「ベクタ」タブ→「空間演算ツール」→「凸包(convex hull)」
- 点は1点ごとシングルパートで作成されるため、凸包する際はマルチパート(いくつかの点を1つにまとめる)ことが必要
- ラインは始点と終点のみの直線のラインだと面として作成できないため、始点と終点以外にも点があるラインを作成することが必要
- いくつかのラインを凸包する際はマルチパート(いくつかのラインを1つにまとめる)ことが必要です。
今回は凸包について説明しました。物によっては、一度マルチパートに変換することが必要となり少し手間があったりしますが、属性フィールドごとに、凸包(convex hull)することができたり、便利なツールですので是非使ってみてください。