座標変換パラメータの自動決定

前の例では相似変換パラメータや地図座標回転パラメータを陽に指定しましたたが, これらのパラメータを適切に決めるためには地図投影に関する知識が必要です.

たいがいの場合は, ビューポートいっぱいに全球を描くか, ある地域を描くかのどちらかでしょう. これら2つの用途を念頭において, DclFitMapParm は地図投影に必要なパラメータを自動的に決定してくれます. DclFitMapParmは正規変換のパラメータ設定(DclSetViewPort, DclSetSimilarity, DclSetMapProjectionAngle, DclSetMapProjectionWindow, DclSetTransNumber) と組み合わせて用います. つまり, 正規変換の必要なパラメータを指定し, 変換関数確定の直前にDclFitMapParmを呼ぶことによって, ユーザーが指定しなかったパラメータを適当に補った上で, DclSetTransFunctionを呼んで変換関数を確定します.

下の例は基本的には前の例と同じような描画をおこなうプログラムです. ただしここでは, ビューポートと変換関数番号を指定しただけで, 相似変換パラメータと地図座標回転パラメータは指定していません. ウインドウ情報が指定されていないと, DclFitMapParmは全球を描くべく 相似変換パラメータなどを決定して変換関数を確定します. (なお, 次の例ではウインドウを指定して, 一部地域を描く例を示します.)

map02.f90
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)
各種地図情報を描く.