Initialize parameters for conversion
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=*), | intent(in) | :: | file |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer(kind=short), | public | :: | i | ||||
type(IniList), | public | :: | iniDB | ||||
integer(kind=short), | public | :: | ios |
error return 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