海岸線/湖沼・河川/都府県境 の描画 (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