はじめに
字・町丁目などのポリゴン図形を結合した場合、境界付近に穴が開き、ドーナツポリゴンが生成される場合があります。
そこで、ドーナツポリゴンの、穴埋めを行う方法を探していたところ、
NetTopologySuiteにサンプルコードが記載されていたので紹介します。
ドーナツポリゴンの穴埋め
NetTopologySuiteのソースコード内に含まれているHoleRemoverとSmallHoleRemoverクラスを利用します。
使用方法は以下の通りです。SmallHoleRemoverクラスのClean()メソッドを呼び出します。
引数にドーナツポリゴンの図形と、削除する穴の大きさを指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
var feature = new Feature(); // 全ポリゴンの結合 IGeometry unionPoly = null; var geometries = features2.Select(x => x.Geometry).ToList(); foreach (var geometry in geometries) { if (unionPoly == null) { unionPoly = geometry; } else { // ポリゴンを結合 unionPoly = unionPoly.Union(geometry); } } // ドーナツポリゴンの削除 var actual = SmallHoleRemover.Clean(unionPoly, 100); feature.Geometry = actual; |
デバッグでポリゴンの穴の数を確認してみると、削除されていることが分かります。
削除前
削除後
処理結果
ドーナツポリゴンの、穴埋め前後の図形です。
削除前
削除後
まとめ
NetTopologySuiteを使って簡単に、ドーナツポリゴンの穴埋めが可能になりました。
NetTopologySuiteでは、空間演算で利用できる様々なクラスやメソッドが用意ているので非常に助かります。