2011年11月2日水曜日

日本近海の等深線入りマップをきれいに書く方法(データ取得から作図まで)

10月から研究員として雇用され,対象海域が沿岸域にまで及ぶようになってきた.

これから観測を行うときに,対象海域の大まかな地形を把握しておく必要があるし,

流動モデルなんかを作るときにも深度データは不可欠.

なので,深度データを取得して,お絵描きソフトで等深線入りの図を作成した.

 

これから修論,D論で,このような図を作成しようとしている人もいるかと思うので,

データ取得から作図までの流れを記しておく.

 

<データ取得>

利用できる深度データはいろいろあるが,無料で使えて,日本近海に限って言えば,

JODC(Japan Oceanographic Data Center)の公開しているものを使えば良いと思う.

 

JODCのホームページの500mメッシュ水深というデータを用いる.

 

スクリーンショット 2011 11 02 14 35 20 1

 

すると,欲しいデータの領域を指定するページが出てくる.

 

スクリーンショット 2011 11 02 14 36 35

もし,欲しいデータ領域が図の青枠で囲っている領域外なら,このデータは用いることができない.

また,一回でダウンロードできるデータは緯度,経度2度分までという制約があるため,

もっと大きな領域のデータが欲しければ,何回かにわけてダウンロードする必要がある.

 

今回は俺の対象海域の一部である舞鶴周辺のデータを取得することにする.

舞鶴周辺を含んだ北緯35-36度,東経135-136度の範囲を指定して,検索ボタンを押す.

 

すると,次のように検索結果画面が出る.

スクリーンショット 2011 11 02 14 39 02

圧縮しないを選択し,データ取得.

 

すると,次のようにデータの使い道等を記入するページが表示される.

 

スクリーンショット 2011 11 02 14 39 27

必要事項を記入して,ファイル作成ボタンを押す.

スクリーンショット 2011 11 02 14 40 30

 

ファイルが作成されるので,そのファイルのリンクをクリックする.

 

スクリーンショット 2011 11 02 14 40 49

そうすればデータがブラウザ上に表示されるので,全選択コピーして,テキストで保存すればデータ取得は終了.

俺は,便宜的にMaizuru.datというファイルネームで保存した.

このデータが何を表しているのか,データの説明(フォーマット)を見てみると,

スクリーンショット 2011 11 02 15 31 14

種別,緯度,経度,水深の順番で並んでいる.

種別を見ると分かるが,データが補完されているので注意が必要.

 

 

<作図>

データの取得ができたので,そのデータを読み込んでお絵描きソフトで作図.

俺はGMTを用いたが,他の作図ソフトでももちろんOK.

 

以下は等温線入りマップを書くGMTスクリプト.

 

#共通オプション

Ropt=135.2/135.5/35.5/35.8
Jopt=M15
input=Maizuru.dat
output=Maizuru.ps
xyzfile=mean.xyz
cptfile=topo.txt
grdfile=test.grd
Bopt=a0.05f0.05:.:WeSn
#blockmean用オプション
Iopt=1c
#surface用オプション
tension=0.4
reso=1m/1m
#grdcontour用オプション
cinit=10
Aopt=20f10t
awk '{print $3,$2,$4}' $input |\
blockmean -R$Ropt -I$Iopt > $xyzfile
surface $xyzfile -R$Ropt -G$grdfile -T$tension -I$Iopt
grdcontour $grdfile -J$Jopt -R$Ropt -W1 -C$cinit -A$Aopt -Y4 -P -V -K > $output
pscoast -R$Ropt -J$Jopt -Df -W2 -G255/204/51 -I10 -K -V -O >> $output
psbasemap -R$Ropt -J$Jopt -B$Bopt -O -V >> $output

 

 

共通オプションからgrdcontour用オプションまでは変数の指定.

それ以降が本文.

各オプションはGMT関連サイト(記事最後に載せてます)を参照してもらうとして,

 

掻い摘んでやっていることを説明します.

awk '{print $3,$2,$4}' $input |\
blockmean -R$Ropt -I$Iopt > $xyzfile
では,先ほど取得した舞鶴周辺の水深データを読み込んで,xyzデータに変換するオプション.
注意したいのは読み込むデータが,種別,緯度,経度,水深の順番になっているのだが,
x,y,zの順番に直さないといけないので,awkを用いて,3(経度),2(緯度),4(水深)列目の順番にしてblockmeanに渡している.
surface $xyzfile -R$Ropt -G$grdfile -T$tension -I$Iopt

 

surfaceはblockmeanで作成されたxyzデータを等間隔なグリッドデータに変換するためのオプション.

テンション(-Tオプション)の与え方でかなり印象が変わるので,試行錯誤しないといけない.注意が必要

 

grdcontourコマンドで,surfaceで作成されたグリッドデータを使って等深線を書き,

pscoastで陸地を書き,

psbasemapで枠を書く.

これで出来上がり.

 

プレビュー.appなどで表示させてみると,このように等深線入りの地図が出来たことがわかる.

 

スクリーンショット 2011 11 02 16 48 49

 

GMTで作成した図はPostScript形式なので,

イラストレータなどで観測点や地名を入れるなど加工すれば,より使いやすい図にできる.

 

ちなみに,今回作図した舞鶴周辺海域の等深線地図と,前回の舞鶴下見の時に魚探で計測した水深データはほぼ一致した.

小さな空間スケールで水深が大きく変わるような場所でなければ,この水深データはかなり使えるんじゃないかと考えている.

無料やし!

 

<GMT参考サイト>

GMTの使い方

オプションの使い方が丁寧に書かれている.

Blockmean

GMTの使い方サイトにはBlockmeanオプションの使い方が載っていなかったので,こちらを参照した.

0 件のコメント:

コメントを投稿