2016-03-19

基盤地図情報DEMに基づく傾斜方向ラスターの作成

基盤地図情報の数値標高モデル (DEM) のデータは XML 形式のファイルで提供されていますが、FME は、それをファイル (メッシュ区画) 単位の数値ラスターとして読み込むことができます。

ラスターのデータ変換を行うためのさまざまなトランスフォーマーが用意されているので、FME は、基盤地図情報 DEM に基づいて地形のさまざまな特性の分析、あるいはそのためのデータ作成を効率的に行うツールとしても活用できるかも知れません。

ここでは、基盤地図情報10mメッシュ DEM に基づいて 10m x 10m グリッドの傾斜方位角を求め、さらに、傾斜方向を表現するラスターに変換するワークスペース例を掲げます。

サンプルとして、基盤地図情報ダウンロードサービスサイトからダウンロードした次の4ファイル (三宅島周辺2次メッシュ4区画分) の10mメッシュ DEM データを使用しました。
----------
FG-GML-5139-03-dem10b-20090201.xml
FG-GML-5139-04-dem10b-20090201.xml
FG-GML-5139-13-dem10b-20090201.xml
FG-GML-5139-14-dem10b-20090201.xml
----------

FME 2016.0.1.1 build 16177


FMEワークスペース例

[JP_FGD_DEM] リーダー: 基盤地図情報10mメッシュ DEM データ (XML) を数値ラスターとして読み込む。
RasterMosaicker: 読み込んだ複数のラスター (この例では2次メッシュ4区画分) を結合してひとつのラスターに変換
Reprojector: 座標変換 (この例では EPSG:3857 - Spherical Mercator に変換)
RasterResampler: セルサイズ (グリッド間隔) を 10m x 10m に調整
[GEOTIFF] ライター (1): 座標変換、セルサイズ調整後のDEMラスターを出力

(傾斜方向ラスターへの変換)
RasterAspectCalculator: 傾斜方位角をセル値とする REAL64 (64ビット浮動小数点数) 数値ラスターに変換
RasterExpressionEvaluator: 傾斜方向コードをセル値とする UINT8 (符号なし8ビット整数) 数値ラスターに変換
RasterBandNodataSetter: Nodata値の定義 (この例では 99 を Nodata値とする)

(グレースケール表示用パレットの設定)
AttributeFileReader: 表示用の GRAY8 パレット定義を外部ファイルから読み込んで属性として格納
RasterPaletteAdder: パレット設定
[GEOTIFF] ライター (2): 傾斜方向 UINT8 数値ラスター (グレースケール表示用パレット付き) を出力

(画像ラスターへの変換)
RasterPaletteResolver: セル値を対応するパレットの値に変更
RasterInterpretationCoercer: RGBA32 画像ラスターに変換
[PNGRASTER] ライター: 傾斜方向 RGBA32 画像ラスターを出力


JP_FGD_DEM は FME Store で公開されているカスタムフォーマットで、一般のリーダーと同じ操作で任意のワークスペースに追加し、基盤地図情報 DEM データ (XML) を数値ラスター (REAL64, 1バンド, Nodata値=-9999) として読み込むためのリーダーとして利用できます。

RasterAspectCalculator は、DEM ラスターの各セルの傾斜方位角 (傾斜の下り方向。北向きを 0 度とし、右回りで計測した 0 度以上 360 度未満の実数値) を求め、その値をセル値とするラスターに変換して出力します。ただし、海域などで元々 Nodata 値だったセル、および、平坦な地形で方位角が求められなかったセルには、元のラスターで定義されている Nodata 値が設定されます (参考: 傾斜度は RasterSlopeCalculator で求められます)。

RasterExpressionEvaluator により、ひとつ (A) または ふたつ (A, B) のラスターについてセル単位の数値演算を行い、その結果をセル値とするラスターに変換することができます。この例では、RasterAspectCalculator によって求められた傾斜方位角に基づいて傾斜方向を示すコード (整数値) を求め、UINT8 ラスターに変換しました。傾斜方位角と傾斜方向の対応については、次の表のように定義しました。「グレースケール」は、後述する画面表示用の値です。

傾斜方位角の範囲 [以上, 未満) 単位:度傾斜方向傾斜方向コードグレースケール
Nodata: 平坦で求められないなし0128
[337.5, 360.0) または [0.0, 22.5)132
[22.5, 67.5)北東264
[67.5, 112.5)3128
[112.5, 157.5)南東4192
[157.5, 202.5)5224
[202.5, 247.5)南西6192
[247.5, 292.5)西7128
[292.5, 337.5)北西864
Nodata: 海域などで標高データがないなし99255

この定義に基づき、RasterExpressionEvaluator では次の式によって傾斜方位角から傾斜方向コードを求めています。

@if(@isnodata(B[0]),99,@if(@isnodata(A[0]),0,@if(337.5<=A[0],1,@uint8((A[0]+67.5)/45))))
----------
・B[0] (DEMラスターのセル値) が Nodata (海域など) なら 99
・そうでなく、A[0] (傾斜方位角ラスターのセル値) が Nodata (平坦) なら 0
・そうでなく、A[0] が 337.5 以上なら 1 (北)
・そうでければ、A[0] に 67.5 を加えてから 45 で除した値の小数部を切り捨てて UINT8 整数に変換した値
----------
数式中の A[0], B[0] は、それぞれ RasterExpressionEvaluator のA, B ポートから入力されたラスターのセル値を示します。ラスターは複数のバンドを持つことができるので、[ ] 内のインデクス (0 から始まる連番) によってどのバンドのセル値なのかを指定します。この例で取り扱うラスターは 1 バンドしか持たないので、有効なインデクスは 0 だけです。

次の RasterBandNodataSetter では、99 がこのラスターの Nodata 値として解釈されるように設定しました。

ここまでで傾斜方向コードをセル値とする UINT8 数値ラスターが作成できました。これ以降は、画面上で南向きのセルが明るく、北向きのセルが暗く表示されるようにし、さらに、RGBA カラー画像に変換するための処理です。それらについては後述します。


結果: 三宅島 DEM および傾斜方向ラスター (FME Data Inspector による表示例)
左: DEM (数値標高モデル) ラスター 濃: 低 -> 淡: 高 (色が定義されていない数値ラスターのデフォルトの表示)
右: 傾斜方向ラスター 濃: 北向き -> 淡: 南向き (グレースケール)
基盤地図情報10mメッシュ数値標高モデルに基づいて作成
注: グレースケールで表示した傾斜方向ラスターは、一見、陰影起伏 (hillshade) 図に似ていますが、意味するものは全く異なります。陰影起伏図は RasterHillshader トランスフォーマーによって作成できます。




















なんらかの分析に使用するためのデータとしては、RasterBandNodataSetter までのデータフローで作成されるラスターで十分ですが、このワークスペース例では、画面表示したときに斜面がどの方角を向いているかを直感的に分かり易くするために、グレースケールで南向きを明るく、北向きを暗く表示するための処理を追加しました。

まず、AttributeFileReader で、表示用のパレットの定義を外部ファイルから読み込みます。外部ファイルはテキスト形式で、次のように1バイトグレースケール表示用のパレット (傾斜方向コード=セル値とグレースケール値の対応) を定義しました。パレット定義の書式については、RasterPaletteExtractor トランスフォーマーのヘルプを参照してください。

GRAY8
0 128
1 32
2 64
3 128
4 192
5 224
6 192
7 128
8 64
99 255

RasterPaletteAdder でこのパレットをラスターに設定することにより、データとしてのセル値は傾斜方向コードのままで、画面表示したときに上の図の右のように、各傾斜方向コードに対応するグレーの濃淡で表示されるようになります。この例では、これを GeoTIFF 形式のファイルに出力しました。

パレットを持ったラスターに対して RasterPaletteResolver を適用すると、各セルの値が対応するパレットの値に置き換わり、パレットなしのラスターに変換されます。この場合はパレットのタイプが GRAY8 なので、1バイトグレースケールラスターになります。これは不可逆な変換で、このときに元のセル値=傾斜方向コードは失われます。

さらに、RasterInterpretationCoercer によって、他の構造のラスターに変換することもできます。この例では、RGBA32 カラー画像ラスター (4バンド) に変換したうえで、最後に PNG 形式のファイルに出力しました。

上記のワークスペース例で作成される GeoTIFF 形式のデータと PNG 形式のデータは、画面上ではどちらも同じグレースケールで表示されますが、GeoTIFF はセル値として傾斜方向コードを保持した数値ラスターであり、PNG は画面表示用の色の情報だけを持った画像ラスターであることに留意してください。

補足1: PNG 形式もパレットをサポートしているので、RasterPaletteAdder に PNGRASTER ライターを接続し、UINT8 (パレット付き) のラスターとして PNG ファイルに出力することもできます。その場合は、傾斜方向コードもセル値として保持されます。

補足2: パレットの定義は、AttributeCreator などで作成する属性値として記述することによってワークスペースに組み込むこともできますが、上記のワークスペース例のように外部ファイルで定義しておくと、画面上の表現方法の変更がし易いというという利点があります。例えば、次のように外部ファイルでパレットの定義を RGB24 に変更してからワークスペースを再度実行すると、傾斜方向を色分けしたカラフルなラスターが出力されます。

RGB24
0 51,255,0
1 51,102,255
2 51,204,255
3 51,255,0
4 255,255,0
5 255,102,0
6 255,255,0
7 51,255,0
8 51,204,255
99 255,255,255

0 件のコメント:

コメントを投稿