海岸線/湖沼・河川/都府県境 の描画 (WSHORE)
WSHORE, RSHORE, PSHORE
1.機 能
日本およびその周辺(北緯20~50度,東経120~155度)の海岸線と主要な湖沼河川
および都府県境,もしくは世界の海岸線を,指定した図法に従って描く.
wshore ルーチンは,小縮尺図(1/500万以下)作成を想定した海岸線と湖沼・河川
の描画を行い,rshore/pshore ルーチンでは,大縮尺図(1/100万以上)用に,使用
する測地系(旧東京測地系 or 世界測地系)の選択と作図範囲を設定して海岸線・湖
沼河川・都府県境を描画する. 大縮尺図用の描画では,rshore ルーチンで,描画範
囲を度単位で指定したのち,pshore ルーチンで実際の描画を行うが,rshore ルーチ
ンの呼び出しを省略すると,日本周辺(北緯20~50度,東経120~155度)の全範囲を出
力対象とする.日本周辺以外の大縮尺図描画データを独自に用意した場合には,その
データの範囲を rshore ルーチンで指定すれば,pshore ルーチンを使用して描画する
ことは可能である.なお,pshore ルーチンでは 経度±180度をまたいだ作図を予定
していないので,その両側を個別に描く必要がある.
wshore/pshore ルーチンで使用する海岸線・湖沼河川・都府県境のデータは,すべ
てディレクトリ /home/SHARE/data/shore の下にある.wshore ルーチンが海岸線およ
び湖沼河川の位置データとして使用する wcoast.jpn, wriver.jpn および world.cst
の各ファイルには,分単位の緯経度値(測地系を区別できる分解能がない)が収容さ
れている.pshore ルーチンが,海岸線/湖沼・河川/都府県境の位置として使用する
データは,UTM座標と同様のゾーン番号を示す名称 Z?? および t?? なるサブディレク
トリに分けて,NiiEkkk.coast/NiiEkkk.river/NiiEkkk.prefb のファイル名で
保存されており,(北緯ii度,東経kkk度 を左下隅とする)緯経度とも1度の区画毎の
ファイルである.その内容は,0.01 分を単位とする緯経度値(左下隅からのオフセッ
トを示す整数)で示された 点列であり,列を構成する点数の値が前置されている.
このデータは分単位の緯経度値に換算され,外部手続き名引数(conv) に与えられた
座標変換サブルーチンを通して直角座標値に変換された後,スケーリングと平行移動を
行なって図化される.(Z?? サブディレクトリには 世界測地系のデータ,t?? サブデ
ィレクトリには (旧)東京測地系のデータを収容してある.)
なお,ユーザが上記ルールのデータを追加すれば,日本周辺以外の図化が行える.
その際,南半球・西半球のデータを追加する場合は,Sii(南緯) [ii:01~90], Wkkk
(西経) [kkk:001~180]の表記 でファイル名を設定すればよい.
その場合も,緯経度の基準は1度毎図画の左下(SW)隅である.
2.呼出し手順と引数
call rshore(m, is, in, kw, ke)
m [int] 準拠する測地系が世界測地系である(m=1)か,(旧)東京測地系
である(m=0)かを指定する.
そのいずれでもないときは,エラー扱いとなる.
is, in [int] 緯度範囲の南限・北限を度単位で指定する.
kw, ke [int] 経度範囲の西限・東限を度単位で指定する.
但し,大縮尺図用描画データを用意している範囲は,北緯20~50度,
東経120~155度の範囲(日本周辺)のみである.
この設定は,pshore ルーチンに対してのみ効果がある.
external conv
call wshore(xorg, yorg, mpen, scl, conv)
call pshore(xorg, yorg, mpen, scl, conv)
xorg, yorg [float] 基準点の座標値を cm単位で与える.
conv による図法展開の原点(x=y=0)を,描画図上でどの位
置に設定するかを指定するものである.
mpen [int] 描画に使用するペン番号を 10進3桁以内の数値で指定する.
海岸線を描くペン番号を1の位に,湖沼・河川を描くペン番号
を10の位に,都府県境(pshore の場合)を描くペン番号を100
の位に与える.各位とも値が 0 のとき当該情報を描かない.
wshore に対しては,特例として mpen=99 または mpen=999 が許され,
世界の海岸線を選択中のペン番号で描く.(mpen=99 のとき 経度0~360
度の範囲,mpen=999 のとき 経度-180~+180度の範囲 を図化する.)
それ以外のペン番号については,PSPLOTの説明を参照のこと.
scl [float] 図の縮小割合を指定する.
conv による図法展開直角座標値の scl を描画図上の長さ 1cm
に対応させることを意味する.(座標値が km単位なら,描画の
縮尺が (scl*10)万分の1 になる.)
conv [ext.symb.] 描画の図法を規定する外部手続き名.
次のような 4つの実数型引数をもつサブルーチンを定義し,そ
のサブルーチン名を実引数として与える.
subroutine conv(alat, alon, xeast, ynorth)
wshore/pshore の中では,“call conv(alat, alon, x, y)”
により,緯度(alat)・経度(alon)(分単位)から図法展開に従
った直角座標値(右向きにx,上向きにy)が計算される.
この conv引数には,自ら作成した図法変換サブルーチンを用いてよいが,
XYCONV(地図投影座標変換)ルーチン群の cviken を指定して用いることがで
きるように設計されている.但し,その座標変換の図法番号と原点位置等は
cvinitルーチンで指定する必要があり,その際に使用する座標系番号の測地
系と rshoreルーチン呼出しで指定した測地系との一致を確認すること.
3.使 用 例
!----------
external cviken
call cvinit(100, 35.*60., 135.*60., 0., 0.)
call psopn("wshore.ps","A4P")
call plots(2., 2.)
call plot(8., 7., -3)
call wshore(0., 0., 12, 250., cviken)
do i=20,50,5
call cviken(float(i*60), 7200., xe, yn)
call plot(xe/250., yn/250., 3)
do k=121,155
call cviken(float(i*60), float(k*60), xe, yn)
call plot(xe/250., yn/250., 2)
enddo
enddo
do k=120,155,5
call cviken(1200., float(k*60), xe, yn)
call plot(xe/250., yn/250., 3)
do i=21,50
call cviken(float(i*60), float(k*60), xe, yn)
call plot(xe/250., yn/250., 2)
enddo
enddo
call plot(0., 16., -3)
call wrect(-8., -8., 16., 10.)
call scisor(-8., -8., 16., 10.)
call cvinit(253, 0., 0., 0., 0.)
call cviken(float(35*60), float(135*60), xo, yo)
call rshore(1, 34, 36, 133, 136)
call pshore(-xo/12., -yo/12., 212, 12., cviken)
call plot(-8., 0., 3)
do k=-90,90
call cviken(float(35*60), float(135*60+k), xe, yn)
call plot((xe-xo)/12., (yn-yo)/12., 2)
enddo
do k=134,136
call plot(0., -8., 3)
do i=-60,30
call cviken(float(35*60+i), float(k*60), xe, yn)
call plot((xe-xo)/12., (yn-yo)/12., 2)
enddo
enddo
call plote
call pscls
stop
end