%表題   GRPH1 基本グラフィックルーチンライブラリ
%
%履歴
%\Drireki{
%         93/10/06 酒井  敏
%         93/10/13 塩谷雅人
%         94/04/04 塩谷雅人
%         94/10/15 酒井  敏, 塩谷雅人
%         95/03/22 酒井  敏
%        }
%
%  \Dchapter{UMPACK : 地図作成ユーティリティー}
  \Dchapterhead
  \label{umpack}

\section{概要}
%\label{umpack.gaiyou}

\subsection{はじめに}
\label{umpack.gaiyou.intro}

UMPACK は地図情報(海岸線や緯度経度線)を描くための描画ルーチンと
地図投影変換のために必要なパラメータを適当に決めるコントロールルーチン
からなる.
\vspace{1em}

UMPACK において
ユーザーが使用するサブルーチンとしては以下のようなものがある.
\begin{itemize}
  \item 描画ルーチン
  \begin{description}
    \item {\tt UMPMAP} $ \cdots $ 各種地図情報を描く.
    \item {\tt UMPGLB} $ \cdots $ 緯度経度線と地図の輪郭を描く.
    \item {\tt UMPGRD} $ \cdots $ 緯度経度線を描く.
    \item {\tt UMPLIM} $ \cdots $ 地図の輪郭を描く.
  \end{description}
  \item コントロールルーチン
  \begin{description}
    \item {\tt UMSCNT} $ \cdots $ 球面と投影面の「接点」を指定する.
    \item {\tt UMSCWD} $ \cdots $ 円形のウィンドウを指定する.
    \item {\tt UMSPNT} $ \cdots $ 地図に含める点を指定する.
    \item {\tt UMPFIT} $ \cdots $ 変換パラメタを適当に決める.
    \item  \UMPGETSET  $ \cdots $ 内部変数を参照/変更する.
  \end{description}
\end{itemize}
\vspace{1em}

{\tt UMPFIT} は {\tt GRFRM} などによって未定義状態にされ,
その後ユーザーが設定しなかった
変換関数に関するパラメタを適当に決定する. 
これらのパラメタで変換関数を確定するには,
{\tt GRSTRF} を呼ばなければならない.
\vspace{1em}

地図投影に必要なパラメータがすべて設定されているとき,
{\tt UMPFIT} はなにもしない.
いっぽう, 地図投影に必要なパラメータが1つでも設定されていないとき,
{\tt UMPFIT} はすでに設定された情報から, 
適切なパラメタを決定しようと試みる.
{\tt UMPFIT} の動作は大きく分けて以下の2段階からなる.

\begin{quote}
\begin{description}
  \item[1:] 地図投影の極 ({\tt PLX}, {\tt PLY}, {\tt PLROT})を決める.
  \item[2:] 指定された点, および範囲が全て入るように, 
  	    相似変換パラメタ({\tt SIMFAC}, {\tt VXOFF}, {\tt VYOFF})
	    を調節する.
\end{description}
\end{quote}

すなわち, まず地図投影の中心となるべき点を定め, 
後は拡大／縮小および平行移動で必要な範囲を図に収める.
\vspace{1em}

この地図投影の中心となるべき点のことをパッケージでは「接点」と呼ぶ. 
円筒図法および円錐図法においては, 球と投影面は線で接しているが, 
この接線と中央経線の交点を「接点」とする.
方位図法における「接点」は地図投影の極と同義である.
これは地図学上の正確な言葉ではないが, 
通常もっとも歪みの少ない中心となるべき点を表わす全ての図法共通の用語
として「接点」という言葉を使うことにする.
\vspace{1em}

{\tt UMPFIT} の第一段階は, この「接点」を求めることである.
このために使われる情報の優先順位は以下の通りである.
\begin{quote}
\begin{description}
  \item[1:] {\tt SGSMPL} による極の指定.
  \item[2:] {\tt UMSCNT} による接点の指定.
  \item[3:] {\tt UMSCWD} による円形ウィンドウの指定.
  \item[4:] {\tt SGSWND} による矩形ウィンドウの指定.
  \item[5:] {\tt UMSPNT} による描画点指定. 
  \item[6:] デフォルト値 ({\tt PLX=0}, {\tt PLY=90})
\end{description}
\end{quote}
優先順位の高い情報が指定されていれば, それ以下の情報は無視される.
\vspace{1em}
 
第二段階の描画範囲決定は, {\tt UMSCWD} による円形ウィンドウ,
{\tt SGSWND} による矩形ウィンドウ, {\tt UMSPNT} によって指定された点, 
全てが描画範囲に入るように行なわれ, これらの間に優先順位はない.
これらの描画範囲を決定する情報が指定されていなかった場合は, 
全球が指定されたものと見なす.
ただし, {\tt UMLSET} によって内部変数{\tt 'LGLOBE'} が {\tt .TRUE.} に
設定された場合は, ウィンドウなどの情報は全て無視され全球が描画される.
このとき, 無限遠を含む以下の図法に関してはT座標系の次の範囲を「全球」
と見なす.
\vspace{1em}

\begin{quote}
    \begin{tabular}{ll}
      {\bf メルカトル図法:} & 南緯75$^\circ$から北緯75$^\circ$ \\
      {\bf ポーラーステレオ図法:}   & 赤道から北極 \\
      {\bf ランベルト正角円錐図法:} & 赤道から北極
    \end{tabular}
\end{quote}
\vspace{1em}

なお, ビューポートのパラメタ{\tt VXMIN}, {\tt VXMAX}, {\tt VYMIN}, 
{\tt VYMAX}の一部または全部が指定されていなかった場合には, 
まず, 最大描画範囲に指定された範囲が最大内接するようにスケーリングされ,
さらに指定された範囲が描画できる最小のビューポートを設定する.
\vspace{1em}

UMPACK では同じ結果を得る複数のコーディングが可能であるが, 
標準的な使用法を以下に示す.

\begin{itemize}
  \item {\bf 矩形ウィンド (円錐図法)}
    \begin{Dprogram}
      CALL GRFRM
      CALL GRSTRN(20)
      CALL GRSWND(UXMIN, UXMAX, UYMIN, UYMAX)
      CALL UMPFIT
      CALL GRSTRF
    \end{Dprogram}

  \item {\bf 円形ウィンド (方位図法) }
    \begin{Dprogram}
      CALL GRFRM
      CALL GRSTRN(31)
      CALL UMSCWD(UXC, UYC, R)
      CALL UMPFIT
      CALL GRSTRF
    \end{Dprogram}
    {\tt UXC, UYC} は地図の中心になる緯度経度で, この点を中心に
    半径R (角度) の範囲が描画される.

  \item {\bf 全球 (円筒図法)}
    \begin{Dprogram}
      CALL GRFRM
      CALL GRSTRN(12)
      CALL UMSCNT(UXC, 0., 0.)
      CALL UMLSET('LGLOBE', .TRUE.)
      CALL UMPFIT
      CALL GRSTRF
    \end{Dprogram}
     {\tt UXC} は中央経線となる経度.

  \item {\bf 全球 (横軸法)}
    \begin{Dprogram}
      CALL GRFRM
      CALL GRSTRN(12)
      CALL UMSCNT(UXC, UYC, 90.)
      CALL UMLSET('LGLOBE', .TRUE.)
      CALL UMPFIT
      CALL GRSTRF
    \end{Dprogram}
\end{itemize}
