Q&A 属性値に基づく出力先フィーチャータイプの振り分け

Q: あるPOI(Point Of Interest)に関する全国分のデータを読み込んでデータ内容に変更を加えた後、都道府県別のGISデータファイル(Shapefile形式)に出力するワークスペースを作成しようとしています。POIフィーチャーは属性として所在地の都道府県コード(01~47)と都道府県名(北海道~沖縄県)を持っていますが、それらに基づいて出力先のファイル名を {都道府県コード}_{都道府県名}(例えば北海道ならば「01_北海道」)と定義し、フィーチャーをそれぞれ該当する都道府県のファイルに振り分けて出力することはできますか。

FME 2019.1

A: フィーチャータイプ・ファンアウト(Feature Type Fanout: 属性値に基づく出力先フィーチャータイプの振り分け)という機能によって実現できます。

(1) キャンバス上のデータフロー末尾にAttributeCreatorを追加し、都道府県コード属性と都道府県名属性を使って出力先のShapefileファイル名(拡張子を除く)とすべき文字列属性を追加します。AttributeCreatorの代わりにStringConcatenatorやAttributeManagerを使うこともできます。トランスフォーマーのパラメーター設定フィールドに現れる @Value() はFME固有の関数であり、@Value(属性名) と記述した部分は、実行時にフィーチャーが持つその名前の属性の値に置き換えられます。

(2) Shapefileライターをワークスペースに追加した(Add Writer画面を [OK] で閉じた)ときに次のようなライターフィーチャータイプのプロパティ設定画面が表示されますが、これはデフォルトの設定のまま [OK] で閉じます。

(3) キャンバス上でAttributeCreatorの出力ポートとライターフィーチャータイプの入力ポートを接続した後、再度ライターフィーチャータイプのプロパティ設定画面を開き、Parameters タブの Shapefile Name パラメーターに (1) で作成した属性を設定します。

以上の設定をしてからワークスペースを実行すると、各フィーチャーが {都道府県コード}_{都道府県名} という名前のファイルに振り分けて出力されます。

なお、AttributeCreatorなどで出力先ファイル名をあらかじめ作成する代わりに、ライターフィーチャータイプのフィーチャータイプ名フィールドにファイル名を組み立てるための文字列式を設定することもできます。文字列式はトランスフォーマーのパラメーター入力フィールドと同様、テキストエディタ(Text Editor)を使って設定できます。

このように、ライターフィーチャータイプのフィーチャータイプ名フィールド(Shapefile形式の場合は “Shapefile Name” パラメーター)にフィーチャーの属性または属性を使った文字列式を設定し、その値に応じて出力先のフィーチャータイプを振り分ける機能をフィーチャータイプ・ファンアウト(Feature Type Fanout)と呼びます。


フィーチャー、フィーチャータイプ、データセット

FMEでは、データの構造を表現するうえでフィーチャー (Feature)、フィーチャータイプ (Feature Type)、データセット (Dataset) という用語を用います。

フィーチャーとは、事物をモデル化してアプリケーションで表示したり分析したりするために必要な情報を格納するためのデータ構造であり、典型的には、あるスキーマ(属性の数、名前、データ型などの定義)に基づく属性(名前と値のペア)のセットとジオメトリ(図形データ)で構成されます(ジオメトリを持たないフィーチャーもあり得ます)。フィーチャータイプとは、同種の(通常は共通のスキーマによって構造が規定される)フィーチャーの集合の入れ物です。アプリケーションやデータフォーマットによってはレイヤ、フィーチャークラス、テーブルなどの用語が使われますが、それらの概念をFMEで統一的に取り扱うための総称であると考えてください。そして、ひとつ以上のフィーチャータイプによって規定される論理的な構造と、それにしたがって格納されているフィーチャー全体の集合をデータセットと呼びます。

フィーチャータイプとデータセットがコンピューターシステムにおける何に対応するかはデータフォーマットによって異なります。例えば、Esri Shapefile 形式の場合はファイル(厳密には *.shp, *.shx, *.dbf などの同一の名前で拡張子が異なる複数ファイルのセット)がフィーチャータイプに対応し、ひとつ以上のファイルを格納したフォルダーがデータセットに対応しますが、OGC GeoPackage 形式の場合はテーブルがフィーチャータイプに対応し、ひとつ以上のテーブルを格納したファイル(*.gpkg)がデータセットに対応します。

FMEには、今回説明した「フィーチャータイプ・ファンアウト (Feature Type Fanout)」のほかに、属性値に基づいて出力先データセットを振り分ける「データセット・ファンアウト (Dataset Fanout)」という機能もあります。これらふたつのファンアウト機能は、データ変換の目的や出力先のデータフォーマットに応じて使い分けたり併用したりすることができますが、フルに活用するには、フィーチャータイプとデータセットの違いを理解することが重要です。