概要

TeraScan®ソフトウェアでは、さまざまなフォーマットのデータ入力に対応しています。今回はNetCDFをTDF(TeraScan Data Format)に変換し、画像化する方法をご紹介します。
JAXA ひまわりモニタより取得した海面水温のNetCDFデータををサンプルデータとして処理します。

処理の手順
1.nctdfコマンドにてNetCDFをTDFに変換します。
$ nctdf
in/out files : char(255) ? 20180428030000-JAXA-L2P_GHRSST-SSTskin-H08_AHI-v1.2-v02.0-fv02.0.nc 20180428030000-JAXA-L2P_GHRSST-SSTskin-H08_AHI-v1.2-v02.0-fv02.0.tdf
include_vars : char(255) ? [] sea_surface_temperature
getinfo name is sea_surface_temperature

対象のVariableとして海面水温(sea_surface_temperature)を指定します。

2.editdimコマンドにてデータのdimensionを修正し、縦横の向きを指定します。
$ editdim
input file(s) : char(255) ? 20180428030000-JAXA-L2P_GHRSST-SSTskin-H08_AHI-v1.2-v02.0-fv02.0.tdf
dimname : char( 31) ? lat
newname : char( 31) ? []line
varname : char( 31) ? []
scale : char( 31) ? []
offset : char( 31) ? []
coord : char( 31) ? [] 3
$ editdim
input file(s) : char(255) ? 20180428030000-JAXA-L2P_GHRSST-SSTskin-H08_AHI-v1.2-v02.0-fv02.0.tdf
dimname : char( 31) ? lon
newname : char( 31) ? []sample
varname : char( 31) ? []
scale : char( 31) ? []
offset : char( 31) ? []
coord : char( 31) ? [] 2

NetCDFデータにはさまざまなパターンがあり、変換しただけではデータの向きまではわかりません。このためどちらが縦でどちらが横かを指定します。
自動的に付与されたdimnameのlatとlonをlineとsampleにリネームし、lineをY軸(3)、sampleをX軸(2)にします。

3.diminfoコマンドにてデータの縦横サイズを取得します。
$ diminfo
input file : char(255) ? 20180428030000-JAXA-L2P_GHRSST-SSTskin-H08_AHI-v1.2-v02.0-fv02.0.tdf
dimname : char( 31) ? line
item : char( 10) ? [size]
6001
$ diminfo
input file : char(255) ? 20180428030000-JAXA-L2P_GHRSST-SSTskin-H08_AHI-v1.2-v02.0-fv02.0.tdf
dimname : char( 31) ? sample
item : char( 10) ? [size]
6001

縦横のサイズが6001×6001ということがわかりました。

4.データのエリアに合わせたMaster(ひな形)ファイルを作成します。
$ master2
output file : char(255) ? [Master]
projection : char( 14) ? rectangular
min_lat : char( 15) ? 60s
max_lat : char( 15) ? 60n
min_lon : char( 15) ? 160w
max_lon : char( 15) ? 80e
corner_edges : char( 3) ? [yes]
square_aspect : char( 3) ? [yes] no
num_lines : int ? 6001
num_samples : int ? 6001
est_center : char( 3) ? [yes]
master2: 6001 lines, 6001 samples, 2.22602 km pixel height, 4.45204 km pixel width

緯度経度範囲(緯度60n~60s・経度80e~160w)は、同じNetCDFファイルのlatとlonのVariableを参照しました。

5.作成したMasterファイルに、変換したTDFの海面水温データをコピーします。
$ copyvar
in/out files : char(255) ? 20180428030000-JAXA-L2P_GHRSST-SSTskin-H08_AHI-v1.2-v02.0-fv02.0.tdf Master
include_vars : char(255) ? [] sea_surface_temperature
overwrite_vars : char( 3) ? [no]

これにより位置情報を持ったTDFになります。

6.余計なtime dimensionが付与しているので、subsetコマンドにて必要なline, sample dimensionのみ取り出します。
$ subset
in/out files : char(255) ? Master Master.sub
include_vars : char(255) ? [] sea_surface_temperature
clip_dims : char(159) ? [] line sample
range_pairs : int ( 4) ? 1 6001 1 6001
instantiate : char( 3) ? [no]

subsetはTDFから指定したx,y位置のエリアを切り出すコマンドで位置情報は継承されます。

7.簡易画像出力スクリプトquicklookを使用して画像出力します。
$ quicklook variable=sea_surface_temperature palette=hsl256.fish format=png Master.sub 20180428030000-JAXA-L2P_GHRSST-SSTskin-H08_AHI-v1.2-v02.0-fv02.0.png

作成された画像が以下のファイルです。(800×800にリサイズしています)リサイズ前の画像はこちら
20180428030000-JAXA-L2P_GHRSST-SSTskin-H08_AHI-v1.2-v02.0-fv02.0.resize.png