2015-08-17

境界ラインに基づく面の作成

面の境界 (boundary) を表すラインデータがあれば、AreaBuilder によってその境界内部の面を作成 (復元) することができます。
ここでは、特定の行政区画について、基盤地図情報の行政区画界線データに基づき、出典地図情報レベル (出典地図の縮尺) 別に面データを作成するワークスペース例を掲げます。
FME 2015.1.10 build 15515

=====
基盤地図情報の行政区画界線データに基づき、C県K市 (団体コード 12217) の行政区画の面を出典地図情報レベル別に作成する。

ソースデータ:
基盤地図情報ダウンロードサービスサイトよりダウンロードしたC県K市の行政区画界線、行政区画代表点データ。
出典地図情報レベル (2500 または 25000) は、行政区画界線、代表点ともに orgGILvl 属性に格納されている。
団体コードは、代表点の admCode 属性に格納されている。
=====

FMEワークスペース例

















[GML] リーダー: 基盤地図情報行政区画線 (AdmBdry) と行政区画代表点 (AdmPt) を読み込む。
Tester: 対象とする行政区画 (admCode = 12217) の代表点を抽出する。
AreaBuilder: 出典地図情報レベル (orgGILvl) 別に面を作成する。
SpatialFilter: 対象とする行政区画の面を抽出するとともに、代表点の属性を面に結合する。
AttributeKeeper: 不要な属性を削除する (必要な属性のみ残す)。
Inspector: 結果を FME Data Inspector で表示する。

結果: C県K市の一部
境界は出典地図情報レベルによって異なる (水色: 2500, 黄色: 25000)














FME は基盤地図情報の応用スキーマ定義ファイル "FGD_GMLSchemaV4.0.xsd" をバンドルしており、基本項目については特別なパラメーター設定などをせずに [GML] リーダーで読み込むことができます。
リーダーを追加するとき、Add Reader 画面で Dataset として行政区画界線 (ファイル名に AdmBdry が含まれる) と行政区画代表点 (同 AdmPt) のデータファイルを選択し、OK ボタンで閉じたときに表示されるフィーチャータイプ選択画面で AdmBdry と AdmPt を選択すると、それらのフィーチャータイプがキャンバスに現れます。

Select Feature Types 画面 (Add Reader を OK で閉じたときに AdmBdry と AdmPt を選択)

















AreaBuilder は、端点同士で接しているラインがある領域を取り囲んでいる場合、それらのラインを境界とする面を作成します。

AreaBuilder 処理イメージ (FME ヘルプより引用)










基盤地図情報の行政区画界線データファイルには、出典地図情報レベル (orgGILvl: 2500 または 25000) が異なるラインデータが格納されていますが、Group By パラメーターに orgGILvl 属性を設定することによってレベル別に面を作成することができます。

AreaBuilder パラメーター設定画面























行政区画代表点 (AdmPt) については、まず、Tester で対象とするC県K市 (admCode = 12217) の代表点のみを抽出しました。そのうえで、SpatialFilter によってその代表点が含まれる面を選択します。
SpatialFilter は、Candidate ポートから入力したフィーチャーのうち、Filter ポートから入力したフィーチャーとの間で Tests to Perform パラメーターに指定した空間的関係 (この例では Within) があったものを Passed ポート、関係がなかったものを Failed ポートから出力します (「ジオメトリ間の空間的関係」参照)。
また、Merge Attributes パラメーターに Yes (デフォルト) を設定した場合は、Passed ポートから出力するフィーチャーに関係があった Filter フィーチャーの属性を付加します。これにより、代表点が持っている市区町村名 (name) と団体コード (admCode) 属性を面に付加しました。

SpatialFilter パラメーター設定画面


























基盤地図情報の行政区画線データでは、同じ出典地図情報レベルのラインは必ず端点同士で接しているので、AreaBuilder で簡単に面を作成することができましたが、ラインの端点同士が接していることが保証されないデータでも、Snapping Type 及び Snapping Tolerance パラメーターの設定によって近接する端点を一致させたり、Intersector または TopologyBuilder によって交点で分割するといった前処理を加えたりすれば、AreaBuilder によって面が作成できるケースはあります。

紙地図に基づいて新たな面データを作成するような場合に、デジタイズの工程では境界ライン (属性なし) と代表点 (属性あり) を作成しておき、AreaBuilder と SpatialFilter によって面データに変換するという手順も考えられます。

0 件のコメント:

コメントを投稿