making grid file from raw vender format mb files - 測深器の生データから直接グリッドをつくる
使うコマンド(GMTではありません,MB-systemです) mblist, mbgrid
- 現在世界で一般的に使われているマルチビーム測深器は、船から扇状にビームを出し、船の直下だけでなく船の側方まで水深
の数倍の範囲(この幅をスワス幅という。スワスは芝刈りの意味)の海底の水深値を測定している。スワス幅や1回の発信(pingという)で何個
の水深値をどれくらいのデータ間隔で収録するかは、測深器の種類と調査海域の水深によって異なる。新しい測深機では,スワス幅は最大150°にもなる。
- 左図は、SeaBeam2100系の測深器の概念図。ここでは、スワス幅が120度
で、水深値は1度ごとに得られる場合(1回のpingで120個の水深値を取得)を示している。船は測線上を走りながら次々発信する。一般に発信間隔(ping interval)は水深によってシステムが自動的に調整し、観測者が決めることができないことが多い。
- このようなシステムで得られた生データを使って海底地形図を描くためのグリッドデータを作成する際に重要なのは、グリッドサイズを用途にあわせて決めることである。
- 左図のように進行方向に直交する向きを考えると、受波ビームの間隔が一定の角度(この図の場合は1度)の場合,隣のデータとの間隔は船の直下で小さく、外側になるほど大きい。この図の仕様の場合は、その差は2倍。このような方式をequi-angleモードと呼ぶ。ただ
し、浅海用の測深器や最近の深海測深器の場合は、equi-distanceモード(海底面でのサンプリングがほぼ等間隔になるようにビームを構成)がdefaultになっている場合が多い(だいたい選べるのだが)。この場合,スワス内でのデータは均等分布となる。オペレーションとしては,distanceを指定するのではなく,スワス幅に対してデータをいくつ取るかで指定されることが多い.ただし,どちらも偏向を利用した受波ビーム合成なので,equi-angleで1度でデータが生成されたとしても,本質的に空間分解能が1°というわけではない.実際には,海底のある面積〔範囲)から返ってくる音波から水深を算出するが,この範囲はfoot printと呼ぶ.foot printが2°でbema intervalが1°と書いてあれば,隣のビーム(データ)とfoot printが重なっていると考えればよい。
- 一方,右図のように,船の進行方向のデータ分布は、船の速度と発信間隔で決まる。発信間隔はシステムが決めるので調整できないが,観測者が船の速度を制限することでデータの密度をコントロールすることが可能。また,例えばEM124(白鳳丸2021~)では,dual swathと称して1回の発信で進行方向に2つに分かれた走波を行うことができる.
- グリッド化する時は、この2つの点を考慮し、適切なグリッドサイズを選定する。
- 測深器の生データは機種ごとに異なり、バイナリを含んだきわめて複雑なファイルフォーマットを持つ。これらを扱うために、各測深器メーカーが提供するソフトウェアや汎用商用ソフトウェア(CARIS HIPS, HYPACK等)が存在する。現在,共同利用船舶では,船上処理はCARIS-HIPSが利用されている.ただし,アカデミックプライスでも年間ライセンス料金はかなり高額である。一方,かなり広く使われているMBsystemというフリーのプログラム群がある。米国グループが開発したもので,ユーザーコミュニティが維持管理している。世界の主な測深器の生データフォーマットをほぼカバーしていて、研究目的であれば十分な機能を網羅している。GMTライブラリを利用していて、イメージとしては、GMTを海底地形調査用に拡張したコードというところ。ユーザーインターフェースという意味では商用ソフトウェアに軍配があがるが,基本的なことは十分できるし,新しい解析手法などはむしろ早く取り入れられていることもある.
- MBsystemに含まれるプログラム群は、概ね2つのタイプに分かれる。ひとつは、
MBsystem独自のもので、直接測深器の生データを読み各種の処理をするもの(アスキーに出力、グリッド化、エラーデータ除去、etc.,
コマンドの名前がだいたいmbで始まる)。もうひとつは、データを図化するために、MBの独自コマンドとGMTのコマンドを組み合わせたスクリプトを作成
するもの(出力は図ではなくスクリプトファイルができる、コマンドの名前はだいたいmbm_で始まる)。後者は、あまり慣れていない場合に細かい指定をし
なくてもほぼ適切な図が書けるという利点があるが、なかなか自分の好みの図にはならないので、私はめっったに使っていない。
- スクリプト例の最初は、最も基本的な作業で、測深器の生データを読み込み、ひたすらアスキーの経
度、緯度、水深のならびにするもの。最低限これができれば、あとはすべてGMTワールドでも処理できる。ただしファイルが巨大になるが(前半は単一ファイ
ルを処理する場合、後半は複数のファイルを一度に処理する場合)。このmblistコマンドでは、もちろん水深値以外に生データに含まれる様々な値をアス
キー出力できる。
- 2番目のスクリプト例は、生データを読み込み、直接マスク付きグリッドデータをつくる場合。グ
リッド値の決め方(-F)や、船速などの条件を付してデータの取捨選択をするといった多彩なオプションがある。コマンドひとつでいきなりグリッドができる
ので、特に船上で最初にプロットしてみる時などにはたいへん重宝する。この例は、フォーマット94の生データと、既存の緯度・経度・水深のアスキーデータ
の両方を読み込んで、混ぜてグリッドを作成している例である。-Nオプションは空白グリッドにNaNを入れる指定(defaultは9999.9かなにか
が入ってしまう)
bash スクリプト例
生データから緯度・経度・水深並びのアスキーファイルをつくる
# output xyz from raw mb file
#
# case 1 : single input file
# parameter setting
ifile=sb200206120629.mb94 # input file name
format=94
# format number
xyzfile=sb200206120629.xyz # output file name
#
mblist -I$ifile -F$format -OXYZ -MA -V > $xyzfile
# case 2: input file is a list of files
# parameter setting
ifile=data.list
# input list file
mbfile=./edited/*.mb44 # original mb files
xyzfile=ldata.xyz
#output file name
#
ls -l $mbfile | awk '{print $9, "94"}' > $ifile
mblist -I$ifile -F$format -OXYZ -MA -V > $xyzfile
#
bash スクリプト例
生データからグリッドファイルをつくる
# creating masked grid from raw mb files
#
region=122/150/14.5/35 # grid region
ifile=data.list
# input list file
mbfile=./edited/*.mb94 # original mb files
xyzfile=./old/*.xyz # original ascii xyz files
format=-1
# in case of "list" file, format
number = -1
datatype=2
# data type
2: topo, positive upward, 1: bathy, positive downward, 3: amplitude, 4:
sidescan
clip=5
# clip size (distance from data in grid cells)
gridsize= 0.02/0.02 # grid size dx/dy/units
mode=1
#
algorithm for gridding 1: Gaussian Weighted Mean, 2: Median
speed=5
#
minimum speed allowed in input
root=data1
#root of output grid file name
#
ls -l $mbfile | awk '{print $9, "94"}' > $ifile
ls -l $xyzile | awk '{print $9, "0"}' >> $ifile
mgrid -R$region -I$file -C$clipsize -E$gridsize -F$mode -A$datatype -S$speed -N -O$root -V
#