2015-07-09

ジオメトリや属性が一致するフィーチャーの検出

データの品質検査の一環として、ひとつのフィーチャータイプ(フィーチャークラス、レイヤ、テーブル)内におけるフィーチャー間のジオメトリや属性の重複の有無の確認や、相互に関連がある複数のフィーチャータイプにおけるフィーチャー間の整合性の確認を行うケースは多いと思われます。
FME には、ジオメトリや属性が一致する(または一致しない)フィーチャーを検出するためのトランスフォーマーが用意されており、そのような検査を行うためのワークスペースを作成・実行することができます。

公開されているデータから仕様で定められた品質要求に対して不適合のケースを探すのは難しいので、ここでは、データの作成方法における制約により、重複していたり整合性がとれていなかったりするケースがデータの仕様として許容されている「国土数値情報(小学校区)」データを題材として、架空の品質要求に基づいて模擬的に検査を行うワークスペースの例を掲げることとします。
FME 2015.1.0.3 build 15485

以下の説明における「データ品質要求」はFMEの機能を説明することのみを目的として設定した架空のものであり、それに基づいて検出される不適合は、実際の品質要求に対する不適合に該当するものではありません。

=====
国土数値情報(小学校区) - 公立小学校(点)、通学区域(面)について次のデータ品質要求に基づく検査を行う。
1. 全ての小学校について、市区町村コード、設置主体、学校名が一致する点と面が存在すること。
2. 通学区域(面)は全てユニークであり、重複した面が存在しないこと。

ソースデータセット
国土数値情報ダウンロードサービスサイトよりダウンロードした「小学校区」データ(JPGIS2.1/GML形式)
-----
参考: 国土数値情報ダウンロードサービスサイト > データの詳細(小学校区) 作成方法(抜粋)
... 一部地域においては、市区町村の了解の元、推定による直線的な境界線やポリゴンの重複等も用いている箇所が存在する。また、山間部等の居住不可能地においては作成していない。また、一部の市区町村については、資料の収集不可等のため通学区域の範囲データを作成していない。これらのことより、本データは十分な精度や正確性をもったものではなく、利用にあたっては公式な資料としては扱えないなど、注意が必要である。詳細な通学区域を判断する場合は、各市区町村に問い合わせる必要がある。
=====

FMEワークスペース例















[XML] リーダー + [JPS2_KSJ_VECTOR] リーダー(カスタムフォーマット): 小学校区データを読み込む。
国土数値情報(小学校区)データ(JPGIS2.1/GML形式)には、 PublicElementarySchool (公立小学校: 点)と SchoolDistrict (通学区域: 面)の2つのフィーチャータイプが含まれており、各フィーチャーは XML リーダーと JPS2_KSJ_VECTOR カスタムフォーマットによって読み込むことができます。
このワークスペースでは、FME Store "KSJ Vector - A27 ElementarySchoolArea (Point, Surface)" テンプレートのデータ読込部分を再利用しています(左側上下2つのブックマーク)。JPS2_KSJ_VECTOR カスタムフォーマットについては次のページも参照してください。
FMEサポート | 国内データ変換のサポート

参考: FME Store テンプレートの使用方法
インターネットに接続している状態で FME Workbench を起動し、メニュー File > New を選択して "Create Workspace" 画面(下図)を開いてください。左側のペインで FME Store / Pragmatica を選択すると、右上に公開中のテンプレートのリスト、右下にリストで選択されているテンプレートの説明(Description, Usage 等)が表示されます。テンプレート名をダブルクリックするか、または、右下の Choose ボタンをクリックすると、そのテンプレートに基づくワークスペースが自動的に作成され、カスタマイズ、実行、保存ができます。



















1. 学校(点)と通学区域(面)の対応の検査
Aggregator: 通学区域について飛び地を集約して1校あたり1フィーチャーとする。
ChangeDetector: 点と面の対応を検査する。
ChangeDetector は、2つの入力ポート(Original, Revised)から入力されたフィーチャーの間で、ジオメトリおよび/または属性が一致するものがあるかどうかを検査します。一部更新されたデータセットの更新前と更新後について、変更がないフィーチャー(Unchanged)と変更されたフィーチャー(Added: 更新後, Deleted: 更新前)を抽出する場合に使用されることが多いのですが、ここでは、学校(点)と通学区域(面)の共通の属性(市区町村コード、設置主体、学校名)に着目して点と面の間で相互に一致するものがあるかどうかを検査し、
a. 一致する面がある点(Unchanged: 対応する面あり)
b. 一致する点がない面(Added: 対応する点なし)
c. 一致する面がない点(Deleted: 対応する面なし)
を抽出するのに使用しています。架空のデータ品質要求に照らせば、Added ポートと Deleted ポートから出力されるフィーチャー(b と c)が不適合ということになります。

2. 通学区域(面)の形状がユニークかどうかの検査
Matcher: 通学区域(面)のうち重複するものがあるかどうかを検査する。
Matcher は、入力された全てのフィーチャーについて、ジオメトリおよび/または属性が一致しているものがあるかどうかを検査し、一致する相手がひとつ以上あった全てのフィーチャーを Matched ポート、一致しているフィーチャーのグループごとに代表ひとつずつを SingleMatched ポート、一致する相手がひとつもなかったフィーチャーを NotMatched ポートから出力します。ここでは、重複している通学区域(面)のジオメトリ(ポリゴン)を検出するために使用しています。架空のデータ品質要求に照らせば、Matched ポートから出力されるフィーチャーが不適合ということになります。

ChangeDetector, Matcher の各出力ポートには Inspector を接続し、実行結果を Data Inspector に出力して確認できるようにしています。

C 県のデータ検査結果: FME Data Inspector 表示例
・属性が一致する点(学校)がない面(通学区域): 該当なし
・属性が一致する面(通学区域)がない点(学校): 赤色ポイント
・ジオメトリの重複がある面(通学区域): 水色ポリゴン














この例では ChangeDetector, Matcher の出力ポートに Inspector を接続し、結果を FME Data Inspector に出力して確認するだけにしていますが、CSV, Excel 等のライターを接続すれば、検査結果のレポートとして結果の一覧表を作成することもできます。

なお、仮に「学校(点)はその通学区域(面)の内部になければならない」という品質要求があったとすれば、Clipper, SpatialFilter, SpatialRelator といったジオメトリ間の空間的な関係に基づく処理を行うトランスフォーマーによって検査することができます。それらのトランスフォーマーについては別のシナリオで取り上げる予定です。

0 件のコメント:

コメントを投稿