海岸線/湖沼・河川/都府県境 の描画 (WSHORE)


WSHORE, RSHORE, PSHORE
1.機 能
    日本およびその周辺(北緯20〜50度,東経120〜155度)の海岸線と主要な湖沼河川
  および都府県境,もしくは世界の海岸線を,指定した図法に従って描く.
    wshore ルーチンは,小縮尺図(1/500万以下)作成を想定した海岸線と湖沼・河川
  の描画を行い,rshore/pshore ルーチンでは,大縮尺図(1/100万以上)用に,使用
  する測地系(旧東京測地系 or 世界測地系)の選択と作図範囲を設定して海岸線・湖
  沼河川・都府県境を描画する. 大縮尺図用の描画では,rshore ルーチンで,描画範
  囲を度単位で指定したのち,pshore ルーチンで実際の描画を行うが,rshore ルーチ
  ンの呼び出しを省略すると,日本周辺(北緯20〜50度,東経120〜155度)の全範囲を出
  力対象とする.
    wshore/pshore ルーチンで使用する海岸線・湖沼河川・都府県境のデータは,すべ
  てディレクトリ /home/SHARE/data/shore の下にある.wshore ルーチンが海岸線およ
  び湖沼河川の位置データとして使用する world.cst および wcoast.jpn, wriver.jpn
  の各ファイルには,分単位の緯経度値(測地系を区別できる分解能がない)が収容さ
  れている.pshore ルーチンが,海岸線/湖沼・河川/都府県境の位置として使用する
  データは,SH??(??:20〜49)および SW??(??:20〜49)なるサブディレクトリに分
  けて,cst###.jpn/riv###.jpn/prf###.jpn(###:120〜154)のファイル名で保存さ
  れており,(北緯??度,東経###度 を左下角とする)緯経度とも1度の区画毎のファイ
  ルとして,0.01 分を単位とする緯経度値(左下角からのオフセットを示す整数)で与
  えられている.このデータは分単位値に換算され,外部手続き名引数(conv) に与えら
  れた座標変換サブルーチンを通して直角座標値に変換された後,スケーリングと平行
  移動を行なって図化される.(SH?? サブディレクトリには 旧東京測地系のデータ,
  SW?? サブディレクトリには 世界測地系のデータを収容してある.)

2.呼出し手順と引数

      call rshore(m, is, in, kw, ke)
      call rshore(is, in, kw, ke)
  m           [int]   準拠する測地系が2002年3月以前の旧東京測地系である(m=0)
                      か,世界測地系である(m=1)かを指定する.
                      m=0 または m=1 のいずれかでなければならず,そのいずれで
                      もないときは,4引数形式の下段の呼び出しとみなされ,m=0
                      (旧東京測地系)が仮定される.
  is, in      [int]   緯度範囲の南限・北限を度単位で指定する.
                      20 ≦ is < in ≦ 50 でなければならない.
  kw, ke      [int]   経度範囲の西限・東限を度単位で指定する.
                      120 ≦ kw < ke ≦ 155 でなければならない.
                不当な範囲設定を指定すると,is=20, in=50, kw=120, ke=155 の
                初期設定が有効となる.但し,測地系の指定(mの値)は有効である.
                この設定は,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)が計算される.

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 50 i=20,50,5
        call cviken(float(i*60), 7200., xe, yn)
        call plot(xe/250., yn/250., 3)
        do 50 k=121,155
          call cviken(float(i*60), float(k*60), xe, yn)
          call plot(xe/250., yn/250., 2)
   50 continue
      do 60 k=120,155,5
        call cviken(1200., float(k*60), xe, yn)
        call plot(xe/250., yn/250., 3)
        do 60 i=21,50
          call cviken(float(i*60), float(k*60), xe, yn)
          call plot(xe/250., yn/250., 2)
   60 continue
      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 70 k=-90,90
        call cviken(float(35*60), float(135*60+k), xe, yn)
        call plot((xe-xo)/12., (yn-yo)/12., 2)
   70 continue
      do 80 k=134,136
        call plot(0., -8., 3)
        do 80 i=-60,30
          call cviken(float(35*60+i), float(k*60), xe, yn)
          call plot((xe-xo)/12., (yn-yo)/12., 2)
   80 continue
      call plote
      call pscls
      stop
      end