(Application) 海岸線データ変換(GMT用)

作成者:辻野智紀

概要

GMT (Generic Mapping Tools) フォーマット (ASCII) として配布されている海岸線データを DCL 用の海岸線データに変換するスクリプトです.

GMT フォーマットは以下のような形式でテキストファイルになっています.

>
180.00000 2.00000
180.00000 1.00000
180.00000 0.00000
180.00000 2.00000
>
...

記号「>」によって海岸線の切れ目を表し, その間の実数の第一列目が海岸線の経度, 第二列目が緯度を表します.

ソースファイル

  • メインプログラム : gmt2dcl_map.rb. (2016/07/21, 15:00 JST, 文字処理を高速化)

使い方

  • 以下のように, 第一引数に GMT フォーマットのアスキーファイル名, 第二引数に DCL の .asc ファイル名を指定して実行する.
$ ruby gmt2dcl_map.rb gmt.txt dcl.asc

DCL への導入

上記によって作成された DCL 用海岸線アスキーデータ dcl.asc は FORTRAN 版 DCL に付属されているバイナリ変換プログラム src/env1/mapdata/cvmapd を用いて変換する.

$ ./cvmapd
dcl.asc coast_dclsp  # <- 標準入力で 1 つ目にアスキーデータ, 2 つ目に変換後に出力されるバイナリデータ名を記述.

バイナリに変換されたデータ coast_dclsp は DCL のライブラリインストール先の dcldbase ディレクトリ内にコピーする.

# cp coast_dclsp /usr/local/lib/dcldbase   # cdcl の場合は cdcldbase 以下.

導入時の注意

  • 現在, DCL 側の制限として, 海岸線を描画するための配列要素の最大値が 8192 となっている.
  • そのため, 海岸線を一筆書きする際のポリラインの要素数は 8192 が最大となる.
  • 特に解像度の高い海岸線データを変換し, DCL に導入する際, 一筆書きする海岸線のデータ点数が 8192 以上だと DCL の実行時にエラーになる可能性がある.
  • この制限はハードコーティングされているため, 取り払うには DCL のソースコードを直接書き換え, ライブラリのリビルドが必要となる.
  • 書き換えが必要かどうか (変換したデータが 8192 以上のデータを有するかどうか) は, 変換してできた dcl.asc の各行の先頭整数が 8192 x 2 より大きな値であるかどうかで診断できる.
    • もし, 8192 x 2 を超えていれば, その最大値 / 2 より大きな値に書き換えなければならない.

書き換えが必要となるソースファイルは以下:

grph2/umpack/{umpmap.f,umfmap.f}
grph1/szpack/{szopts.f,szoptt.f}
env1/mapdata/cvmapd.f

サンプル

以下に, NOAA において配布されている海岸線データを DCL に追加した例を示す.

描画プログラムは DCL-7.0.0 の demo/grph2/umpack/test07.f を一部改変して使用している.

このデータは NOAA において GMT フォーマットで配布されており, いくつかの解像度に分けられる.

crude (最低解像度)
lores (低解像度)
inter (中解像度)
hires (高解像度)
dcl (DCL デフォルト海岸線)

広域描画 (dcl の coast_world)

gmt2dcl_map_crude.png

gmt2dcl_map_lores.png

gmt2dcl_map_inter.png

gmt2dcl_map_hires.png

gmt2dcl_map_world.png

狭域描画 (dcl の coast_japan)

gmt2dcl_map_jcrude.png

gmt2dcl_map_jlores.png

gmt2dcl_map_jinter.png

gmt2dcl_map_jhires.png

gmt2dcl_map_jjapan.png

更新日時:2016/08/01 23:45:23
キーワード:[DCL] [GMT] [海岸線]
参照: