前の例では相似変換パラメータや地図座標回転パラメータを陽に指定しましたたが, これらのパラメータを適切に決めるためには地図投影に関する知識が必要です.
たいがいの場合は, ビューポートいっぱいに全球を描くか, ある地域を描くかのどちらかでしょう. これら2つの用途を念頭において, DclFitMapParm は地図投影に必要なパラメータを自動的に決定してくれます. DclFitMapParmは正規変換のパラメータ設定(DclSetViewPort, DclSetSimilarity, DclSetMapProjectionAngle, DclSetMapProjectionWindow, DclSetTransNumber) と組み合わせて用います. つまり, 正規変換の必要なパラメータを指定し, 変換関数確定の直前にDclFitMapParmを呼ぶことによって, ユーザーが指定しなかったパラメータを適当に補った上で, DclSetTransFunctionを呼んで変換関数を確定します.
下の例は基本的には前の例と同じような描画をおこなうプログラムです. ただしここでは, ビューポートと変換関数番号を指定しただけで, 相似変換パラメータと地図座標回転パラメータは指定していません. ウインドウ情報が指定されていないと, DclFitMapParmは全球を描くべく 相似変換パラメータなどを決定して変換関数を確定します. (なお, 次の例ではウインドウを指定して, 一部地域を描く例を示します.)
program map02 use dcl integer,parameter :: np=14 integer,dimension(np) :: ntr = (/ & 10, 11, 12, 13, 14, 15, 20, & 21, 22, 23, 30, 31, 32, 33 /) character(len=32) :: cttl call DclOpenGraphics( -abs(DclSelectDevice()) ) call DclSetAspectRatio( 2.0, 3.0 ) call DclDivideFrame( 'y', 2, 3 ) call DclSetParm( 'MAP_MAJOR_LINE_INDEX', 1 ) call DclSetParm( 'MAP_MINOR_LINE_TYPE', 1 ) do i=1,np call DclNewFrame ! call DclSetMapProjectionAngle( 0.0, 90.0, 0.0 ) call DclSetViewPort( 0.1, 0.9, 0.1, 0.9 ) call DclSetTransNumber( ntr(i) ) call DclFitMapParm call DclSetTransFunction call DclSetParm( 'ENABLE_CLIPPING', .true. ) call DclDrawDeviceWindowFrame( 1 ) call DclDrawViewPortFrame( 1 ) call DclTransNumToLong( ntr(i), cttl ) call DclDrawTextProjected( 0.5, 0.95, cttl, height=0.03, index=3 ) call DclDrawMap( 'coast_world' ) call DclDrawGlobe if ( ntr(i).eq.23 ) then call DclNewFrame call DclNewFrame end if end do call DclCloseGraphics end program |
|
|
|
DclSetTransNumber (GRSTRN) |
変換関数番号を設定する. |
DclSetViewPort (GRSVPT) |
ビューポートを設定する. |
DclSetSimilarity (GRSSIM) |
相似変換を設定する. |
DclSetMapProjectionAngle (GRSMPL) |
地図投影の角度を設定する. |
DclSetMapProjectionWindow (GRSTXY) |
地図投影ウインドを設定する. |
DclSetTransFunction (GRSTRF) |
変換関数を確定する. |
DclTransNumToLong (SGTRNL) |
変換関数番号から名称を求める. |
DclDrawGlobe (UMPGLB) |
地図の境界線(縁)と緯度線,経度線を描く. |
DclDrawMap (UMPMAP) |
各種地図情報を描く. |