2015-08-12

TIN (不規則三角網) の作成

不規則に分布する多数の地点についてある現象の観測値が与えられたとき、その現象の全体的な傾向を可視化したり任意の地点の値を推定したりするために、観測地点を頂点 (Z = 観測値) とする TIN (Triangulated Irregular Network: 不規則三角網) を作成するのが有効な場合があります。
FME では、TINGenerator または SurfaceModeller トランスフォーマーによって 3D ジオメトリや点群 (ポイントクラウド) に基づいて TIN を作成することができます。
ここでは、原子力規制委員会が公表している空間線量率の測定結果について、TINGenerator によって TIN を作成するワークスペース例を掲げます。
FME 2015.1.1.0 build 15515

=====
2011年3月以降、福島第一原子力発電所周辺の地域において不規則に分布する地点で測定された空間線量率についてCSV形式で整理された表に基づき、各年の測定結果を TIN に変換する。
・測定地点ごとに、年数回の測定結果のうち各年最後の測定結果をその年の値とする。
・同じ1/10細分メッシュ区画に含まれる地点は同一の測定地点であるとみなす。

ソースデータ:
放射線モニタリング情報 原子力規制委員会
モニタリング結果 > 環境モニタリング一般等 > 空間線量率等 > 空間線量率、積算線量
空間線量率の測定結果
・東京電力株式会社福島第一原子力発電所の20km圏内の空間線量率の測定結果(電力会社による測定) (CSV)
・東京電力株式会社福島第一原子力発電所の20km以遠の空間線量率の測定結果 (CSV)
ダウンロードファイル名: inside_20km_airdose.csv, outer_20km_airdose.csv
2011年3月以降の測定日順で、各測定地点の測定日、座標 (緯度, 経度)、地上1m高さの空間線量率等が記録されている。
=====

FMEワークスペース例

















[CSV] リーダー: 測定結果を記録した CSV テーブル (2表: 20km圏内, 20km以遠) を読み込む。
VertexCreator: 測定地点座標 (X, Y)、測定結果 (Z) に基づき 3D ポイントを作成する。
JpMeshCodeExtractor: 各測定地点の 1/10 細分メッシュコードを取得する。
SubstringExtractor: 測定日 (年月日文字列) から年 (先頭4文字) を抽出する。
Sorter: CSV行番号の降順 (測定日が新しい順) でソートする。
DuplicateRemover: 測定地点 (1/10細分メッシュ) 別・年別に最初に現れるポイントを抽出する。
Reprojector: 投影座標系に変換する。
Scaler: Z 座標値 (空間線量率測定結果) を 100 倍する (可視化したときに起伏を強調するため)。
TINGenerator: 年別の TIN を作成する。
Inspector: FME Data Inspector で結果 (TINの辺、三角形、サーフェスモデル) を表示する。

結果: FME Data Inspector による 3D 表示 (3種類×4年分の個別表示結果を合成した画像)
上段: TINの辺 (3Dライン), 中段: 三角形 (3Dポリゴン) によるTINの表現, 下段: TINサーフェス



















ソースデータには、2011年3月以降、各測定地点の年数回の測定結果が記録されていますが、一部の測定地点では、測定日によってデータに記述されている座標が若干異なるものがあります。また、福島第一原子力発電所の20km圏内のデータでは地点を特定するための属性がありません。
そこで、このワークスペース例では、同一の1/10細分メッシュ区画内にある地点は同一の測定地点であるとみなすことにし、次の手順で測定地点 (1/10細分メッシュ) 別・年別に、各年最後の測定結果のポイントを抽出しました。

(1) [CSV] リーダーフィーチャータイプ: csv_line_number を現す (Expose)。
csv_line_number は [CSV] リーダーが各フィーチャーに与えるフォーマット属性のひとつで、CSVテーブルの行番号を格納します。CSVテーブルには測定日の順にデータが記録されているので、行番号の順 = 測定日の順とみなすことができます。

(2) VertexCreator: 測定地点と測定値を表す 3D ポイントを作成する。
X: 経度, Y: 緯度, Z: 空間線量率測定値

(3) JpMeshCodeExtractor: 1/10細分メッシュコードを取得する。
JpMeshCodeExtractor は FME Store で公開しているカスタムトランスフォーマーで、入力フィーチャーのジオメトリの最初の頂点を含むメッシュ区画のメッシュコードをフィーチャーに属性 (_meshcode) として付加します。
参考: FMEサポート | 国内データ変換のサポート

(4) SubstringExtractor: 測定日 (年月日文字列) から年 (先頭4文字) を抽出する。
各レコードの測定日フィールドには測定日が yyyy/m/d 形式の文字列で記録されているので、その先頭4文字を抽出してフィーチャーに属性 (_year) として付加します。

(5) Sorter: CSV行番号 (csv_line_number) の降順でフィーチャーをソートする。
これにより、フィーチャーの順番が測定日の降順 (新しい順) になります。

(6) DuplicateRemover: _meshcode, _year の重複を削除する。
測定日の降順でソートしたので、これによって測定地点 (1/10細分メッシュコードが同じ地点) ごとに、各年最後のフィーチャーが Unique ポートから出力されます。

DuplicateRemover の Unique ポートから出力されるポイントについて、Reprojector によって投影座標系に変換、可視化したときに起伏が強調されるように Scaler によって Z 座標 (空間線量率測定結果) を 100 倍してから、TINGenerator によって TIN を作成します。

TINGenerator は、入力フィーチャーのジオメトリ各頂点を頂点とするドロネー三角形を生成し、それらの辺 (3Dライン) を TINEdges ポート、三角形 (3Dポリゴン) を Triangles ポート、TINサーフェスを TINSurface ポート、頂点 (3Dポイント) を VertexPoints ポートから出力します。

TINGenerator パラメーター設定画面

















Group By: _year
年別に TIN を作成するため、年を格納した属性 (_year) を指定しました。

Surface Tolerance: 0
0 を指定すると全てのポイントが TIN の頂点として使われます。
このパラメーターに 0 より大きい値を設定した場合は、次のルールによってポイントの「間引き」が行われます。
  • ポイントの位置 (x, y) が、先に入力されたポイントによって形成された TIN の 2D 凸包 (Convex Hull) の外部にあるとき、そのポイントは TIN の頂点として追加される。
  • そうでないときは、
    • 入力ポイントの Z 座標値と、先に入力されたポイントによって形成された TIN 上の入力ポイントの位置 (x, y) における Z 値 (内挿補間値) の差を求める。
    • その差が Surface Tolerance パラメーターに設定された値よりも大きければ入力ポイントは TIN の頂点として追加され、そうでなければ破棄される。

ワークスペース例では結果を FME Data Inspector で表示しただけですが、適当なフォーマットのライターをワークスペースに追加すれば、結果をファイルに出力することができます。

0 件のコメント:

コメントを投稿