GeoInit Subroutine

public subroutine GeoInit(file)

Initialize parameters for conversion

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: file

Variables

Type Visibility Attributes Name Initial
integer(kind=short), public :: i
type(IniList), public :: iniDB
integer(kind=short), public :: ios

error return code


Source Code

SUBROUTINE GeoInit &
!
(file)

USE IniLib, ONLY: &
!Imported routines:
IniOpen, IniClose, IniReadInt, IniReadString, &
IniReadReal, &
!Imported type definition:
IniList

USE StringManipulation, ONLY: &
!Imported routines:
ToString

IMPLICIT NONE

! arguments with intent (in):
CHARACTER (LEN = *), INTENT (IN) :: file

! Local variables:
TYPE (IniList)  :: iniDB
INTEGER (KIND = short)  :: ios !!error return code
INTEGER (KIND = short)  :: i

!------------end of declaration------------------------------------------------

!Read file containing ellipsoid and datum parameters
CALL IniOpen (file, iniDB)

!Allocate memory
ALLOCATE  ( ellps ( IniReadInt ('n_ellipsoids', iniDB) ), STAT = ios  )
IF (ios /= 0) THEN
  CALL Catch ('error', 'GeoLib',  &
  'allocation ellipsoid parameters array ',  &
  code = memAllocError )
ENDIF

ALLOCATE  ( datums ( IniReadInt ('n_datums', iniDB) ), STAT = ios  )
IF (ios /= 0) THEN
  CALL Catch ('error', 'GeoLib',  &
  'allocation datums parameters array ',  &
  code = memAllocError )
ENDIF

!Read ellipsoids parameters
DO i = 1, IniReadInt ('n_ellipsoids', iniDB)

  ellps (i) % name = IniReadString ('name', iniDB, &
                   section = 'ellipsoid' // ToString (i) )
  ellps (i) % epsg = IniReadString ('EPSG', iniDB, &
                   section = 'ellipsoid' // ToString (i) )
  ellps (i) % code = IniReadInt ('code', iniDB, &
                   section = 'ellipsoid' // ToString (i) )
  ellps (i) % a = IniReadReal ('semimajor_axis', iniDB, &
                   section = 'ellipsoid' // ToString (i) )
  ellps (i) % b = IniReadReal ('semiminor_axis', iniDB, &
                   section = 'ellipsoid' // ToString (i) )
  ellps (i) % inv_f = IniReadReal ('inverse_flattening', iniDB, &
                   section = 'ellipsoid' // ToString (i) )
END DO

!calculate derived ellipsoid parameters
DO i = 1, IniReadInt ('n_ellipsoids', iniDB)
  ellps (i) % f = 1. / ellps (i) % inv_f
  ellps (i) % e =  ( 2. * ellps (i) % f - ellps (i) % f ** 2. ) ** 0.5 
  ellps (i) % e_second =  ( ellps (i) % e ** 2.  / &
                           (1. - ellps (i) % e ** 2. ) ) ** 0.5 
END DO

!Read datums parameters
DO i = 1, IniReadInt ('n_datums', iniDB)

  datums (i) % name = IniReadString ('name', iniDB, &
                    section = 'datum' // ToString (i) )
  datums (i) % epsg = IniReadString ('EPSG', iniDB, &
                    section = 'datum' // ToString (i) )
  datums (i) % code = IniReadInt ('code', iniDB, &
                    section = 'datum' // ToString (i) )
  datums (i) % ellipsoid = IniReadInt ('ellipsoid', iniDB, &
                    section = 'datum' // ToString (i) )                    
  datums (i) % prime_meridian = IniReadInt ('prime_meridian', iniDB, &
                    section = 'datum' // ToString (i) )   
  datums (i) % method = IniReadInt ('method', iniDB, &
                    section = 'datum' // ToString (i) )                                                          
  datums (i) % dx = IniReadReal ('dx', iniDB, &
                   section = 'datum' // ToString (i) )
  datums (i) % dy = IniReadReal ('dy', iniDB, &
                   section = 'datum' // ToString (i) )
  datums (i) % dz = IniReadReal ('dz', iniDB, &
                   section = 'datum' // ToString (i) )                  
END DO

!Close configuration file
CALL IniClose (IniDB)

END SUBROUTINE GeoInit