2017-04-20

トポロジーに関するGISデータ品質の検査

トポロジー (topology) とは、元々は日本語で「位相幾何学」と呼ばれる数学の一分野のことですが、GISの世界では、要素間の空間的な関係 (接する、含む、含まれる等) が定義されている幾何図形の集合について、個々の要素の位置や形状が変化しても要素間の空間的な関係は保たれるという性質、あるいは、そのような性質を持つデータ構造をトポロジー (構造) と呼ぶことが多いようです。

道路網、水道やガスの管網、河川の水系など、ノード (節点) 、および両端点でノードに接するエッジ (辺) で構成されるネットワークとしてモデル化できる地物集合を表すGISデータセットは、トポロジーを持つことが期待されるものの典型であると言えます。

GISデータセットの品質としてトポロジーを持つことが要求される場合、その作成過程では、地物間の空間的な関係が保たれるよう、適切な基準、手法によって品質の評価 (および、その結果に基づく品質の管理) を行う必要があり、FMEはそのためのツールとしても有用であると考えられます。

以下、FMEによってトポロジーに関する品質の評価が容易に行えることを示すため、国土数値情報「河川」データ (Shapefile形式 Point: 河川端点, Line: 流路) からひとつの水系に属する河川端点と流路を抽出し、それらについて次の事項を検査するワークスペース例を掲げます。

1. 河川端点の集合と流路の端点の集合の一致
同一水系に属する河川端点の集合と流路の端点 (流路によって構成されるネットワークのノード) の集合は一致しなければならない。
--> ChangeDetector によって一方の集合にしか含まれない要素を検出し、検出数が 0 ならばOK。

2. 流路の連続性
同一水系に属する全ての流路は、単一の連結したネットワークを構成しなければならない。
--> NetworkTopologyCalculator によって連結範囲ごとに流路をグループ化し、グループ数が 1 ならばOK。

これらはFMEワークスペース例を作成するために設定した架空の品質要求とその評価手法です。実際のデータ品質に関する仕様は「国土数値情報(河川)製品仕様書 第3.1版」に記載されています。

FME 2017.0.0.2 build 17280

FMEワークスペース例













[ESRISHAPE] リーダー: 検査対象水系に関係する都道府県の国土数値情報「河川」データセットを読み込む
Tester: 水系域コードによって検査対象水系に属するフィーチャーのみ抽出
GeometryFilter: ジオメトリタイプによって河川端点 (Point) と流路 (Line) に振り分ける
Matcher: 河川端点の重複を解消
TopologyBuilder: 流路ネットワークのノードとエッジを出力
ChangeDetector: 河川端点と流路端点 (ネットワークのノード) の相違を抽出
NetworkTopologyCalculator: 流路ネットワークが連結している範囲を判定
Aggregator: 連結範囲ごとのグループで流路を集約 (Line -> MultiLine)


国土数値情報「河川」データ (河川端点、流路) は都道府県単位で提供されているため、[ESRISHAPE] リーダーでは、検査対象水系に関係する全ての都道府県のデータセットからフィーチャーを読み込みます。

全ての河川端点、流路フィーチャーは、水系域コードを属性として持っているので、Tester によってその属性の値が検査対象水系の水系域コードに等しいフィーチャーのみを抽出したうえで、GeometryFilter によって河川端点 (Point) と流路 (Line) に振り分けました。

複数の都府県にまたがる流路は都府県境界で分割され、分割点に該当する河川端点は両都府県のデータセットに格納されています。選択した水系が複数の都府県にまたがる場合、県境上の河川端点が重複してしまうので、Matcher によって重複を解消しました。同じ位置に複数の河川端点があった場合、そのうちひとつだけが SingleMatched ポートから出力されます。


TopologyBuilder にラインジオメトリを持つフィーチャーを入力すると、ライン端点間の空間的関係 (接する) に基づくネットワークが構成され、相互の接続先を特定するための属性を持ったノード (ポイント)、エッジ (ライン) が、それぞれ Node ポート、Edge ポートから出力されます。流路を入力すれば、全ての流路の端点 (重複はない) が Node ポート、全ての流路が Edge ポートから出力されることになります。

注: TopologyBuilder の Assume Clean Data (入力データはクリーンである) パラメーターのデフォルト値は No であり、そのままだと、入力ラインが交差していた場合に交点で分割され、その交点も Node ポートから出力されます。しかし、ここでは「河川端点」と流路ネットワークのノードが一致するかどうかを検査するのが目的なので、同パラメーターに Yes を設定し、交差があってもラインを分割しない (余分な交点ノードを発生させない) ようにしました。


ChangeDetector の Original ポートに河川端点 (重複解消後)、Revised ポートに流路ネットワークのノードを入力すると、それらの間の一致判定の結果として、出力ポート別に次のフィーチャーが出力されます。

出力ポート出力フィーチャー
Unchanged一致する Revised フィーチャーがあった Original フィーチャー
Added一致する Original フィーチャーがなかった Revised フィーチャー
Deleted一致する Revised フィーチャーがなかった Original フィーチャー

注: この例の Matcher, ChangeDetector ではジオメトリのみの一致判定を行っていますが、パラメーターの設定によって、ジオメトリと属性の一致判定、属性のみの一致判定を行うこともできます。


NetworkTopologyCalculator は、入力ラインの端点間の接続関係に基づいてネットワークが連結している範囲を判定し、連結範囲ごとにユニークなネットワークID (連番) を定義し、各範囲に属する全てのラインに属性として付加します。次の Aggregator では、Group By パラメーターにネットワークID属性を指定することにより、連結範囲ごとに集約しました。


那珂川水系 (水系域コード: 830302) についての実行結果
入力データ: 国土数値情報「河川」福島県, 茨城県, 栃木県
FME Data Inspector での表示。背景は地理院タイル「白地図 (Outline)」
流路ネットワークの連結範囲 (グループ) ごとに異なる色で表示しています。























福島県と栃木県の県境付近 (背景非表示)
印は、ChangeDetector の Added ポートから出力されたフィーチャー、つまり「一致する河川端点がなかった流路ノード」 です。
県境に沿っている流路は、県境をまたぐたびに不連続になっているようです。

















0 件のコメント:

コメントを投稿