2015年6月28日日曜日

FME活用例 - 水系域別河川データセットの作成

2015-06-28発信

一言でいうとFMEは何をするソフトウェアなのか?
この問いには、これまで「データ変換」をするものであると答えてきました。
間違いではないのですが、これに続いて「300以上のフォーマットをサポートしている」と紹介すると、FMEは「フォーマット変換」を目的とするツールであると勘違いされてしまうことが多いように感じています。

FMEが目指しているものを少し丁寧に言うと、「ある用途のために必要なデータセットを作成するうえで、可能な限り既存のデータセットを利用するとともに、データ変換の手順を最大限自動化することにより、そのコストを最小化することである」と言えます。
ここで言う「データセット」とは、ある用途で要求されるスキーマ、フォーマットで作成されたデータの集合のことで、データを格納するファイルの配置やファイル名、あるいはデータベース内のテーブルの構成なども仕様として定められているようなものを指します。
「ある用途」は、データセットが必要とされる場面に応じて、システム、プロジェクト、業務などと言い換えることができます。

FMEが多数のフォーマットをサポートしているのは、フォーマットが異なっていたとしても、既存のデータセットを利用して新たなデータセットを作成する手順を自動化できるようにするためであって、フォーマット変換が最終目的ではありません。
もちろんフォーマット変換のためにFMEは活用できますが、FMEの用途はそれだけではないということをご理解いただきたいと思います。

ここで、フォーマットの変換が伴わなくてもFMEが効果的に利用できる例をひとつ紹介いたします。
あるシステムで、全国の河川について水系域別のデータファイルで構成されたデータセットが必要とされており、国土数値情報の河川データを利用してそのデータセットを構築するというミッションがあったとします。
そのデータセットの要件は次のとおりです。
**********
国土数値情報で提供されている河川データセット: 都道府県別の河川流路(ライン)、流路端点(ポイント)データ(Shape形式)を再編成し、次のようなフォルダ階層で水系域別のデータファイル(Shape形式)を格納したデータセットを作成する。

<水系域別河川データセットルートフォルダ>
  + 端点
    + <サブフォルダ: 水系域コードの先頭2桁>
  + 流路
    + <サブフォルダ: 水系域コードの先頭2桁>

出力先のファイル名は次のように水系域コード(6桁の数字)に流路か端点かを表すサフィクスをつけた名前とし、その先頭2桁が一致するサブフォルダに格納する。
端点ファイル名: "<水系域コード>_N.shp"
流路ファイル名: "<水系域コード>_S.shp"

留意事項
国土数値情報(河川)データは都道府県別ファイルで提供されており、県境付近の流路、端点が複数のファイル間で重複しているところがあるため、水系域別に再編成する際には重複データを削除する。
**********

まず、このミッションをクリアするために、FMEがない場合はどのツールを使い、どんな手順が必要で、どのくらいの時間(コスト)がかかりそうかを想像してみてください。
FMEによるソリューションの概要は次のページに掲げました。
FMEケーススタディ「データセットの再編成 - 水系域別河川データセットの作成」

これは全く架空のミッションですが、ディスクシステム内でのファイルの配置やファイル名の命名法がシステムの仕様として定められているということは、現実にも良くあるのではないでしょうか。
そのようなデータセットを構築する際にも、FMEの利用についてご検討いただければ幸いです。

[事例] 水系域別河川データセットの作成

FMEケーススタディ「データセットの再編成 - 水系域別河川データセットの作成」に移動しました。

2015年6月22日月曜日

正規表現の利用

2015-06-22発信

正規表現 (Regular Expressions) というものをご存じでしょうか。

簡単に言えば、正規表現は文字列のパターンを定義した文字列式です。
多くのプログラミング言語が正規表現をサポートしており、これを使うことにより、ある文字列が一定のパターンに一致するかどうかを判定したり、パターン内のグループごとに分割したりすることができます。

FMEでもいくつかのトランスフォーマーで正規表現が利用でき、それらによってデータ変換・統合における課題が簡単に解決できるケースがあります。
以下の例は全て、これまでに実際に私が出会ったことがあるものです。

例1: 都道府県別の統計表
都道府県名の前後や中間に空白が含まれる(「 千  葉  県  」、「 東  京 都 」など)。
都道府県名をキーとして他のテーブルと結合するために、全ての空白を削除しなければならない。

例2: 現地調査結果の表
調査地点の緯度経度が単位を含んだ60進数表現で記述されている(「35度51分56.1秒」、「139度58分25.2秒」など)。
緯度経度に基づいてポイントジオメトリを作成するために、度単位の数値に変換しなければならない。

例3: 会員名簿
生年月日がまちまちな書式の文字列(日付型データではない)で記述されている(「昭和45年12月5日」、「H3.3.10」、「1986/6/25」など)。
データベースに移行するために、和暦年は西暦年に換算したうえで書式を統一しなければならない

FMEでこれらの課題を解決するのには、正規表現が利用できるトランスフォーマー(StringReplacer, StringSearcher)を使った次のようなアプローチが考えられます。

例1: StringReplacerで都道府県名文字列内で「空白類文字」に一致する文字を全て「空文字列」に置き換える。
例2: StringSearcherで緯度、経度文字列から度、分、秒の数値部分を抽出した後、それらを度単位の値に換算する。
例3: これは数段階の処理になります。
(1) StringSearcherで昭和のパターンに一致するものを選択し、年、月、日の値を抽出する。
(2) 昭和に一致しなかったものについて、StringSearhcer(2) で平成のパターンに一致するものを選択し、年、月、日の値を抽出する。
(3) 平成に一致しなかったものについて、StringSearcher(3) で西暦のパターンに一致するものを選択し、年、月、日の値を抽出する。
(4) 昭和・平成の年を西暦年に換算したうえで、データベース移行用の書式に整える。

Excelの関数を使い、あらかじめ望ましい書式に変換した列を元の表に追加しておくこともできますが、これらのトランスフォーマーで正規表現を利用する利点としては次のようなことが挙げられます。
1. 元の表に列を追加した中間データファイルを作成・管理する必要がない。
2. 書式の変換と本体のデータ変換(テーブル結合、ポイントジオメトリ作成、データベースへの移行)をひとつのデータフローで行える。
3. StringSearcherでは想定される書式と一致しないデータの検出も容易にできる。

Excelで書式を変換するよりもはるかに早く、正確にデータ変換・統合ができますし、元のデータに修正があった場合の対応も楽になります。
例示したものと似たような課題に遭遇したときは、正規表現の利用についてもご検討ください。

2015年6月14日日曜日

国内データ変換のサポート強化について

2015-06-14発信

前々回に国土数値情報を例としたXMLデータ処理、前回は日本語文字列に固有の処理に関してお知らせしました。
それらを含めて FME による国内データ変換に関するサポートを強化する方針としており、その一環として、当社ウェブサイトの関連コンテンツを統合・整理して「国内データ変換のサポート」ページを設けました。

FMEサポート | 国内データ変換のサポート
http://www.pragmatica.jp/fme/jpformats.html

現在、このページでは
・標準のGMLリーダーがサポートする国内データ
・国内のフォーマットをサポートするカスタムフォーマット(リーダー)
・国内のフォーマットや基準に基づく処理や日本語文字列に固有の処理を行うカスタムトランスフォーマー
のリストを掲げています。
当社が開発するカスタムフォーマット等は、FME Store での公開、または、このページからのダウンロードによって提供していく方針としています。
どうぞご利用ください。

XMLやCSVなどの汎用的なファイル形式を利用しているフォーマットの場合、スキーマの仕様とサンプルデータがあればカスタムフォーマットなどを作成することができます。
独自のファイル形式の場合は、その仕様が公開されているか、または、その所有権者から開示についての許諾が得られれば、プラグインの開発について検討できます。

今後、皆様のご意見をうかがいながら国内フォーマットやデータ変換のサポート範囲をさらに拡大していきたいと考えています。
サポートすることが望ましいと思われるフォーマットや汎用的なデータ変換についてのご意見・ご要望がありましたら、お知らせくださるようお願いいたします

2015年6月7日日曜日

日本語文字列に固有の処理について

2015-06-07発信

FMEは空間データ処理だけでなく豊富な文字列処理機能も持っており、データベースの構築や移行などの際の文字列データの検証や修正にも活用することができます。
文字列処理を行うためのトランスフォーマーは日本語文字にも対応しており、特に問題なく使用することができます。

しかし、日本語の文字列に固有の処理(典型的には全角文字と半角文字の間の変換など)がデフォルトの設定で簡単に行えるようなトランスフォーマーはありません。
思うような処理をするには、ユーザーがトランスフォーマーのパラメーターに面倒な入力をしたり、データフローの中にスクリプトを組み込んだりしなければならないこともあり、これには結構手間がかかります。

そこで、これまでに当社が日本語文字列処理を伴うデータ変換用に作成したワークスペースの中から日本語文字列に固有の処理で、かつ、汎用的に使えそうな部分を抽出・再構成してカスタムトランスフォーマーを作成し、公開することにしました。
現在公開中の主なものを掲げます。

JpCaharacterWidthChanger
属性文字列内のひらがな/全角カタカナ/半角カタカナの変換、英数字や記号の全角/半角の変換を行います。

JpWarekiConvertor
日付文字列に含まれる年について和暦と西暦(グレゴリオ暦)の間の変換を行い、変換後の日付文字列を新しい属性に格納します。

JpAddressPartExtractor
都道府県名から始まる住所文字列を、都道府県名、振興局等名、政令市・郡名、市区町村名、その他に分割するとともに、都道府県コードを抽出します。

これらのカスタムトランスフォーマーは次のウェブページからダウンロードできます(ダウンロードするにはメール本文の後に記載しているサポートリソースアクセス用のユーザー名とパスワードによる認証が必要です)。
http://www.pragmatica.jp/fme/jpformats.html

ダウンロードしたファイル(zip圧縮)を解凍して展開される"*.fmx"ファイルを"マイ ドキュメント/FME/Transformers"フォルダに保存してください。
その後FMEワークベンチを起動すると、Transformer Gallery の Categorized/Pragmatica フォルダ内にそのトランスフォーマーが現れ、標準のトランスフォーマーと全く同じ方法でワークスペースに追加して利用できるようになります。
各トランスフォーマーの使用方法についてはそれぞれのヘルプを参照してください。

日本語文字列処理に関してご意見やご要望がありましたら、随時お知らせください。

2015年6月1日月曜日

XMLデータ処理事例 - 国土数値情報

2015-05-30発信

XMLはプラットフォームに依存しないデータ交換用のフォーマットとして広く利用されています。
FMEはXMLおよびGMLなどのXMLベースの標準的なフォーマットをサポートしていますが、あらゆる応用スキーマや仕様をカバーしているわけではありません。
XML文書から読み込んだデータをシステムで利用可能な形態にする、あるいは、他のフォーマットのデータをXML形式に変換するには、応用スキーマ等に従って必要な変換を行うためのデータフローを組み立てる必要があります。

それを行うために多くのトランスフォーマーが用意されていますが、個々の応用スキーマごとにゼロからワークスペースを作成するのは効率的ではありません。
しかし、FMEには、複数のワークスペースで共通するデータフローを部品化する仕組み(カスタムフォーマット、カスタムトランスフォーマー)があります。
その仕組みを利用して、ある分野、用途でのXMLデータ処理における共通のデータフローをあらかじめ部品として用意しておけば、個々の応用スキーマに対応するワークスペースの作成は容易になると考えられます。
その事例として、国土数値情報(JPGIS2.1/GML3.2)に対応する次のような「部品」を作成し、FME Storeで公開しました。

1. カスタムフォーマット

カスタムフォーマットとは、リーダーとして使用できる部品です。
FME Storeで公開されているカスタムフォーマットは、リーダーと全く同じ方法でワークスペースに追加できます(初回の追加時はインターネットに接続している必要があります)。

(1) JPS2_KSJ_VECTOR: Japanese National Land Numerical Information (JPGIS2.1/GML3.2) Vector
国土数値情報ベクターデータ(点、線、面)を読み込み、ジオメトリを作成します。
データの種類ごとに異なる主題属性は標準のXMLリーダーで読み込み、このカスタムフォーマットで読み込んだジオメトリをFeatureMergerなどで結合することにより、ジオメトリと属性を備えた完全なフィーチャーが作成できます。

(2) JPS2_KSJ_MESH: Japanese National Land Numerical Information (JPGIS2.1/GML3.2) Mesh
国土数値情報メッシュデータを読み込み、各メッシュ領域を表す矩形ポリゴン(またはメッシュ中心のポイント)を作成するとともに、メッシュの属性もあわせて抽出します。
属性の数や内容はデータの種類や作成年によって異なりますが、このカスタムフォーマットは、データに記述されている全ての属性を"_data{}"という名前のリスト属性に格納します。
必要に応じて、AttributeRenamerなどでリストの各要素を適切な属性名に変更することができます。

これらのカスタムフォーマットを使用して国土数値情報データを変換するためのワークスペース例(テンプレート)も FME Store で公開しました。
ワークベンチメニュー: File > New で"Create Workspace"画面を開き、左側のペインで FME Store > Pragmatica を選択してください。
画面右上にテンプレートのリスト、右下にリスト内で選択されているテンプレートの説明(英文・和文)が表示されます。
[Choose]ボタンをクリックすると、リスト内で選択されているテンプレートに基づくワークスペースが自動的に作成されます。

2. カスタムトランスフォーマー

カスタムトランスフォーマーとは、標準のトランスフォーマーと同じ方法で使用できる部品です。
FME Storeで公開されているカスタムトランスフォーマーは、標準のトランスフォーマーと全く同じ方法でワークスペースに追加できます(初回の追加時はインターネットに接続している必要があります)。
以下のトランスフォーマーは、Transformer Gallery 内の FME Store / Pragmatica カテゴリに格納されています。

(1) JpKsjPointExtractor
ポイントジオメトリに基づいて、国土数値情報の仕様に準じたXML要素 <gml:Point> を作成します。

(2) JpKsjCurveExtractor
ラインジオメトリに基づいて、国土数値情報の仕様に準じたXML要素 <gml:Curve> を作成します。

(3) JpKsjSurfaceExtractor
ポリゴンジオメトリに基づいて、国土数値情報の仕様に準じたXML要素 <gml:Curve>, <gml:OrientableCurve>, <gml:Surface> を作成します。

これらのトランスフォーマーが作成したジオメトリ部分のXML要素と、応用スキーマに基づいて作成した主題属性のXML要素をひとつのXML文書に書き出せば、国土数値情報データファイルができあがります。
主題属性のXML要素を作成するためのデータフローは応用スキーマごとに定義する必要があります。

-----
国土数値情報は一事例に過ぎません。上記のような手法は、どのような分野、用途においても、XMLデータ処理を効率化するために応用できるものであると考えています。
XMLデータ処理が課題になっている場合は、FMEもひとつの選択肢としてご検討ください。


なお、基盤地図情報に関しては、
- 基本項目は標準のGMLリーダーで読み込めます。
- 数値標高モデル(DEM)はカスタムフォーマット"Japanese Fundamental Geospatial Data (FGD) DEM" (JP_FGD_DEM) でラスターとして読み込めます。