2015-07-28

属性値によるフィーチャーの出力先の振り分け

FME のライターは、各フィーチャーが持っている属性の値に応じて異なるフィーチャータイプ、データセットに振り分けて出力する機能を持っており、これを利用すると、ひとつのファイルに格納されているデータをある規則にしたがって複数のファイルに分割することも容易にできます。
ここでは、国土数値情報「ダム」データ(全国1ファイル)を都道府県別ファイルに分割するワークスペース例を掲げます。
FME 2015.1.1.0 build 15515

=====
国土数値情報「ダム」(Shapefile 形式, 全国1ファイル)を次のように分割する。
ケース1: 都道府県別ファイル
ケース2: 堤高50m未満、堤高50m以上に区分したサブフォルダ内の都道府県別ファイル
どちらのケースでも分割後のファイル名は "<都道府県コード (2桁数字)>_<都道府県名>.shp" とする。
各ダムが所在する都道府県は、属性(都道府県名から始まる所在地文字列)によって判別する。

ソースデータ
国土数値情報ダウンロードサービスサイトよりダウンロードした「ダム」 Shapefile 形式データ。
ダウンロードファイル名: W01-05-g_Dam.shp (全国1ファイル)
属性 "W01_007" に堤高 (数値), "W01_013" に都道府県名から始まる所在地 (文字列) が格納されている。
=====

ケース1: 都道府県別ファイル

FMEワークスペース例 1






















[SHAPE] リーダー: 国土数値情報「ダム」データを読み込む
JpPrefectureNameExtractor: 都道府県名から始まる所在地属性から都道府県名と都道府県コードを抽出する。
StringConcatenator: 都道府県別の出力先ファイル名を作成する。
[SHAPE] ライター: 各フィーチャーを都道府県別ファイルに振り分けて出力する。

結果1: 都道府県別ファイル

















JpPrefectureNameExtractor は「FMEサポート > 国内データ変換のサポート」ページで公開しているカスタムトランスフォーマーで、入力フィーチャーが持っている都道府県名から始まる住所や地名の属性文字列に基づいて都道府県名と都道府県コード (2桁の数字) を抽出し、それらを格納した属性を付加して出力します。デフォルトではそれらの属性名は "_pref_name" (都道府県名), "_pref_code" (都道府県コード) になりますが、パラメーター設定画面で他の属性名に変更することもできます。

JpPrefectureNameExtractor パラメーター設定画面














次に StringConcatenator によってアンダースコア "_" をはさんで都道府県コードと都道府県名を連結し、出力先のファイル名を作成しました。
StringConcatenator には2種類のパラメーター設定画面 (Basic モード, Advanced モード) があり、FME ワークベンチの初期設定では Basic モードで表示されます。

StringConcatenator パラメーター設定画面 (Basic モード)
左下 Switch To Advanced ボタンをクリックすると Advanced モードに切り替わります。





















StringConcatenator パラメーター設定画面 (Advanced モード)
左下 Options ボタンのクリックにより表示されるメニューで Switch To Basic を選択すると Basic モードに切り替わり、Default To Advanced Editor をチェックすると、次回以降 Advanced モードがデフォルトになります。





















以上のように出力先ファイル名を格納した属性を作成すれば、ライターフィーチャータイプのプロパティ設定画面 General タブの出力先フィーチャータイプ名フィールド (Shapefile 形式の場合は "Shape File Name") でそれを選択することにより、各フィーチャーの出力先を、その属性の値と等しい名前のファイルに振り分けることができます。

ライターフィーチャータイププロパティ設定画面 / General タブ















また、フィーチャータイプ名フィールドでは、テキストエディタによって StringConcatenator パラメーター設定画面 (Advanced モード) と同じ要領で出力先のフィーチャータイプ名とする文字列を作成することもできます。
この場合は StringConcatenator を省くことができます。

ライターフィーチャータイププロパティ設定画面 / General タブ / フィーチャータイプ名フィールド編集













ケース2: 堤高50m未満、堤高50m以上に区分したサブフォルダ内の都道府県別ファイル

出力先とするサブフォルダ名を格納した属性をフィーチャーに追加したうえで、ライターの Fanout Dataset (データセット振り分け) パラメーターを設定します。

FMEワークスペース例 2






















ケース1のワークスペースのライターフィーチャータイプの前に AttributeCreator を挿入し、Conditional Value (条件別の値) 設定機能により、堤高を格納している属性 "W01_007" の値が 50 未満であるかどうかに応じた文字列 (「堤高50m未満」または「堤高50m以上」) を「堤高区分」属性に格納しました。
これを出力先のサブフォルダ名とします。

AttributeCreator パラメーター設定画面 (Conditional Value 設定)
















Navigator ウィンドウでライターの Advanced / Fanout Dataset パラメーターをダブルクリックして Edit Fanout Dataset Paramters 画面を開き、Fanout Dataset (データセット振り分け) 用のパラメーターを設定します。

Fanout Dataset パラメーターの設定













Fanout Dataset: Yes  (データセットの振り分けをする)
Fanout Folder: <出力先のルートフォルダパス>
Attribute to Fanout on: 堤高区分  (出力先のサブフォルダ名を格納した属性)

結果2: 堤高区分別サブフォルダ/都道府県別ファイル

















Shapefile 形式の場合はフォルダがデータセット、ファイルがフィーチャータイプに対応するので、Fanout Dataset パラメーターの設定ではフォルダのレベル、出力先フィーチャータイプ名の設定ではファイルのレベルでフィーチャーの出力先が振り分けられます。
しかし、フォーマットによっては、ファイルがデータセット、ファイル内のフィーチャータイプ区分(レイヤ、クラス、テーブルなど呼び方はさまざま)がフィーチャータイプに対応するものもあり、そのようなフォーマットの場合は、Fanout Datset ではファイルのレベル、出力先フィーチャータイプ名ではレイヤ等のレベルで振り分けられることになります。
データの物理的な保存形態のどのレベルがデータセット、フィーチャータイプに対応するかはフォーマットによって異り、それに応じてどのレベルで出力先が振り分けられるかも異なることに注意してください。

国土数値情報「ダム」Shape形式データ属性テーブルのほとんどのレコードでは "W01_013" フィールドに所在地 (都道府県名から始まる住所や地名) が記録されていますが、ごく一部、そのフィールドが空白のレコードもありました。
JpPrefectureNameExtractor トランスフォーマーは、指定された属性文字列によって都道府県が識別できなかったとき、そのフィーチャーを Failure ポートから出力します。全てのデータを都道府県別ファイルに移行するためには、それらについて他の手段 (例えば既存の都道府県ポリゴンとの空間的な位置関係) によって所在地の都道府県を判別するべきでしょうが、この記事はフィーチャータイプ名、Fanout Dataset によって出力先を振り分ける方法を説明することがメインテーマなので、ワークスペース例では割愛しました。

0 件のコメント:

コメントを投稿